docker stack rm 명령으로 스택 제거하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 Docker Swarm 환경에 배포된 Docker 스택을 효과적으로 제거하기 위해 docker stack rm 명령어를 사용하는 방법을 배우게 됩니다. 먼저 단일 노드 Docker Swarm 을 준비하고, 초기화한 후 상태를 확인하는 것으로 시작합니다.

환경 설정을 완료한 후, Docker Compose 파일을 사용하여 샘플 스택을 배포하여 배포 프로세스를 이해합니다. 이 랩의 핵심은 스택 제거에 초점을 맞춥니다. 먼저 배포된 단일 스택을 제거하는 연습을 하고, 여러 스택을 배포하여 docker stack rm 명령어를 사용하여 여러 스택을 동시에 제거하는 방법을 배웁니다. 이러한 실습 경험을 통해 Docker Swarm 배포를 관리하고 정리하는 기술을 습득할 수 있습니다.

Docker Swarm 환경 준비

이 단계에서는 Docker Swarm 을 초기화하여 Docker 스택을 배포할 환경을 준비합니다. Docker Swarm 은 Docker 를 위한 네이티브 클러스터링 및 오케스트레이션 (orchestration) 솔루션입니다. Docker 노드 (node) 의 스웜 (swarm) 을 생성하고 관리할 수 있습니다.

먼저 Docker 가 실행 중이고 접근 가능한지 확인해 보겠습니다. 간단한 Docker 명령을 실행하여 확인할 수 있습니다.

docker version

Docker 클라이언트 (client) 및 서버 (server) 버전을 보여주는 출력을 볼 수 있습니다. 이는 Docker 가 설치되어 실행 중임을 확인합니다.

다음으로, Docker Swarm 을 초기화해야 합니다. 단일 노드 환경이므로 현재 머신에서 스웜을 초기화합니다.

docker swarm init

이 명령어는 스웜을 초기화하고 현재 노드를 매니저 노드 (manager node) 로 만듭니다. 출력에는 다른 노드를 스웜에 참여시키는 방법에 대한 정보가 제공되지만, 이 랩에서는 단일 노드만 사용합니다.

스웜이 성공적으로 초기화되었는지 확인하려면 스웜 상태를 확인할 수 있습니다.

docker info | grep Swarm

출력에 Swarm: active가 표시되어 이 노드에서 스웜이 활성화되었음을 나타냅니다.

마지막으로, 현재 노드가 스웜의 일부이고 매니저인지 확인해 보겠습니다.

docker node ls

스웜의 노드 목록이 표시되며, 현재 노드가 ReadyLeader 상태로 나열됩니다.

샘플 스택 배포

이 단계에서는 Docker Swarm 에서 샘플 애플리케이션을 스택으로 배포하는 방법을 배웁니다. 스택은 종속성을 공유하고 함께 관리할 수 있는 관련 서비스 그룹입니다. Nginx 웹 서버를 포함하는 간단한 예제를 사용합니다.

스택을 배포하기 전에 스택의 서비스를 정의하는 Docker Compose 파일을 생성해야 합니다. Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Docker Compose 가 미리 설치되어 있지 않더라도 docker stack deploy 명령은 Compose 파일을 읽을 수 있습니다.

먼저 스택 정의를 위한 디렉토리를 생성해 보겠습니다. 홈 디렉토리로 이동하여 my-nginx-stack이라는 새 디렉토리를 생성합니다.

cd ~/project
mkdir my-nginx-stack
cd my-nginx-stack

이제 nano 편집기를 사용하여 my-nginx-stack 디렉토리 내에 docker-compose.yml 파일을 생성합니다.

nano docker-compose.yml

다음 내용을 docker-compose.yml 파일에 붙여넣습니다.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure

docker-compose.yml 파일은 nginx:latest 이미지를 사용하는 web이라는 단일 서비스를 정의합니다. 호스트의 포트 80 을 컨테이너의 포트 80 에 매핑하고 이 서비스의 레플리카 (replica) 가 하나 있어야 함을 지정합니다. restart_policy는 서비스가 실패할 경우 다시 시작되도록 보장합니다.

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

