본문 바로가기

[DevOps]/[Docker]

[Docker] 컨테이너 인프라를 위한 DevOps 환경 구축-2.Docker Command(feat. 정보산업진흥원)

728x90

< Lesson 3-1. Docker command - Image control >

 

Image Download : 

1) Docker hub를 통한 다운로드 ->  hub.docker.com/

 

Docker Hub

Docker Certified:Trusted & Supported Products Certified Containers provide ISV apps available as containers. Certified Plugins for networking and volumes in containers. Certified Infrastructure delivers an optimized and validated Docker platform for enterp

hub.docker.com

docker hub는 docker의 기본 이미지 저장소이며 도커 회사가 개발한 오피셜 이미지 뿐 아니라, 사용자들이 개발한 이미지들도 업로드 되어있다. 도커 허브에 저장된 이름은 " Hub_ID / 저장소 이름 " 의 형식으로 되어있다. 이미지를 hub의 search에서 찾을 수도 있고, 터미널에서도 search 키워드를 사용해 검색할 수 있다.

virtual box에서 검색한 모습
mac에서 검색한 모습(실습만 아니면 virtualbox 쓸 이유가 없다 정말..;;)

2) 명령어를 통한 docker image download

$ docker pull [Image name]

 

Image management : 

$ docker images

Image remove : 

$ docker rmi

이런식으로 layer들까지 잘 삭제된 것을 볼 수 있다. 만약 해당 레이어를 다른 컨테이너, 이미지가 사용하고 있다면 삭제하지 않는다. 이런 경우 삭제를 위해서는 -f 옵션을 사용할 수 있지만 별로 권장하지 않는 사항이다.

Image Inspect : 

$ docker inspect

=> config 섹션 cmd ,volumes,workingDir,EntryPoint,RootFS

이미지 필드에 대한 설명 : 

Name Description Stars Official Automated
이미지 저장소 이름 이미지에 대한 설명 이미지에 대한 평가점수 공식 이미지 여부 자동화 빌드 여부

 

Image save, load :

고립된 네트워크 등 docker pull 을 사용할 수 없는 환경의 경우에, docker save와 load를 통해 도커 이미지 파일을 아카이브 파일로 복사하고, 이를 불러오는 save, load 명령어를 사용할 수 있다.

$ docker save
$ docker load

 

< Lesson 3-2. Docker command - Container control >

 

실행중인 컨테이너 확인 : 

$ docker ps    # -a옵션을 사용하면 호스트에 존재하는 모든 컨테이너를 출력한다
필드 container id Image command created status ports names
설명 컨테이너 고유ID 컨테이너가 사용하는 이미지 실행중인 어플리케이션 생성된 날짜 현재 상태 사용중인 포트 이름

컨테이너 생성 : 

$ docker create    # create명령은 컨테이너 생성만 하며 실행은 하지 않는다

위 명령어를 통해 testcentos1이라는 centos 이미지를 실행하게 되면 해당 이름으로 컨테이너를 만들 수 있다.

중요 ※ 추가적으로 이미지를 실행했을때 접근해서 명령어를 수행할 수 있게 하기 위해서는 -i와 -t옵션 ( 줄여서 -it )을 사용해야 한다.

$ docker start -ai testcentos2 # testcentos2 컨테이너의 쉘에 접근한다

접속 성공!! 단 이때  exit명령어를 사용하면 쉘(컨테이너)이 닫히면서 나가게 된다... 이를 해결하기 위한 명령어는...

CTRL + P + Q !!!!!

컨테이너 실행 : 

$ docker start    # -i 옵션은 표준입력에 연결, -a는 표준출력/에러에 연결

포트 번호 80이 열려있고, 실행시킨 시간에 대한 정보 등을 알 수 있다. 

다음과 같은 명령어를 수행하게 되면 ip주소를 확인 할 수도 있다. 또한 이를 curl을 찍어보면 다음과 같이 접근가능한 것을 알 수 있다.

