터칭 데이터
Docker & K8S - 클린업 본문
다수의 Container로 구성된 소프트웨어 실행
앞서 만들어본 Hangman 프로그램은 하나의 Container로 구성되어 있었는데 만일 다수의 Container로 구성된 프로그램이라면 어떻게 이미지를 빌드해야할까?
Docker에서 5개의 컨테이너로 구성된 프로그램을 실습용으로 제공하는데 이것으로 실습을 진행하려 합니다.
그런데 여기서 잠깐
Docker로 다수의 컨테이너로 구성된 프로그램을 실행하기 전에 Docker 환경을 클린업하는 방법을 살피겠습니다.
지금까지 다양한 Docker 실습을 해오며 쌓여온 여러 Container로 환경 등이 꼬여있을 가능성이 있습니다. 여러 status 상태의 컨테이너들도 존재할 것이구요. 이를 이번 시간에 정리하고 가겠습니다.
이번 실습과도 별개로 개발을 할 때 주기적으로 클린업하고 Docker 개발 및 공부를 하는 것이 좋습니다.
팁: Docker 환경 클린업 (1) - 커맨드라인
Docker Desktop에서 모든 삭제하는 것이 가장 직관적
Image를 삭제하려면 먼저 실행 중인 Container가 없어야함
따라서 맞는 순서는 먼저 Container를 중단하고 다음으로 Image를 삭제
컨테이너 삭제
원래는 docker container ls를 하고 Container ID를 개별적으로 docker container rm 뒤에 추가해야함
하지만 한번에 이를 실행하는 것이 더 좋음
$ docker container rm -f $(docker container ls -aq)
-f는 컨테이너가 실행 중이어도 강제로 멈추고 삭제한다는 뜻입니다.
-aq는 실행여부와 관계없이 모든 컨테이너 ID를 확인하는 옵션으로 실습에서 더 자세히 설명드리겠습니다.
이미지 삭제
원래는 docker image ls를 하고 Image ID를 개별적으로 docker image rm 뒤에 추가해야함
하지만 한번에 이를 실행하는 것이 더 좋음
$ docker image rm -f $(docker image ls -q)
이미지들은 run 상태가 되지 않으므로 -f를 굳이 붙이지 않아도 상관 없습니다. 단 레퍼런스 문제 등으로 이미지가 삭제되지 않는 경우가 있을 때는 -f를 붙여주셔야 합니다.
정말 다 삭제되었는지 확인
docker ps
docker images
팁: Docker 환경 클린업 (2) - Desktop에서 Troubleshoot 메뉴
Docker Desktop에서 모든 삭제하는 것이 가장 직관적
윈도우
맥
1. CLI 방식으로 클린업
이미지를 삭제하려면 먼저 그 이미지를 사용 중인 모든 컨테이너를 중단해야 합니다.
이미지를 사용 중인 모든 컨테이너를 중단하고 이미지를 삭제하겠습니다.
Docker Container 삭제
docker container ls
PS C:\Users\User> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc1234abcde nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8081->80/tcp nginx
abc123456789 nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8081->80/tcp nginx
docker continer ls로 현재 실행 중인 컨테이너들을 확인할 수 있습니다.
docker container rm -f
PS C:\Users\User> docker container rm -f abc1234abcde abc123456789
abc1234abcde
abc123456789
PS C:\Users\User> docker container ls
(삭제된 컨테이너들이 더 이상 존재하지 않음)
확인된 컨테이너들을 docker container rm -f 명령 뒤에 ID들을 순차적으로 지워주면 한번에 지울 수 있습니다.
만약 이렇게 하나하나 ID를 적어주기 귀찮거나 삭제할 컨테이너가 굉장히 많다면
docker container ls -aq
PS C:\Users\User> docker container ls -q
abc123456789
PS C:\Users\User> docker container ls -aq
abc123456789
12345abcdefg
-q 옵션을 붙이면 컨테이너(실행 중인)의 ID만 출력합니다.
-aq 옵션을 붙이면 실행 중이건 실행중이지 않건 모든 컨테이너 ID만 출력합니다.
docker container rm -f $(docker container ls -aq)
PS C:\Users\User> docker container rm -f $(docker container ls -aq)
abc123456789
12345abcdefg
이렇게 컨테이너 수가 매우 많아도 간단하게 모든 컨테이너들을 삭제할 수 있습니다.
만일 Windows라면 $ 사인이 먹히지 않을테고 docker container ls -aq | ForEach-Object { docker container rm -f $_ }를 대신 사용하셔야 할겁니다.
Docker Image 삭제
Docker Container들을 모두 삭제했으므로 Docker 이미지들 역시 삭제할 수 있게 되었습니다.
docker images
PS C:\Users\User> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mdwnd/hangman latest abcdefg12345 23 hours ago 155MB
nginx latest 123456abcdef 28 hours ago 187MB
(기타 이미지)
존재하는 모든 Docker 이미지들을 조회합니다.
docker image rm
PS C:\Users\User> docker image rm abcdefg12345 123456abcdef
Untagged:~
Deleted: ~
Untagged:~
Deleted: ~
똑같이 여러 Image ID들을 공백을 간격으로 입력하면 한번에 지울 수 있습니다.
그런데 이 역시 삭제할 이미지들이 많다면 귀찮을 것입니다.
이미지들은 run 상태가 되지 않으므로 -f를 굳이 붙이지 않아도 상관 없습니다. 단 레퍼런스 문제 등으로 이미지가 삭제되지 않는 경우가 있을 때는 -f를 붙여주셔야 합니다.
또한 ID는 같고 여러 이름을 갖는 Image가 삭제되는 경우를 생각해봅시다. ID는 123이고 이름은 A와 B를 갖는 이미지를 삭제할 때 A가 먼저 삭제되면 그 다음에 B를 삭제하려 할 때 123이라는 Image가 존재하지 않는다며 No such image Error가 발생할 수 있습니다. 이는 어차피 이미지 삭제 순서에 따른 알림에 가까운 에러이므로 신경쓰지 않으셔도 좋습니다.
실제로 docker images로 조회하면 전부 잘 지워졌을 겁니다.
docker images -q
PS C:\Users\User> docker images -q
abcdefg12345
123456abcdef
docker images -q 혹은 docker images ls -q로 이미지들을 조회할 수 있습니다.
docker image rm $(docker image ls -q)
PS C:\Users\User> docker image rm $(docker image ls -q)
Untagged:~
Deleted: ~
Untagged:~
Deleted: ~
만일 WIndows라면 docker image ls -q | ForEach-Object { docker image rm -f $_ }
컨테이너 일괄 삭제와 거의 동일합니다.
2. Desktop 클린업
Clean / Purge data으로 세팅을 해주시면 됩니다.
Reset to factory defaults는 공장 초기화라는 말 그대로 설치한 바로 그 순간으로 돌아가니 이 점은 유의해주세요.
Restart는 모든 것을 유지한 상태로 재시작합니다.
'Docker & K8S' 카테고리의 다른 글
10주차 - 3 [Docker & K8S] (0) | 2023.12.20 |
---|---|
Docker & K8S - 다수의 Container로 구성된 소프트웨어 실행 (0) | 2023.12.20 |
Docker & K8S - Docker Volume Airflow 데모(실습) (0) | 2023.12.20 |
Docker & K8S - Docker Volume nginx 데모(실습) (0) | 2023.12.20 |
Docker & K8S - Docker Volume이란 (0) | 2023.12.20 |