도커
컨테이너
삭제

도커 컨테이너 삭제

이번 포스팅은 도커 컨테이너 삭제 관련 7가지 핵심 내용을 정리합니다. docker container rm 명령어를 중심으로, 컨테이너 상태에 따른 삭제 방법과 그 이외에 복구 방법, 에러 해결 등의 내용을 포함합니다.

1. 도커 컨테이너 삭제 명령어

도커 컨테이너 삭제 명령어는 다음과 같습니다.

$ docker container rm [OPTIONS] CONTAINER [CONTAINER...]

rm 명령어는 하나 이상의 종료된 컨테이너를 삭제합니다. CONTAINER 위치에 컨테이너 ID 혹은 이름을 입력해 실행하면 됩니다. 이 때, 컨테이너만 삭제되며 도커 이미지는 삭제되지 않습니다. 도커 이미지 삭제 명령어는 docker image rm이며 더 자세한 내용은 해당 포스트에서 확인하세요.

또한, [OPTIONS] 위치에 3가지 옵션, --force, --link, --volume 을 추가할 수 있습니다. --force 옵션은 아래 섹션 4 에서 다룹니다.

--link 옵션은 해당 컨테이너가 포함된 링크를 삭제합니다. 이 때, 컨테이너 자체는 삭제하지 않다는 점을 주의해야 합니다. 도커는 링크 사용보다 사용자 정의 네트워크 사용을 권하고 있기 때문에, deprecated 될 가능성이 높은 옵션입니다. 당분간, 레거시 코드에서만 사용하길 추천합니다.

--volume 옵션은 해당 컨테이너를 삭제할 때, 컨테이너와 연결된 모든 볼륨도 삭제하는 옵션입니다. 이후 별도의 포스트로 다루겠지만, 컨테이너의 저장소 역할을 하는 volume은 독립적인 개체입니다. 그래서 컨테이너가 삭제되어도 볼륨은 자동으로 삭제되지 않습니다.

그럼 예제로 확인해보겠습니다. 아래 예제는 모든 컨테이너 목록을 조회하고, 컨테이너 ID를 가져와 삭제합니다

$ docker container ls --all
CONTAINER ID   IMAGE    COMMAND                  ...
6f3e40d12122   nginx    "/docker-entrypoint.…"   ...
 
$ docker container rm 6f3e
6f3e
 
$ docker container ls --all
CONTAINER ID   IMAGE    COMMAND   ...

컨테이너가 정상적으로 삭제되어 더이상 조회되지 않는 것을 확인할 수 있습니다.

2. 컨테이너 삭제 복구 대안

도커는 rm 명령어로 삭제한 컨테이너를 복구하는 방법을 제공하지 않습니다. 따라서, 예상치 못한 삭제에 대비해, 다음과 같은 대안을 알고 있는 것이 좋습니다.

2.1. 볼륨으로 데이터 관리

도커 볼륨은 컨테이너에서 영구적으로 저장해야 할 데이터나 공유할 데이터를 안전하게 저장하는 가장 좋은 방법입니다. 섹션 1에서 언급했듯, 볼륨은 컨테이너와 별개로 삭제됩니다. 따라서, 컨테이너에서 지워지지 말아야 할 데이터는 볼륨에 저장되도록 설정해두세요.

2.2. docker container commit 명령어로 새 이미지 생성

docker container commit 명령어는 현재 컨테이너의 모든 변경 사항을 가진 새로운 이미지를 생성합니다. 따라서, 현재 상태가 보존되어야 하는 컨테이너의 경우, 이 명령어를 주기적으로 활용할 수 있습니다.

3. 컨테이너 삭제 안됨 해결 방법

도커 컨테이너 삭제가 안되는 경우, 원인은 다양합니다. 그 중 가장 많이 발생하는 원인 5가지와 해결 방법을 정리해보았습니다.

3.1. 실행중인 컨테이너

도커는 실행중인 컨테이너를 삭제하지 못하도록 막습니다. 따라서, 현재 삭제하고자 하는 컨테이너가 실행중인지 확인하고, 만약 그렇다면 docker container stop 명령어를 통해, 종료 후 삭제하는 것이 좋은 프로세스입니다.

