딥상어동의 딥한생각 2022. 12. 8. 22:51

핵심내용

 

도커 컨테이너를 정리하는 방법에 대해서 다루고자 한다.

 

일단 정지용

 

도커 컨테이너를 삭제하기 전에 우선, 도커를 먼저 정지해야 한다. 왜냐하면, stop후 삭제하는 과정을 통해 삭제하는데 필요한 충분한 시간을 벌 수 있기 때문이다. (다만, 정지를 하지 않고도 삭제를 강제할 수 있기는 하다.)

그래서, 컨테이너를 삭제하기 전에 도커를 먼저 정지해야 한다.

1. 하나의 컨테이너를 정지하는 경우

 docker stop [OPTIONS] CONTAINER [CONTAINER...]

컨테이너 아이디나, 혹은 이름을 넣어준다.

2. 여러개의 컨테이너를 정지하는 경우

docker stop container1 container2

컨테이너 이름이나 아이디를 띄어쓰기로 입력해준다.

3. 특정 이미지와 연관된 모든 컨테이너 정지

docker ps -q --filter ancestor=IMAGE_NAME | xargs docker stop

docker ps -q : 컨테이너 아이디 리스트만을 출력해준다.
--filter: 조건에 따라 필터링 수행
ancestor: 필터링 조건 중 하나로, 입력값으로 주어진 이미지를 공유하는지 확인
xargs: 명령의 출력을 취하여 다른 명령의 인수로 전달해준다.

4. 모든 컨테이너 정지

docker ps -q | xargs docker stop

 

컨테이너 삭제

 

이제, docker ps를 해도 실행되고 있는 컨테이너가 노출되지 않을 것이다.

docker ps -a

하지만, 위와 같이 docker ps -a 옵션을 주어 출력하면, 중지했던 컨테이너들이 다시 표기 된다. 왜일까? docker ps의 기본 옵션은 running중인 컨테이너 들이기 때문이다.

1. 하나의 컨테이너 삭제하기

docker rm [OPTIONS] CONTAINER [CONTAINER...]

docker rm 명령어에 컨테이너 아이디나 이름을 입력해서 컨테이너를 삭제할 수 있다.

2. 실행중인 컨테이너 강제로 삭제하기

docker rm --force container1

--force 옵션을 이용해서 현재, 실행중인 컨테이너를 강제로 삭제하도록 할 수도 있다.

3. 정지한 모든 컨테이너 삭제하기

docker rm $(docker ps --filter status=exited -q)
docker ps --filter status=exited -q | xargs docker rm

$(): 명령어의 실행 결과이다.
status: --filter 옵션의 종류중 하나로 말 그대로 컨테이너의 상태를 의미한다.
exited: 종료 됐다는 뜻이다.
정지와 마찬가지로, docker 명령어의 아웃풋 값을 새로운 명령어의 인풋으로 넣어주는 방식을 취한다.

여기까지, 진행하고 나면 docker ps -a 명령어를 입력해도 아무런 컨테이너가 보이지 않는다.

 

이미지 삭제

 

아직, 끝이 아니다. 내려받은 이미지는 여전히 어딘가에서 공간을 차지하고 있을 것이다. 이미지는 docker rmi 명령어를 이용하여 지울 수 있다.

docker rmi [OPTIONS] IMAGE [IMAGE...]

명령어 응용 방식은 위와 동일하다. 위 방식을 응용해서 동시에 여러 이미지를 삭제할 수 있다.