[Docker] 도커 컨테이너 - 라이프사이클 및 명령어
이번에는 도커 컨테이너
의 라이프사이클과 관련 명령어를 정리하겠습니다.
도커 컨테이너의 라이프사이클
도커 이미지가 컨테이너로 생성될 때의 라이프 사이클은 위의 그림과 같습니다.
도커 컨테이너 생성부터 종료까지 생명주기별로 다루어보겠습니다.
도커 컨테이너 생성
컨테이너 생성 - docker create
$ docker create [image]
docker create
명령어는 받은 도커 이미지를 컨테이너로 생성합니다.
docker create 명령어를 입력하면, 도커엔진이 로컬 호스트에서 이미지 정보를 찾아서 컨테이너를 생성합니다. 정상적으로 수행되면 도커 엔진이 생성한 컨테이너의 해쉬값을 반환합니다.
만약, 로컬 호스트에 이미지가 없을 경우에는 도커엔진이 자동으로 docker pull을 실행하여 Docker Repoistory에서 이미지를 가져오는 것을 시도합니다.
도커 컨테이너 시작
컨테이너 시작 - docker start
docker start
명령어는 도커 컨테이너를 시작합니다.
도커 컨테이너가 생성되어있어야 합니다.
$ docker start [container]
컨테이너 생성 후 시작 - docker run
docker run
명령어는 컨테이너 docker create와 docker start를 모두 실행합니다.
docker run도 docker create와 마찬가지로 로컬 도커 엔진에 이미지가 존재하지 않을 경우 도커 중앙 이미지 저장소인 도커 허브에서 자동으로 이미지를 내려받습니다.
# 옵션
$ docker run [option] [image] [command] [args]
# 생략
$ docker run [image]
docker run 옵션
-i
-> 컨테이너와 상호(interactive) 입출력을 가능하게 합니다. 호스트의 표준 입력(stdin)과 컨테이너의 표준입력을 연결함. ex) 컨테이너에서 실행되는 어플리케이션이 키보드 입력을 필요로 할 경우 이 옵션을 통해 호스트에서 주는 키보드 입력을 컨테이너로 전달될 수 있도록 설정.
-t
-> tty를 할당합니다. 터미널 명령을 정상적으로 실행할 수 있도록 설정. (즉, -i와 -t는 셸을 실행하는 용도) ex) -t 옵션으로 tty를 활성화 시켜서 bash 쉘을 사용하도록 컨테이너를 설정해 줄 수 있음.
-i와 -t 옵션 둘 중 하나라도 사용하지 않으면 쉘을 정상적으로 사용할 수 없습니다.
# 백그라운드에서 알아서 동작하는 어플리케이션과 달리 표준 입력을 필요로 하는 어플리케이션인 경우 사용.
$ docker -i -t ubuntu:focal
# 종료.
$ exit
# 앱은 종료하지 않고 터미널만 빠져나오기.
ctrl + p, q 입력
--rm
-> 컨테이너가 실행 종료될 경우 이미지 자동으로 삭제
-d
-> detached 모드로 실행. 컨테이너가 background에서 데몬형태로 동작하도록 설정. (기본적으로는 Foreground에서 동작) -it가 컨테이너 내부에 attached 모드로 진입 했던 것과는 반대.
--name
-> 컨테이너의 이름을 설정. 옵션을 생략하면 데몬에서 자동으로 부여.
-p
-> 호스트 운영체제와 컨테이너 사이의 포트를 바인딩하기 위한 옵션 (추후에 도커 네트워크 포스트에서 다룰 예정)
$ docker run -p 80:80 -d nginx
-v
-> 호스트 운영체제와 컨테이너 사이의 파일시스템 디렉토리를 마운트하기 위한 옵션(추후에 도커 볼륨 포스트에서 다룰 예정)
도커 컨테이너 종료
컨테이너 종료
docker stop
명령어는 컨테이너를 안전하게 종료합니다.
$ docker stop [container]
컨테이너 강제 종료
docker kill
명령어는 컨테이너를 강제 종료합니다.
$ docker kill [container]
모든 컨테이너 종료
# $()는 명령어의 결과를 전달
$ docker stop $(docker ps -a -q)
도커 컨테이너 목록 확인하기
실행중인 컨테이너 상태 확인
docker ps
명령어는 실행중인 컨테이너의 상태를 확인할 수 있습니다.
$ docker ps
전체 컨테이너 상태 확인
docker ps
명령어에 -a
옵션을 주면 모든 컨테이너의 상태를 확인할 수 있습니다.
$ docker ps -a
컨테이너 상세 정보 확인
$ docker inspect [container]
도커 컨테이너 삭제
컨테이너 삭제
docker rm
명령어는 컨테이너를 삭제합니다. 실행중인 컨테이너는 삭제할 수 없습니다.
$ docker rm [container]
컨테이너 강제 종료 후 삭제
만약 컨테이너가 실행중이라면 -f
옵션을 이용하여 강제 종료 후 삭제할 수 있습니다.
$ docker rm -f [container]
모든 컨테이너 종료 후 삭제
## $()는 명령어의 결과를 전달
$ docker rm -f $(docker ps -a -q)
컨테이너 실행 종료 후 자동 삭제
$ docker run --rm [container]
중지된 모든 컨테이너 삭제
docker container prune
명령어로 중지된 모든 컨테이너를 삭제할 수 있습니다.
$ docker container prune