$ docker inspect web1 | grep -i. ipaddress

 

컨테이너 생성 + 실행 : 

$ docker run # 이게 create와 start가 합쳐진 것이였구나...

docker run 명령어를 사용하면 컨테이너를 바로 실행할 수 있다. 이 명령어를 사용하면 create와 start를 사용할 필요가 없다. 

-d 옵션은 컨테이너 실행시 분리모드로 실행하는 옵션이다
와.;;;;........소.....름.....

※ 만약 이 위에 명령어를 붙인다면(당연히 이미지 안에 존재하는 명령어) 사용자가 지정한 명령을 cmd로 저장할 수 있다.

※ --rm 옵션을 붙이면, 이미지를 컨테이너로 실행하고, 컨테이너가 종료되고 나면 해당 컨테이너를 자동으로 삭제해준다.

 

컨테이너 정보 확인 : 

$ docker stats -a

모든 컨테이너의 상태를 확인할 수 있다.

stats 명령어는 지속적으로 컨테이너의 상태를 확인해 주기 때문에 스트림 옵션을 끄려면 --no-stream을 추가해주면 된다.

컨테이너 중지 : 

$ docker stop

 

컨테이너 재시작 : 

$ docker restart

 

컨테이너 삭제 : 

$ docker rm

+ 컨테이너 실행 시 유용한 설정법 : (컨테이너 커스터마이징을 위한)

1) 환경 변수 

$ docker run -it --name os3 -e "LAB=docker" centos:latest

 

2) CPU 제한 

$ docker run -it --name os3 --cpus 0.3 centos:latest # cpu자원 30%만 사용하도록 한다

 

3) 메모리 제한 

$ docker run -it --name os3 --memory 1024m centos:latest # 메모리 1024m만 사용하도록 한다

 

4) 자원제한 변경 

$ docker update --memory 1400m os3 # os3의 메모리 재한을 1400m으로 증가시킨다

 

< Lesson 3-3. Docker command - Container Management>

 

컨테이너 접근 및 실행 :

분리모드로 실행중인 컨테이너에 직접 접근하지 않고 명령을 실행하는 방법으로 docker attatch와 docker exec이 있다.

$ docker attach

docker attach는 표준 입력, 표준 출력/에러를 포함하는 컨테이너에 연결할 수 있다. attatch 명령어를 통해 컨테이너를 사용하고 나서 Ctrl + P + Q를 사용하면 동일하게 나갈 수 있다.하지만 이 방법은 기본적으로 쉘 프로그램을 실행하고 있지 않으므로 docker attach 로 접근하지 않는 것이 좋다.

$ docker exec

exec는 컨테이너에서 내가 원하는 명령을 실행해 주는 커맨드 이다. 다음과 같이 사용할 수 있다.

 

컨테이너 프로세스 및 로그 확인 :

$ docker top

$ docker logs

먼저 docker run -d --name db1 mysql:5.7을 수행시키고 나서 docker logs로 오류를 찾아보자.

이런 방식으로 컨테이너 내부에서 발생한 문제들을 확인 할 수 있다.

 

컨테이너에 파일 복사 및 확인 : 

호스트에 있는 파일을 컨테이너에 복사하거나, 혹은 컨테이너에 있는 파일을 호스트로 복사할 수 있다(cp). 또한 컨테이너의 파일 시스템 중에서 어떤 것이 변경되었는지를 확인 할 수 있는 명령어도 있다(diff)

$ docker cp

$ docker diff

diff 명령은 컨테이너에서 파일의 변경상태를 체크할 수 있다. 이때 파일의 상태는 다음과 같이 나타낸다.

  • A : 파일이 추가됨
  • C : 파일이 변경됨
  • D : 파일이 삭제됨

 

 

-  다음 포스팅에서는 도커 볼륨과 데이터 관리, 네트워크, Dockerfile 등등이 이어진다 -

728x90