배포하기 전에 nginx:latest 이미지를 풀 (pull) 하여 로컬에서 사용할 수 있는지 확인합니다.

docker pull nginx:latest

이제 docker stack deploy 명령을 사용하여 스택을 배포합니다. 스택의 이름을 nginx_stack으로 지정합니다.

docker stack deploy -c docker-compose.yml nginx_stack

이 명령은 docker-compose.yml 파일을 읽고 그 안에 정의된 서비스를 nginx_stack의 일부로 생성합니다.

스택이 배포되었고 서비스가 실행 중인지 확인하려면 스택의 서비스를 나열할 수 있습니다.

docker stack services nginx_stack

nginx_stack_web 서비스가 1/1 레플리카로 실행 중인 출력을 볼 수 있습니다.

실행 중인 컨테이너를 확인하여 Nginx 컨테이너를 볼 수도 있습니다.

docker ps

nginx:latest 이미지를 실행하는 컨테이너가 nginx_stack_web 서비스와 연결되어 있는 것을 볼 수 있습니다.

마지막으로, 웹 브라우저를 열고 LabEx VM 의 IP 주소로 이동하여 Nginx 웹 서버에 액세스할 수 있습니다. 기본 Nginx 환영 페이지가 표시됩니다.

단일 스택 제거

이 단계에서는 Docker Swarm 에서 배포된 스택을 제거하는 방법을 배웁니다. 스택을 제거하면 해당 스택과 관련된 모든 서비스와 컨테이너가 중지되고 제거됩니다.

이전 단계에서 nginx_stack이라는 스택을 배포했습니다. 이 스택을 제거하려면 docker stack rm 명령을 사용하고 스택 이름을 입력합니다.

docker stack rm nginx_stack

이 명령은 제거 프로세스를 시작합니다. Docker Swarm 은 서비스와 관련된 컨테이너를 중지하고 제거합니다.

스택과 해당 서비스가 제거되고 있음을 나타내는 출력을 볼 수 있습니다.

스택이 제거되었는지 확인하려면 배포된 스택을 다시 나열할 수 있습니다.

docker stack ls

nginx_stack은 더 이상 배포된 스택 목록에 나타나지 않아야 합니다.

실행 중인 서비스를 확인하여 nginx_stack_web 서비스가 더 이상 실행되지 않는지 확인할 수도 있습니다.

docker stack services nginx_stack

이 명령은 오류 또는 출력이 없어야 하며, 이는 스택과 해당 서비스가 사라졌음을 나타냅니다.

마지막으로, 실행 중인 컨테이너를 확인하여 스택과 관련된 Nginx 컨테이너가 제거되었는지 확인할 수 있습니다.

docker ps

nginx_stack_web 서비스에 대한 nginx:latest 이미지를 실행하는 컨테이너는 더 이상 나열되지 않아야 합니다.

여러 샘플 스택 배포

이 단계에서는 Docker Swarm 에 여러 스택을 배포하는 방법을 배웁니다. 이는 동일한 Swarm 내에서 서로 다른 애플리케이션 또는 서비스를 독립적으로 관리하는 방법을 보여줍니다.

Nginx 를 사용하는 스택과 Apache HTTP Server 를 사용하는 스택, 두 개의 간단한 스택을 배포합니다.

먼저 Apache 스택 정의를 위한 디렉토리를 생성해 보겠습니다. ~/project 디렉토리로 돌아가서 my-apache-stack이라는 새 디렉토리를 생성합니다.

cd ~/project
mkdir my-apache-stack
cd my-apache-stack

이제 nano 편집기를 사용하여 my-apache-stack 디렉토리 내에 docker-compose.yml 파일을 생성합니다.

nano docker-compose.yml

다음 내용을 docker-compose.yml 파일에 붙여넣습니다.

version: "3.8"
services:
  web:
    image: httpd:latest
    ports:
      - "81:80"
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure

