보통의 컨테이너는 다음과 같은 생명 주기를 가집니다.
생성되고
시작하고
동작하다가
정지하고
삭제되죠.
주요 명령어들과 위의 상태주기를 함께 보겠습니다.
Create
docker create <img>
docker create
는 이미지를 통해 컨테이너를 생성합니다.생성 후 컨테이너는
Created
상태로 존재합니다.이미지에는 파일 스냅샷과 커맨드가 있는데요.
Created
는 파일 스냅샷이 컨테이너의 저장공간에 적재되고 커맨드가 실행되지 않은 상태입니다.
docker creater debian
Start
docker start <container-id>
start
는 컨테이너를 실행시킵니다.Create
상태에서는 컨테이너에 파일 스냅샷이 적재된 상태인데요.이 상태에서 start 상태가 되면 이미지의 Command가 컨테이너에서 실행됩니다.
docker start b3c
Run
docker run <img>
위의
create - start
보다 한방에 처리 가능한 run
을 주로 사용하실텐데요run
커맨드는 생성, 시작을 동시에 하는 명령어입니다. docker run -it debian
ubuntu
나 debian
같은 대화형 프로세스가 필요한 경우 -it
옵션을 사용하면 대화형 bash shell
을 사용할 수 있습니다.Stop, Kill
동작 중인 컨테이너를 중지하고 싶을 때 Stop과 Kill이 있다.
두 명령어 다 컨테이너를 중지시키는 기능인데 왜 두 개의 명령어로 나누어져 있을까?
docker stop <container-id or container-name>
stop은 자비롭게 컨테이너를 기다려준다.
현재 동작하고 있는 작업을 종료하고 컨테이너를 중지시킨다.
docker kill <id or name>
kill은 컨테이너의 작업을 기다려주지 않는다.
현재 무슨 작업을 하고 있던 간에 컨테이너를 종료한다.
SIGTERM , SIGKILL
도커 공식문서의 stop과 kill 부분에 SIGTERM과 SIGKILL에 대한 내용이 나온다.
kill은 바로 SIGKILL 시그널을 보낸다.
stop은 SIGTERM 시그널을 보내고 유예기간 후에 SIGKILL 시그널을 보낸다.
컨테이너를 삭제하려면 ??
컨테이너 삭제
docker rm <container>
모든 컨테이너 삭제
docker rm `docker ps -a -q`
모든 컨테이너를 삭제합니다.
docker rm은 알겠는데 `docker ps -a -q`는 뭘까요??
뒷 부분의 `은 따옴표가 아닌 백틱(backtick)이라고 부르는 기호입니다. 보통 키보드의 esc 바로 아래에 있습니다.
백틱의 역할은
명령어를 실행하고 출력을 가져오는
역할입니다. 다시 말해서
docker ps -a -q
명령어를 실행하고 나오는 출력을 docker rm
으로 실행하는거죠.자... 그럼 docker ps -a -q 만 실행해보겠습니다.
대강 추측하기로는 컨테이너들의
ID만
출력하는 명령어 같습니다.공식문서의 ps 부분을 참조하겠습니다.
docker ps -a -q
중 -a
는 모든 컨테이너를 표시하는 옵션이네요. 디폴트 옵션은 현재 실행 중인 컨테이너만 가져옵니다.-q
옵션은 ID들만 출력하는 옵션입니다.docker ps -a -q
는 "모든 컨테이너의 ID만 출력"하는 명령어라고 할 수 있습니다.docker rm `docker ps -a -q`
# docker rm <모든 컨테이너 ID 나열>
처음에는 어떤 명령어인지 알 수 없던 명령어가 이제는 그렇게 동작하는게 당연하게 느껴지네요.