docker compose rm 명령어를 사용하여 중지된 컨테이너 제거 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker compose rm 명령을 사용하여 중지된 컨테이너를 제거하는 방법을 배우게 됩니다. 먼저 Docker Compose 프로젝트를 간단하게 준비하는 것으로 시작합니다. 여기에는 Docker Compose 를 설치하고 기본 웹 서비스를 정의하는 docker-compose.yml 파일을 생성하는 작업이 포함됩니다.

프로젝트 설정을 완료한 후에는 서비스 컨테이너를 중지하는 연습을 할 것입니다. 이 랩의 핵심은 docker compose rm을 사용하여 이러한 중지된 컨테이너를 제거하는 데 초점을 맞추며, 볼륨이 없는 시나리오, 익명 볼륨이 있는 시나리오, 마지막으로 컨테이너를 강제로 제거하는 방법을 보여줍니다.

간단한 Docker Compose 프로젝트 준비

이 단계에서는 간단한 Docker Compose 프로젝트를 준비합니다. LabEx 환경에는 Docker Compose 가 미리 설치되어 있지 않으므로, 먼저 설치해야 합니다. Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Compose 를 사용하면 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음, 단일 명령으로 구성에서 모든 서비스를 생성하고 시작합니다.

먼저 Docker Compose 를 설치해 보겠습니다. 최신 안정 릴리스를 다운로드하여 실행 가능하게 만듭니다.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

설치 후에는 버전을 확인하여 설치를 확인합니다.

docker-compose --version

출력에 버전 번호가 표시되어 Docker Compose 가 올바르게 설치되었는지 확인합니다.

이제 간단한 Docker Compose 프로젝트를 만들어 보겠습니다. 프로젝트 디렉토리를 만들고 그 안에 docker-compose.yml 파일을 생성합니다. 이 파일은 nginx 이미지를 사용하여 간단한 웹 서비스를 정의합니다.

프로젝트 디렉토리로 이동합니다.

cd ~/project

프로젝트를 위한 새 디렉토리를 만듭니다 (예: my-web-app).

mkdir my-web-app
cd my-web-app

이제 nano 편집기를 사용하여 docker-compose.yml 파일을 만듭니다.

nano docker-compose.yml

docker-compose.yml 파일에 다음 내용을 추가합니다.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

docker-compose.yml 파일은 web이라는 하나의 서비스를 정의합니다. 이 서비스는 nginx:latest Docker 이미지를 사용하고 호스트의 포트 80 을 컨테이너의 포트 80 에 매핑합니다.

Ctrl + X, Y, Enter를 눌러 파일을 저장합니다.

이제 docker-compose up 명령을 사용하여 docker-compose.yml 파일에 정의된 서비스를 시작할 수 있습니다. -d 플래그는 컨테이너를 분리된 모드 (detached mode) 로 실행합니다. 즉, 백그라운드에서 실행됩니다.

docker-compose up -d

이 명령은 nginx:latest 이미지를 가져오고 (아직 없는 경우) web 서비스에 대한 컨테이너를 시작합니다.

docker ps 명령을 사용하여 실행 중인 컨테이너의 상태를 확인할 수 있습니다.

docker ps

my-web-app_web_1 (또는 디렉토리 이름에 따라 유사한 이름) 이라는 컨테이너가 실행 중이며 포트 80 을 전달하는 것을 볼 수 있습니다.

웹 서버가 실행 중인지 확인하려면 curl을 사용하여 액세스할 수 있습니다.

curl http://localhost

출력에 기본 Nginx 환영 페이지 HTML 이 표시되어야 합니다. 이를 통해 간단한 Docker Compose 프로젝트가 설정되고 올바르게 실행되고 있는지 확인할 수 있습니다.

서비스 컨테이너 중지

이전 단계에서 docker-compose up -d를 사용하여 간단한 웹 서비스를 시작했습니다. 이제 컨테이너가 백그라운드에서 실행 중입니다. 이 단계에서는 Docker Compose 를 사용하여 실행 중인 서비스 컨테이너를 중지하는 방법을 배웁니다.

docker-compose.yml 파일에 정의된 실행 중인 컨테이너를 중지하려면 docker-compose stop 명령을 사용합니다. 이 명령은 컨테이너에 SIGTERM 신호를 보내어 컨테이너가 정상적으로 종료될 수 있도록 합니다.