강제로 삭제되어도 무리 없는 컨테이너라고 확신한다면, 섹션 4의 컨테이너 강제 삭제 방법을 참고해서 삭제할 수도 있습니다.

3.2. 다른 컨테이너가 사용 중인 컨테이너

현재 삭제하려는 컨테이너를 다른 컨테이너에서 사용하고 있는지 여부도 확인해야 합니다. 이 경우에도 삭제할 수 없기 때문입니다.

한 컨테이너는 다른 컨테이너와 볼륨(--volumes-from 옵션), 링크(--link 옵션), 네트워크(--network) 등의 수단으로 인결되어 실행할 수 있습니다. 이러한 경우라면, 현재 컨테이너를 사용중인 다른 컨테이너를 먼저 삭제해야 현재 컨테이너도 삭제가 가능합니다.

3.3. 권한 문제

현재 사용자가 도커 사용에 적합한 권한 설정을 받지 못 했다면, 컨테이너 삭제 시 권한 문제로 거부될 수 있습니다. 이 문제는 도커 컨테이너 중지 및 종료 - 7. permission denied 발생 시 해결 방법을 확인해주세요.

3.4 기타 서버 환경 문제

이외에도 서버의 디스크 용량이 부족하거나, 도커 데몬이 제대로 작동하지 않는 경우에도 컨테이너 삭제가 거부될 수 있습니다. 이러한 부분을 확인해보는 것이 좋습니다.

4. 실행중인 컨테이너 강제 삭제

실행중인 컨테이너를 강제로 삭제하는 것은 추천하는 방식이 아닙니다. 다만, 컨테이너가 제대로 작동되지 않는 상태에서 정상적인 종료가 어려울 때는, 강제적으로 삭제해야 합니다.

이 때 사용하는 것이 docker container rm 명령어의 --force 옵션입니다. 다음과 같이 사용할 수 있습니다.

$ docker container rm --force CONTAINER

컨테이너를 강제 삭제할 때는 항상 다른 컨테이너나 볼륨 등에 영향을 미치지 않을 지 판단한 후에 진행하길 바랍니다.

5. 종료된 컨테이너 전체 삭제

모든 종료된 컨테이너가 더이상 사용하지 않는 컨테이너라면, 이 모두를 명령어 하나로 삭제하는 방법이 있습니다.

$ docker container prune

이 명령어를 입력하면, 도커는 정로말로 모든 종료된 컨테이너를 삭제할 것인지 다시 한 번 질문합니다. 이 질문에 대답하면, 종료된 컨테이너 전체 삭제 작업을 진행합니다.

섹션 2에서 언급했지만 삭제된 도커 컨테이너를 복구하는 방법은 없으니 주의해서 사용할 명령어입니다.

6. 전체 컨테이너 전부 삭제

정말 추천하는 방법은 아니지만, 만약 실행 중이건 정지된 상태이건 모든 컨테이너를 굳이 한 번에 전부 삭제하려고 한다면... 방법은 있습니다.

$ docker container rm --force $(docker container ls -aq)

docker container ls -aq 명령어는 모든 상태의 컨테이너 ID를 조회하는 명령어입니다. 이 ID 목록을 쉘 스크립트의 $() 문법으로 rm 명령어에 인자로 보냅니다. 그리고 컨테이너 목록 중 실행중인 컨테이너가 있다면 자연스럽게 삭제되지 않기 때문에, --force 옵션을 추가해서 강제 삭제하는 것이 필요합니다.

7. 마치며

이번 포스팅에서는 도커 컨테이너 삭제 관련 내용을 정리했습니다. docker container rm 명령어를 중심으로, 컨테이너 상태에 따른 삭제 방법과 그 이외에 복구 방법, 에러 해결 등의 내용을 다뤄보았습니다. 컨테이너를 삭제하는 경우에 유용하게 활용하길 바라겠습니다.

copyright for docker container remove

© 2023 All rights reserved.