4.도커 컨테이너 다루기

컨테이너는 파일 시스템과 어플리케이션이 함께 담겨있는 박스이다.

컨테이너의 생명주기

도커 컨테이너는 실행 중, 정지, 파기의 3가지 상태를 갖는다. 이를 도커 컨테이너의 생애주기라고 한다. 각 컨테이너는 같은 이미지로 생성했더라도 다른 상태를 갖는다.

실행 중 상태 : docker container run 명령의 인자로 지정된 도커 이미지를 기반으로 컨테이너가 생성되면 이 이미지를 생성했던 Dockerfile에 포함된 CMD 및 ENTRYPOINT 인스트럭션에 정의된 어플리케이션이 실행된다. 이를 실행 중 상태라고 한다.
서버의 경우 실행 기간이 길지만 명령이 바로 실행되고 끝나는 명령행 도구 등의 컨테이너는 실행 중 상태가 길게 유지되지 않는다.

정지 상태
실행 중 상태에 있는 컨테이너를 사용자가 명시적으로 정지하거나 컨테이너에서 실행된 어플리케이션이 정상/오류 여부를 막론하고 자동으로 정지 상태가 된다.
정지시키면 가상 환경으로는 더 이상 동작하지 않지만, 종료되던 시점의 상태가 저장돼 남는다. 그러므로 정지시킨 컨테이너를 다시 실행할 수 있다.

파기상태
정 상태의 컨테이너는 명시적으로 파기하지 않는 이상 디스크에 그대로 남아있다. 한번 파기한 컨테이너는 다시는 실행할 수 없다.

docker container run
도커 이미지로부터 컨테이너를 생성하고 실행하는 명령이다. 도커 컨테이너를 싱행중 상태로 만들기 위해 사용한다.
docker container run [options] 이미지명[:태그] [명령] [명령인자..]
docker container run [options] 이미지ID [명령] [명령인자..]

docker container run -it alpine:3.7 uname -a
이 경우 Dockerfile에 정의되어있는 CMD 인스트럭션을 오버라이딩하여 uname -a가 실행되도록 할 수 있다.

컨테이너 이름 붙이기
컨테이너를 다루는 명령을 실행할 때는 ID등으로 컨테이너를 특정해줘야 한다. 매번 docker container ls를 통해 id나 이름을 확인하기 번거롭기 때문에 이름을 붙여 활용할 수 있다.
docker container run –name [컨테이너명] [이미지명]:[태그]

docker container ls
docker container ls [options]
실행 중이거나 종료된 컨테이너의 목록을 보여주는 명령

docker container ls -q 를 통해 컨테이너 ID만 추출할 수 있다.

docker container stop
docker container stop 컨테이너ID_또는_컨테이너명
실행중인 컨테이너를 정지하는 명령이다.

docker container restart
docker container restart 컨테이너ID_또는_컨테이너명
파기하지 않은 정지 상태의 컨테이너 재시작

docker container rm
docker container rm 컨테이너ID_또는_컨테이너명

docker container logs
현재 실행중인 특정 도커 컨테이너의 표준 출력 내용을 확인할 수 있다.
docker container logs [options] 컨테이너ID_또는_컨테이너명

docker container exec
docker container exec [options] 컨테이너ID_또는_컨테이너명 컨테이너에서_실행할_명령

docker container cp
컨테이너끼리 혹은 컨테이너와 호스트간에 파일을 복사하기 위한 명령이다. Dockerfile에 포함된 COPY 인스트럭션은 이미지를 빌드할 때 호스트에서 복사해 올 파일을 정의하기 위한것이고, docker container cp 명령은 실행중인 컨테이너와 파일을 주고받기 위한 명령이다.

컨테이너 안에 있는 /echo/main.go 파일을 호스트의 현재 작업 디렉터리로 복사하려면 다음과 같이 하면된다.
docker container cp echo:/echo/main.go .

호스트쪽에서 컨테이너로 파일을 복사하려면 다음과 같이 한다.
docker container cp dummy.txt echo:/tmp

/

Share