docker-compose.yml 파일은 httpd:latest 이미지를 사용하는 web이라는 서비스를 정의합니다. 나중에 배포할 Nginx 스택과의 포트 충돌을 방지하기 위해 호스트의 포트 81 을 컨테이너의 포트 80 에 매핑합니다. 또한 하나의 레플리카와 재시작 정책을 지정합니다.

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

배포하기 전에 httpd:latest 이미지를 풀 (pull) 합니다.

docker pull httpd:latest

이제 docker stack deploy 명령을 사용하여 Apache 스택을 배포합니다. 이 스택의 이름을 apache_stack으로 지정합니다.

docker stack deploy -c docker-compose.yml apache_stack

이 명령은 Apache 스택을 배포합니다.

다음으로, Nginx 스택을 다시 배포하기 위해 my-nginx-stack 디렉토리로 돌아갑니다.

cd ~/project/my-nginx-stack

docker stack deploy 명령을 사용하여 Nginx 스택을 배포합니다. 이 스택의 이름을 nginx_stack으로 지정합니다.

docker stack deploy -c docker-compose.yml nginx_stack

이제 두 스택이 모두 배포되었는지 확인해 보겠습니다. 배포된 스택을 나열합니다.

docker stack ls

apache_stacknginx_stack이 모두 나열되어야 합니다.

각 스택의 서비스를 개별적으로 확인할 수도 있습니다.

docker stack services apache_stack
docker stack services nginx_stack

apache_stack_web 서비스와 nginx_stack_web 서비스가 모두 1/1 레플리카로 실행 중인 것을 볼 수 있습니다.

웹 브라우저를 열고 LabEx VM 의 IP 주소와 포트 81 로 이동하여 Apache 웹 서버에 액세스할 수 있습니다. 기본 Apache 환영 페이지가 표시되어야 합니다. Nginx 웹 서버는 여전히 포트 80 에서 액세스할 수 있어야 합니다.

여러 스택 제거

이 마지막 단계에서는 Docker Swarm 에서 배포된 여러 스택을 제거하는 방법을 배웁니다. 이는 단일 스택을 제거하는 것과 유사하지만, 제거하려는 각 스택에 대해 이 프로세스를 반복합니다.

이전 단계에서 apache_stacknginx_stack의 두 스택을 배포했습니다. 이제 두 스택을 모두 제거합니다.

먼저 apache_stack을 제거해 보겠습니다. docker stack rm 명령을 사용하고 스택 이름을 입력합니다.

docker stack rm apache_stack

apache_stack과 해당 서비스가 제거되고 있음을 나타내는 출력을 볼 수 있습니다.

다음으로, nginx_stack을 제거해 보겠습니다. docker stack rm 명령을 사용하고 스택 이름을 입력합니다.

docker stack rm nginx_stack

nginx_stack과 해당 서비스가 제거되고 있음을 나타내는 출력을 볼 수 있습니다.

두 스택이 모두 제거되었는지 확인하려면 배포된 스택을 다시 나열합니다.

docker stack ls

apache_stacknginx_stack은 배포된 스택 목록에 나타나지 않아야 합니다.

실행 중인 컨테이너를 확인하여 두 스택과 관련된 컨테이너가 모두 제거되었는지 확인할 수도 있습니다.

docker ps

이 스택의 일부였던 httpd:latest 또는 nginx:latest 이미지를 실행하는 컨테이너가 없어야 합니다.

이것으로 Docker 스택 배포 및 제거에 대한 랩 (lab) 이 마무리되었습니다. Docker Swarm 을 성공적으로 초기화하고, 단일 및 여러 스택을 배포하고 제거했습니다.

요약

이 랩에서는 단일 노드 Swarm 을 초기화하고 상태를 확인하여 Docker Swarm 환경을 준비하는 방법을 배웠습니다. 그런 다음 Docker Compose 파일을 사용하여 샘플 애플리케이션을 스택으로 배포하는 연습을 했습니다. 마지막으로, docker stack rm 명령을 사용하여 Docker Swarm 에서 단일 및 여러 배포된 스택을 모두 제거하는 방법을 익혀 배포 후 리소스를 정리하는 프로세스를 시연했습니다.