docker-compose.yml 파일이 있는 ~/project/my-web-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-web-app

이제 docker-compose stop 명령을 실행합니다.

docker-compose stop

컨테이너가 중지되고 있음을 나타내는 출력을 볼 수 있습니다.

stop 명령을 실행한 후 컨테이너는 중지되지만 제거되지는 않습니다. docker ps -a 명령을 사용하여 중지된 컨테이너를 포함한 모든 컨테이너를 나열하여 이를 확인할 수 있습니다.

docker ps -a

my-web-app_web_1 컨테이너가 Exited 상태로 나열되는 것을 볼 수 있습니다. 이는 컨테이너가 성공적으로 중지되었음을 확인합니다.

curl을 사용하여 웹 서버에 다시 액세스하려고 하면 컨테이너가 중지되었기 때문에 실패해야 합니다.

curl http://localhost

연결 거부 오류가 표시되어 웹 서비스가 더 이상 실행되지 않음을 나타냅니다.

컨테이너 중지는 구성이나 데이터를 제거하지 않고 서비스를 일시적으로 중지해야 할 때 유용합니다. 다음 단계에서는 이러한 중지된 컨테이너를 제거하는 방법을 살펴봅니다.

볼륨 없이 중지된 서비스 컨테이너 제거

이전 단계에서 docker-compose stop을 사용하여 실행 중인 컨테이너를 중지했습니다. 이제 컨테이너는 Exited 상태입니다. 이 단계에서는 Docker Compose 를 사용하여 이러한 중지된 컨테이너를 제거하는 방법을 배웁니다.

docker-compose.yml 파일에 정의된 중지된 컨테이너를 제거하려면 docker-compose rm 명령을 사용합니다. 기본적으로 이 명령은 중지된 서비스 컨테이너만 제거합니다. 볼륨이나 네트워크는 제거하지 않습니다.

docker-compose.yml 파일이 있는 ~/project/my-web-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-web-app

이제 docker-compose rm 명령을 실행합니다. 제거를 확인하라는 메시지가 표시됩니다. y를 입력하고 Enter 키를 누릅니다.

docker-compose rm

컨테이너가 제거되고 있음을 나타내는 출력을 볼 수 있습니다.

rm 명령을 실행한 후 컨테이너가 제거되어야 합니다. docker ps -a 명령을 사용하여 중지된 컨테이너를 포함한 모든 컨테이너를 나열하여 이를 확인할 수 있습니다.

docker ps -a

더 이상 목록에 my-web-app_web_1 컨테이너가 표시되지 않아야 합니다. 이는 컨테이너가 성공적으로 제거되었음을 확인합니다.

중지된 컨테이너를 제거하면 시스템을 정리하고 리소스를 확보하는 데 도움이 됩니다. 다음 단계에서는 컨테이너를 제거할 때 볼륨을 처리하는 방법을 살펴봅니다.

익명 볼륨을 가진 중지된 서비스 컨테이너 제거

이전 단계에서 중지된 컨테이너를 제거했습니다. 이제 관련 익명 볼륨과 함께 컨테이너를 제거하는 방법을 살펴보겠습니다. 익명 볼륨은 docker-compose.yml 파일에 명시적으로 이름이 지정되지 않은 볼륨입니다. Docker 는 자동으로 임의의 이름을 할당합니다.

먼저, 익명 볼륨을 포함하도록 docker-compose.yml 파일을 수정해 보겠습니다. web 서비스에 볼륨을 추가합니다.

~/project/my-web-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-web-app

docker-compose.yml 파일을 편집합니다.

nano docker-compose.yml

web 서비스 정의에 volumes 섹션을 추가합니다. 컨테이너 내부의 /usr/share/nginx/html에 익명 볼륨을 마운트합니다. 이곳은 Nginx 가 기본 콘텐츠를 제공하는 곳입니다.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /usr/share/nginx/html

Ctrl + X, Y, Enter를 눌러 파일을 저장합니다.

이제 서비스를 다시 시작해 보겠습니다. 이렇게 하면 새 컨테이너와 익명 볼륨이 생성됩니다.

docker-compose up -d

docker volume ls 명령을 사용하여 Docker 에서 생성된 볼륨을 나열할 수 있습니다. 프로젝트와 관련된 길고 무작위로 생성된 이름의 볼륨이 표시되어야 합니다.

docker volume ls

이제 서비스 컨테이너를 다시 중지합니다.

docker-compose stop

