소개
이 랩에서는 docker compose kill 명령어를 사용하여 Docker Compose 파일에 정의된 서비스를 강제로 중지하는 방법을 배우게 됩니다. 먼저 여러 서비스가 포함된 간단한 Compose 파일을 준비하고 docker compose up 명령어를 사용하여 시작합니다.
이후, docker compose kill 명령어를 사용하는 다양한 방법을 살펴볼 것입니다: 모든 서비스를 강제로 중지하는 방법, 특정 서비스를 강제로 중지하는 방법, 그리고 다른 신호를 사용하여 서비스를 강제로 중지하는 방법입니다. 이 실습을 통해 kill 명령어를 사용하여 Docker Compose 서비스를 관리하는 실질적인 지식을 얻을 수 있습니다.
여러 서비스를 포함하는 간단한 Compose 파일 준비
이 단계에서는 여러 서비스를 정의하는 간단한 Docker Compose 파일을 준비합니다. Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행할 수 있는 도구입니다. Docker 는 이 VM 에 사전 설치되어 있지만, Docker Compose 는 그렇지 않습니다. 먼저 설치하겠습니다.
먼저 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 가 올바르게 설치되었음을 확인하는 버전 정보가 콘솔에 출력되어야 합니다.
다음으로, 프로젝트 디렉토리를 만들고 해당 디렉토리로 이동합니다.
mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
이제 이 디렉토리에 docker-compose.yml 파일을 생성합니다. 이 파일은 서비스를 정의합니다. nano 편집기를 사용하여 파일을 생성하고 편집합니다.
nano docker-compose.yml
nano 편집기 내에서 다음 내용을 붙여넣습니다. 이 파일은 web 및 redis의 두 가지 서비스를 정의합니다. web 서비스는 nginx 이미지를 사용하고 컨테이너의 포트 80 을 호스트의 포트 8080 에 매핑합니다. redis 서비스는 redis 이미지를 사용합니다.
version: "3.8"
services:
web:
image: nginx
ports:
- "8080:80"
redis:
image: redis
내용을 붙여넣은 후 Ctrl + X, Y, 마지막으로 Enter를 눌러 파일을 저장합니다.
서비스를 시작하기 전에 docker-compose.yml 파일에 정의된 이미지를 가져와야 합니다. docker pull 명령어를 사용하여 이 작업을 수행할 수 있습니다.
docker pull nginx
docker pull redis
이 명령어는 Docker Hub 에서 nginx 및 redis 이미지를 다운로드합니다.
docker compose up 명령어를 사용하여 서비스 시작
이 단계에서는 docker compose up 명령어를 사용하여 docker-compose.yml 파일에 정의된 서비스를 시작합니다. 이 명령어는 서비스에 대한 컨테이너를 빌드, (재) 생성, 시작 및 연결합니다.
docker-compose.yml 파일을 생성한 ~/project/my-compose-app 디렉토리에 있는지 확인하십시오.
cd ~/project/my-compose-app
이제 다음 명령을 실행하여 서비스를 시작합니다. -d 플래그는 컨테이너를 분리 모드 (detached mode) 로 실행합니다. 즉, 컨테이너가 백그라운드에서 실행되며 터미널을 점유하지 않습니다.
docker-compose up -d
네트워크, 볼륨 (있는 경우) 및 컨테이너가 생성되고 시작되고 있음을 나타내는 출력을 볼 수 있습니다.
컨테이너가 실행 중인지 확인하려면 docker ps 명령어를 사용할 수 있습니다.
docker ps
이 명령어는 실행 중인 모든 컨테이너를 나열합니다. web (nginx) 및 redis 컨테이너 모두에 대한 항목을 볼 수 있습니다.
docker-compose logs 명령어를 사용하여 서비스의 로그를 확인할 수도 있습니다.
docker-compose logs
이렇게 하면 모든 서비스에 대한 로그가 표시됩니다. 서비스 이름을 추가하여 특정 서비스의 로그를 볼 수도 있습니다. 예를 들어, docker-compose logs web입니다.
마지막으로, nginx 컨테이너의 포트 80 을 호스트의 포트 8080 에 매핑했으므로, curl을 사용하여 포트 8080 에서 localhost에 액세스하여 기본 Nginx 환영 페이지에 액세스할 수 있습니다.
curl localhost:8080
출력에서 Nginx 환영 페이지의 HTML 콘텐츠를 볼 수 있습니다.
docker compose kill 명령어를 사용하여 모든 서비스 강제 중지
이 단계에서는 docker compose kill 명령어를 사용하여 docker-compose.yml 파일에 정의된 실행 중인 모든 서비스를 강제로 중지하는 방법을 배웁니다. 컨테이너를 정상적으로 중지하고 리소스를 제거하는 docker compose down과 달리, docker compose kill은 지정된 신호를 컨테이너에 보내 즉시 중지하도록 강제합니다.
~/project/my-compose-app 디렉토리에 있는지 확인하십시오.
cd ~/project/my-compose-app
모든 서비스를 강제로 중지하려면 서비스 이름을 지정하지 않고 docker compose kill 명령어를 실행하기만 하면 됩니다. 기본적으로 이 명령어는 컨테이너에 SIGKILL 신호를 보냅니다.
docker-compose kill
컨테이너가 중지되고 있음을 나타내는 출력을 볼 수 있습니다.
컨테이너가 중지되었는지 확인하려면 다시 docker ps 명령어를 사용할 수 있습니다.
docker ps
이번에는 web (nginx) 및 redis 컨테이너가 중지되었으므로 나열되지 않아야 합니다.
중지된 컨테이너를 포함한 모든 컨테이너를 보려면 docker ps -a를 사용할 수도 있습니다. "Exited" 상태의 my-compose-app-web-1 및 my-compose-app-redis-1 컨테이너를 볼 수 있습니다.
docker ps -a
docker compose kill 명령어를 사용하여 특정 서비스 강제 중지
이 단계에서는 docker compose kill 명령어를 사용하고 서비스 이름을 뒤에 붙여 docker-compose.yml 파일에 정의된 특정 서비스를 강제로 중지하는 방법을 배웁니다.
먼저, 중지할 컨테이너가 있도록 서비스를 다시 시작해 보겠습니다. ~/project/my-compose-app 디렉토리에 있는지 확인하십시오.
cd ~/project/my-compose-app
docker-compose up -d
docker ps를 사용하여 두 컨테이너가 실행 중인지 확인합니다.
docker ps
이제 web 서비스만 강제로 중지해 보겠습니다. docker compose kill 명령어 뒤에 서비스 이름 web을 추가하여 이 작업을 수행합니다.
docker-compose kill web
web 컨테이너가 중지되고 있음을 나타내는 출력을 볼 수 있습니다.
web 컨테이너만 중지되었는지 확인하려면 다시 docker ps 명령어를 사용합니다.
docker ps
이제 실행 중인 컨테이너 목록에 redis 컨테이너만 표시되어야 합니다. web 컨테이너는 실행 중인 컨테이너 목록에 없어야 합니다.
중지된 컨테이너를 포함한 모든 컨테이너를 보려면 docker ps -a를 사용할 수도 있습니다. my-compose-app-web-1 컨테이너는 "Exited" 상태여야 하고, my-compose-app-redis-1 컨테이너는 여전히 "Up" 상태여야 합니다.
docker ps -a
docker compose kill -s 옵션을 사용하여 다른 신호로 서비스 강제 중지
이 단계에서는 -s 플래그와 함께 docker compose kill 명령어를 사용하여 컨테이너에 특정 신호를 보내는 방법을 살펴봅니다. 기본적으로 docker compose kill은 프로세스를 즉시 종료하는 SIGKILL 신호를 보냅니다. 그러나 프로세스를 정상적으로 종료하도록 요청하는 SIGTERM과 같은 다른 신호를 보낼 수도 있습니다.
먼저, 서비스가 실행 중인지 확인해 보겠습니다. 프로젝트 디렉토리로 이동하여 분리된 모드로 서비스를 시작합니다.
cd ~/project/my-compose-app
docker-compose up -d
docker ps를 사용하여 두 컨테이너가 실행 중인지 확인합니다.
docker ps
이제 SIGTERM 신호를 사용하여 모든 서비스를 강제로 중지해 보겠습니다. 신호 이름 뒤에 -s 플래그를 사용합니다.
docker-compose kill -s SIGTERM
지정된 신호로 컨테이너가 중지되고 있음을 나타내는 출력을 볼 수 있습니다.
컨테이너가 중지되었는지 확인하려면 docker ps 명령어를 사용합니다.
docker ps
web 컨테이너와 redis 컨테이너 모두 실행 중으로 나열되지 않아야 합니다.
docker ps -a를 사용하면 컨테이너가 종료되었음을 확인할 수 있습니다.
docker ps -a
다른 신호를 보낼 수 있는 기능은 더 제어된 종료에 유용하며, 컨테이너 내의 애플리케이션이 해당 신호를 처리하도록 구성된 경우 종료 전에 정리 작업을 수행할 수 있도록 합니다.
마지막으로, 중지된 컨테이너와 Docker Compose 에서 생성한 네트워크를 정리하려면 docker compose down 명령어를 사용할 수 있습니다.
docker-compose down
이 명령어는 docker-compose.yml 파일에 정의된 컨테이너, 네트워크 및 볼륨을 중지하고 제거합니다.
요약
이 Lab 에서는 여러 서비스 (web 및 redis) 를 정의하는 간단한 Docker Compose 파일을 준비하고 Docker Compose 를 설치하는 방법을 배웠습니다. 그런 다음 docker compose up 명령어를 사용하여 이러한 서비스를 시작했습니다. 그 후, docker compose kill을 사용하여 Compose 파일에 정의된 모든 실행 중인 서비스를 강제로 중지하는 방법과 docker compose kill <service_name>을 사용하여 강제 종료할 특정 서비스를 타겟팅하는 방법을 살펴보았습니다. 마지막으로, docker compose kill -s SIGKILL과 같이 -s 플래그를 사용하여 kill 프로세스 중에 서비스에 다른 신호를 보내는 방법을 배웠습니다.



