Docker. 컨테이너 관리
1. 컨테이너 확인
컨테이너 목록 확인
# docker ps
docker ps 명령만 사용하면 실행 중인 컨테이너만 출력하게 된다.
아래는 각 필드의 설명이다.
-
CONTAINER ID : 컨테이너의 기반이 되는 이미지
-
COMMAND : 컨테이너에서 실행 중인 애플리케이션
-
CREATED : 컨테이너가 생성된 시간
-
STATUS : 컨테이너의 상태 (UP은 실행중, exited는 중지)
-
PORTS : 컨테이너에서 사용 중인 포트 (포트포워딩 포함)
-
NAMES : 컨테이너의 이름
docker ps -a 명령을 실행하면 실행 중이지 않은 모든 컨테이터 목록이 출력 된다.
컨테이너 세부 사항 확인
docker inspect 명령을 이용하여 실행된 컨테이너의 상세 내용을 확인 할 수 있다.
# docker inspect CONTAINER_ID(또는 NAMES)
컨테이너가 실행되면서 실행되는 애플리케이션, 볼률, 네트워크 등을 확인 할 수 있다.
2. 컨테이너 생성 및 실행
컨테이너 생성
# docker create --help
docker create 의 주요 옵션은 아래와 같다.
-
-i (--interactive) : 표준 입력을 사용할 수 있게 함
-
-t (--tty) : 표준 출력 및 표준 에러를 터미널로 출력함
-
--name : 컨테이너의 이름 지정
컨테이너를 생성할 때 -i 와 -t 옵션을 같이 사용하여 표준 입출력이 가능한 컨테이너는 생성할 수 있다.
# docker create -it --name c1 centos
docker create 명령으로 컨테이너를 생성하면 실행 상태가 아니기 때문에 docker ps 명령으로 확인할 수 없으며 docker ps -a 명령을 실행하면 STATUS가 Created 인 상태를 확인할 수 있다.
컨테이너 시작 및 중지
이전에 생성했던 c1 컨테이너를 아래와 같이 실행할 수 있다.
# docker start c1
컨테이너를 중지하려면 docker stop 명령을 이용한다.
# docker stop c1
컨테이너 실행
컨테이너를 생성하면서 바로 시작하려면 docker run 명령을 사용한다. 이는 docker create 와 docker start 를 연속해서 실행하는 것과 같다.
# docker run -it --name c2 centos
컨테이너를 실행하면 바로 접근이 되는데 이때 프롬프트의 호스트네임을 확인하면 컨테이너의 ID와 일치한다.
이 상태에서 exit 명령을 사용하면 컨테이너가 종료되며 중지 상태로 돌아간다. 컨테이너를 실행 중인 상태에서 빠져 나오려면 “Ctrl + P + Q”를 입력한다.
컨테이너를 백그라운드로 실행하는 방법은 아래와 같다.
# docker run -d --name c3 centos
c3 컨테이너의 상태를 보면 실행되자마자 종료된다. 이는 컨테이너의 기반이 되는 이미지에 지정된 애플리케이션의 종류에 따라 달라지게 된다. 일반적으로 컨테이가 실행되면서 실행되는 애플리케이션이 데몬 종류이면 포그라운드로 실행했을 때(-it) 바로 종료되며, 백그라운드에서 동작하지 않은 명령이나 애플리케이션을 백그라운드로 실행하면(-d) 바로 종료된다.
아래는 httpd 이미지를 백그라운드에서 실행한 방법이다.
# docker run -d --name web1 httpd
컨테이너를 실행할 때 지정된 이미지가 존재하지 않으면 다운로드 받고 실행한다.
아래는 httpd 이미지를 포그라운드로 실행한 방법이다.
# docker run -it --name web2 httpd
STATUS 필드를 보면 Exited 상태로 표시된다.
컨테이너 삭제
컨테이너를 삭제하려면 docker rm 명령을 사용한다.
# docker rm c1 c2 c3
컨테이너를 삭제하려면 컨테이너가 중지되어야 한다. 실행 중인 상타의 컨테이너를 삭제하려면 -f 옵션을 사용한다.
# docker rm -f web1
3. 컨테이너 관리
컨테이너 접근
백그라운드에서 실행 중인 컨테이너에 접근하려면 docker attach 명령을 사용하며 docker attach 명령은 백그라운드에서 실행 중인 컨테이너에 접근할 수 있다.
# docker run -itd --name c1 centos
# docker attach c1
-itd 옵션을 함께 사용하면 표준 입출력을 사용할 수 있는 상태에서 백그라운드로 동작한다. 이때 attach 명령으로 접근할 수 있으며 다시 실행 중인 상태로 빠져 나오려면 “Ctrl + P + Q” 를 입력한다.
컨테이너에서 애플리케이션 실행
docker exec 명령을 이용하여 실행 중인 컨테이너에 추가로 애플리케이션을 실행할 수 있다.
# docker exec --help
COMMAND 에는 실행할 애플리케이션의 경로를 지정하며 경우에 따라 argument를 지정한다.
아래는 apache 웹서버가 실행 중인 web1 컨테이너에 추가로 bash shell 을 실행하는 방법이다.
# docker run -d --name web1 httpd
# docker exec -it web1 bash
docker exec 를 실행할 때 포그라운드에서 동작하게 하려면 run 명령과 마찬가지로 -it 옵션을 사용해야 한다. 이때 exit 명령으로 빠져 나와도 web1 컨테이너는 종료되지 않는다. 이는 exec 명령으로 실행한 애플리케이션은 bash 이기 때문에 단순히 bash 만 종료한 것이기 때문이다.
컨테이너 내의 실행 중인 프로세스 확인
컨테이너에서 실행 중인 프로세스를 확인 하려면 docker top 명령을 사용한다.
# docker top web1
컨테이너 이름 변경
docker rename 명령을 사용하면 컨테이너의 이름을 변경할 수 있으며 컨테이너를 생성하거나 실행할 때 --name 옵션을 사용하지 않으면 임의의 이름이 부여된다. 이때 관리의 편의성을 위해서 컨테이너 이름을 변경할 수 있다.
# docker rename 임의이름 변경할이름
컨테이너 일시 중지 및 재개
docker pause 명령을 사용하여 실행 중인 컨테이너를 일시적으로 중지할 수 있다.
# docker pause web1
STATUS 필드에 Paused 가 표시되어 있으면 컨테이너가 일시 중지된 상태이며 일시 중지된 컨테이너를 다시 실행하려면 docker unpause 를 사용한다.
컨테이너에 파일 복사
docker cp 명령을 사용하여 호스트의 파일을 컨테이너로 복사하거나 컨테이너의 파일을 호스트로 복사할 수 있다.
아래는 호스트의 파일을 컨테이너로 복사하는 방법이다.
아래는 컨테이너의 파일을 호스트로 복사하는 방법이다.
컨테이너의 파일 변경 확인
docker diff 명령을 사용하여 컨테이너가 실행된 이후에 변경된 사항을 추적할 수 있다.
# docker diff c1
diff 명령의 실행 결과의 첫 번째 글자는 파일의 변경 유무를 나타낸다.
A는 추가, D는 삭제, C는 변경 된 것을 의미한다.