[Docker] 컨테이너 생명주기

Bam·2025년 6월 11일
0

Docker

목록 보기
3/7
post-thumbnail

컨테이너 생명주기

도커를 사용하다가 어떤 프로그램의 업데이트가 나오면 어떻게 할까요?

정답은 해당 프로그램의 컨테이너를 폐기하고 새로 생성한다입니다. 왜냐하면 도커 컨테이너의 구축이 간단하기 때문에 일일이 업데이트를 하는 것보다 새로운 버전의 이미지를 내려받고 컨테이너를 생성하는 것이 더 빠르기 때문입니다.

그래서 도커의 컨테이너는 생성 > 실행 > 정지 > 삭제라는 생명주기를 갖게 됩니다.

컨테이너 생명주기 명령어

컨테이너를 다룰 때 가장 많이 사용하게 되는 명령어가 바로 생명주기와 연관된 명령어들입니다. 지난 포스트에서 명령어들을 소개하긴 했는데요. 여기서도 간략하게 다시 소개하고 넘어가도록 하겠습니다.

컨테이너 생성과 실행 docker run

docker run 이미지

사실 위에서 생성은 docker create, 실행은 docker start라고 소개했습니다.

그런데 보통 도커를 사용하게 되면 이미지를 내려받고 컨테이너를 생성하고 실행하는 과정을 반드시 거치게 되기 때문에 create, start (+ image pull)을 따로 사용하기 보다는 이 셋을 한 번에 수행하는 docker run을 가장 많이 사용하게 됩니다.

컨테이너 정지 docker stop

docker stop 컨테이너명

동작 중인 컨테이너는 바로 삭제할 수 없습니다. 그래서 삭제를 위해서는 우선 정지를 해야 삭제가 가능합니다.

이렇게 삭제 또는 단순 일시 정지(데이터 유지)를 원하는 경우 docker stop을 사용합니다.

컨테이너 삭제 docker rm

docker rm 컨테이너명

정지 상태의 컨테이너를 삭제하는 경우 docker rm을 사용합니다. 정지 상태가 아닌 컨테이너를 대상으로 지정하면 오류가 발생합니다.

컨테이너 생명주기 수행해보기

자 그럼 명령어를 알았으니 한 번 컨테이너 생명주기에 따라 생성, 실행, 정지, 삭제해보겠습니다. 테스트에 사용할 컨테이너는 아파치입니다.공식으로 제공하는 아파치 서버 컨테이너의 이미지 이름은 httpd입니다. 이 이미지를 내려받고 컨테이너로 만들어서 실행해보겠습니다. 실행 중인 컨테이너는 docker ps 명령으로 확인합니다.docker run 명령어를 통해 이미지를 도커 허브로부터 다운받고 이미지에 따라 컨테이너를 생성 및 실행했음을 확인할 수 있습니다.

다음으로는 정지를 해보겠습니다.정지중인 컨테이너까지 표시하는 -a 옵션을 줄 때만 Exited로 나타남을 확인할 수 있습니다. 정지가 잘 되었다는 의미죠. 그럼 정지된 이 컨테이너를 삭제해보겠습니다.-a 옵션을 사용해도 컨테이너가 보이지 않습니다.


docker ps

docker ps는 현재 실행 중인 컨테이너의 목록을 출력합니다.
docker ps -a이라는 옵션을 붙이면 존재하는 모든 컨테이너(실행 중 + 정지 상태)를 출력합니다.

이 명령을 실행하면 다음 항목 테이블에 따라 컨테이너가 표시되게 됩니다.
각 항목에 대한 설명은 다음과 같습니다.

항목설명
CONTAINER ID컨테이너 식별자
64자 구성이지만 최대 12자까지 표현
IMAGE컨테이너 생성에 사용된 이미지 이름
COMMAND컨테이너 실행 시 실행하도록 설정된 프로그램명
CREATED컨테이너 생성 후 경과 시간
STATUS컨테이너 현재 상태
실행 중: 'Up', 정지: 'Exited'
PORTS컨테이너에 할당된 포트 번호
NAMES컨테이너 이름

이미지 삭제

아까 수행했던 컨테이너 실습의 결과로 컨테이너는 잘 삭제되었습니다. 그러나 우리가 다운로드한 이미지는 삭제되지 않고 여전히 남아있습니다. 사용하지 않는 이미지의 용량으로 인해 도커가 사용하는 저장 공간에 압박을 받기 때문에 컨테이너를 폐기했으면 해당 컨테이너를 생성한 이미지도 함께 지워주는 작업을 해야합니다.

이미지를 삭제하기 위해서는 이미지 ID or 이미지 이름을 알아야합니다. 이미지에 대한 정보는 docker image ls 명령을 통해 알 수 있습니다.앞서 받은 httpd 아파치 이미지가 그대로 남아있죠? 용량도 221MB로 이런 크기가 쌓이고 쌓이면 생각보다 훨씬 많은 용량을 차지하게 됩니다.

ls 결과의 각 항목 설명은 다음과 같습니다.

항목설명
REPOSITORY이미지 이름
TAG버전 정보
IAMGE ID이미지 식별자
64자 구성이지만 최대 12자까지 표현
CREATED이미지가 생성된 시간
SIZE이미지 용량

TAG 같은 경우 버전 정보를 나타내는데요. 이미지를 내려받을 때 버전을 따로 명시 안하면 latest 버전으로 받아집니다.

docker image rm명령을 통해 httpd 이미지를 삭제해보겠습니다.

docker image rm httpd

해당 명령을 수행하고나면 이미지가 삭제됨을 확인할 수 있습니다.

이미지 삭제는 반드시 subcommand image를 붙여주세요. 그냥 docker rm은 컨테이너 삭제를 의미하는 아예 다른 명령어가 됩니다.

0개의 댓글