docker ps -a를 사용하여 컨테이너가 중지되었는지 확인합니다.

docker ps -a

my-web-app_web_1 컨테이너가 Exited 상태로 표시되어야 합니다.

중지된 컨테이너 관련 익명 볼륨을 제거하려면 -v 플래그와 함께 docker-compose rm 명령을 사용합니다.

docker-compose rm -v

제거를 확인하라는 메시지가 표시됩니다. y를 입력하고 Enter 키를 누릅니다.

명령을 실행한 후 docker ps -a를 사용하여 컨테이너가 제거되었는지 확인합니다.

docker ps -a

my-web-app_web_1 컨테이너가 더 이상 나열되지 않아야 합니다.

이제 docker volume ls를 사용하여 볼륨을 다시 확인합니다.

docker volume ls

web 서비스에 대해 생성된 익명 볼륨도 제거되어야 합니다. 이는 -v 플래그가 컨테이너와 함께 익명 볼륨을 제거하는 방법을 보여줍니다.

강제적으로 중지된 서비스 컨테이너 제거

이전 단계에서 컨테이너를 중지하고 제거했습니다. 때로는 컨테이너가 여전히 실행 중인 경우에도 컨테이너를 제거해야 할 수 있습니다. 이 경우 강제 제거 옵션이 유용합니다.

먼저, 서비스를 다시 시작해 보겠습니다.

~/project/my-web-app 디렉토리에 있는지 확인합니다.

cd ~/project/my-web-app

분리 모드에서 서비스를 시작합니다.

docker-compose up -d

docker ps를 사용하여 컨테이너가 실행 중인지 확인합니다.

docker ps

my-web-app_web_1 컨테이너가 Up 상태로 나열되어야 합니다.

이제 먼저 중지하지 않고 실행 중인 컨테이너를 제거해 보겠습니다. 실행 중인 컨테이너에서 docker-compose rm을 사용하려고 하면 실패합니다.

docker-compose rm

컨테이너가 실행 중이므로 제거할 수 없다는 오류 메시지가 표시됩니다.

실행 중인 컨테이너를 강제로 제거하려면 -f 플래그와 함께 docker-compose rm 명령을 사용합니다. 이 플래그는 확인을 요구하지 않고, 컨테이너를 정상적으로 중지하지 않고 강제로 제거합니다.

docker-compose rm -f

컨테이너가 제거되고 있음을 나타내는 출력을 볼 수 있습니다. 이번에는 확인을 요청받지 않았다는 점에 유의하십시오.

명령을 실행한 후 docker ps -a를 사용하여 컨테이너가 제거되었는지 확인합니다.

docker ps -a

my-web-app_web_1 컨테이너가 더 이상 나열되지 않아야 합니다. 이는 컨테이너가 실행 중이었음에도 불구하고 강제로 제거되었음을 확인합니다.

강제 제거 옵션은 컨테이너가 명시적으로 관리되지 않는 볼륨에 데이터를 쓰고 있는 경우 데이터 손실을 초래할 수 있으므로 주의해서 사용해야 합니다.

이것으로 Docker Compose 서비스 컨테이너 제거에 대한 탐구를 마칩니다. 컨테이너를 중지하는 방법, 볼륨 없이 중지된 컨테이너를 제거하는 방법, 익명 볼륨이 있는 중지된 컨테이너를 제거하는 방법, 실행 중인 컨테이너를 강제로 제거하는 방법을 배웠습니다.

요약

이 랩에서는 docker compose rm 명령을 사용하여 중지된 컨테이너를 제거하는 방법을 배웠습니다. 먼저 Docker Compose 를 설치하고 Nginx 이미지를 사용하여 기본 웹 서비스를 정의하는 docker-compose.yml 파일을 생성하는 등 간단한 Docker Compose 프로젝트를 준비하는 것으로 시작했습니다.

그런 다음 서비스 컨테이너를 중지하고 docker compose rm을 사용하여 제거하는 연습을 했습니다. 볼륨 없이 중지된 컨테이너 제거, 익명 볼륨이 있는 중지된 컨테이너 제거, 컨테이너를 제거하기 위한 강제 옵션 사용 등 다양한 시나리오를 탐구했습니다. 이 실습 경험은 Docker Compose 프로젝트 내에서 컨테이너의 수명 주기를 관리하기 위한 docker compose rm 명령의 실제 적용을 보여주었습니다.