docker compose restart 명령으로 서비스 관리하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker compose restart 명령어를 사용하여 Docker 서비스의 라이프사이클을 효과적으로 관리하는 방법을 배우게 됩니다. 먼저 Docker Compose 를 사용하여 웹 서비스와 데이터베이스 서비스로 구성된 간단한 다중 서비스 애플리케이션을 설정하는 것으로 시작합니다.

설정 후에는 docker compose restart 명령어를 활용하는 다양한 방법을 탐구할 것입니다. 여기에는 애플리케이션 내의 모든 서비스 재시작, 특정 서비스 대상 및 재시작, 종속성에 영향을 주지 않고 서비스 재시작, 마지막으로 정의된 시간 초과 기간으로 서비스 재시작이 포함됩니다. 이러한 실습을 통해 Docker 화된 애플리케이션을 제어하고 유지 관리하는 실질적인 경험을 얻게 될 것입니다.

간단한 다중 서비스 애플리케이션 준비

이 단계에서는 이 랩 전체에서 Docker 서비스를 재시작하는 연습을 위해 사용할 간단한 다중 서비스 애플리케이션을 준비합니다. 이 애플리케이션은 웹 서비스와 데이터베이스 서비스의 두 가지 서비스로 구성됩니다. Docker Compose 파일을 사용하여 이러한 서비스를 정의합니다.

먼저 Docker Compose 를 설치해야 합니다. LabEx VM 환경에 미리 설치되어 있지 않으므로 다운로드하여 설치합니다.

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

첫 번째 명령은 공식 GitHub 저장소에서 Docker Compose 바이너리를 다운로드하여 /usr/local/bin/docker-compose에 저장합니다. $(uname -s)$(uname -m) 부분은 운영 체제와 아키텍처를 자동으로 감지하여 올바른 바이너리를 다운로드합니다. 두 번째 명령은 다운로드한 파일을 실행 가능하게 만듭니다.

이제 Docker Compose 버전을 확인하여 설치를 확인해 보겠습니다.

docker-compose --version

Docker Compose version v2.20.2와 유사한 출력을 볼 수 있습니다.

다음으로, 이 랩의 작업 디렉토리인 ~/project 디렉토리로 이동합니다.

cd ~/project

이제 다중 서비스 애플리케이션을 정의하기 위해 docker-compose.yml 파일을 생성합니다. 이 파일은 서비스, 해당 이미지 및 필요한 구성을 지정합니다.

nano docker-compose.yml

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

version: "3.8"

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: mysecretpassword

docker-compose.yml 파일에서:

  • version: '3.8'은 Docker Compose 파일 형식 버전을 지정합니다.
  • services:는 애플리케이션의 서로 다른 서비스를 정의합니다.
  • web 서비스는 nginx:latest 이미지를 사용하고, 호스트의 포트 80 을 컨테이너의 포트 80 에 매핑하며, db 서비스에 종속됩니다. 즉, db 서비스가 web 서비스보다 먼저 시작됩니다.
  • db 서비스는 postgres:latest 이미지를 사용하고 POSTGRES_PASSWORD 환경 변수를 설정합니다. 이는 PostgreSQL 이미지에 필요합니다.

파일을 저장하고 nano 편집기를 종료합니다 ( Ctrl + X, 다음 Y, 다음 Enter를 누릅니다).

서비스를 시작하기 전에 필요한 Docker 이미지를 가져와야 합니다.

docker pull nginx:latest
docker pull postgres:latest

이 명령은 Docker Hub 에서 nginx:latestpostgres:latest 이미지를 다운로드합니다.

마지막으로, docker-compose.yml 파일에 정의된 서비스를 시작해 보겠습니다.

docker-compose up -d

docker-compose up -d 명령은 백그라운드 (분리 모드) 에서 서비스를 빌드, 생성 및 시작합니다.

다음 명령을 사용하여 실행 중인 서비스의 상태를 확인할 수 있습니다.

docker-compose ps

webdb 서비스가 모두 실행 중임을 나타내는 출력을 볼 수 있습니다.

모든 서비스 재시작

이 단계에서는 docker-compose.yml 파일에 정의된 모든 서비스를 재시작하는 방법을 배웁니다. 서비스를 재시작하는 것은 애플리케이션 코드, 구성 또는 Docker Compose 파일 자체를 변경할 때 일반적인 작업입니다.

모든 서비스를 재시작하려면 docker-compose restart 명령어를 사용합니다. 이 명령어는 docker-compose.yml 파일에 정의된 모든 실행 중인 컨테이너를 중지한 다음 다시 시작합니다.

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

cd ~/project

이제 다음 명령을 실행하여 모든 서비스를 재시작합니다.

docker-compose restart

서비스가 중지된 다음 시작되고 있음을 나타내는 출력을 볼 수 있습니다.

명령이 완료된 후 docker-compose ps 명령을 사용하여 서비스가 재시작되어 다시 실행 중인지 확인할 수 있습니다.

docker-compose ps

출력은 webdb 서비스가 모두 Up 상태에 있음을 보여야 하며, 이는 성공적으로 재시작되었음을 나타냅니다.

모든 서비스를 재시작하는 것은 애플리케이션의 여러 부분에 영향을 미치는 변경 사항을 적용해야 하거나 전체 애플리케이션 스택을 깨끗하게 재시작하려는 경우에 유용합니다.

특정 서비스 재시작

이 단계에서는 다중 서비스 애플리케이션 내에서 특정 서비스만 재시작하는 방법을 배웁니다. 이는 단일 서비스에 변경 사항을 적용했고 전체 애플리케이션 스택을 재시작할 필요가 없을 때 유용합니다.

특정 서비스를 재시작하려면 docker-compose restart 명령어를 사용하고 재시작하려는 서비스의 이름을 입력합니다. 서비스 이름은 docker-compose.yml 파일에 정의되어 있습니다 (이 경우 webdb).

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

cd ~/project

web 서비스를 재시작해 보겠습니다.

docker-compose restart web

web 서비스가 중지된 다음 시작되고 있음을 나타내는 출력을 볼 수 있습니다. db 서비스는 계속 실행됩니다.

명령이 완료된 후 docker-compose ps를 사용하여 서비스의 상태를 확인합니다.

docker-compose ps

출력은 webdb 서비스가 모두 여전히 Up 상태에 있음을 보여야 합니다. 그러나 web 서비스는 중지되었다가 다시 시작되었을 것입니다.

이제 db 서비스를 재시작해 보겠습니다.

docker-compose restart db

db 서비스가 중지된 다음 시작되고 있음을 나타내는 출력을 볼 수 있습니다. web 서비스가 db 서비스에 종속되어 있기 때문에 Docker Compose 는 db 재시작 중에 종속성이 충족되도록 web 서비스도 잠시 중지하고 다시 시작할 수 있습니다.

다시 서비스 상태를 확인합니다.

docker-compose ps

두 서비스 모두 Up 상태여야 합니다. 개별 서비스를 재시작하면 애플리케이션의 수명 주기를 보다 세밀하게 제어할 수 있습니다.

종속성 없이 서비스 재시작

이전 단계에서 db 서비스를 재시작하면 docker-compose.yml에 정의된 depends_on 관계 때문에 web 서비스도 잠시 재시작되는 것을 확인했습니다. 경우에 따라 종속성에 영향을 주지 않고 서비스를 재시작해야 할 수 있습니다.

종속성을 재시작하지 않고 서비스를 재시작하려면 --no-deps 플래그와 함께 docker-compose restart 명령어를 사용할 수 있습니다.

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

cd ~/project

이번에는 --no-deps 플래그를 사용하여 db 서비스를 다시 재시작해 보겠습니다.

docker-compose restart --no-deps db

출력을 관찰합니다. db 서비스만 중지되고 시작되는 것을 볼 수 있습니다. db에 종속된 web 서비스는 영향을 받지 않습니다.

docker-compose ps를 사용하여 서비스 상태를 확인합니다.

docker-compose ps

두 서비스 모두 여전히 Up 상태여야 합니다. 이는 격리된 상태에서 서비스를 재시작하는 방법을 보여줍니다. 이는 디버깅하거나 다른 서비스에 영향을 주지 않고 단일 서비스에 변경 사항을 적용하는 데 유용할 수 있습니다.

특정 타임아웃으로 서비스 재시작

이 마지막 단계에서는 재시작 작업에 대한 타임아웃을 지정하는 방법을 배웁니다. 서비스를 재시작하면 Docker Compose 는 컨테이너에 중지 신호를 보내고 컨테이너가 정상적으로 종료될 때까지 기다립니다. 컨테이너가 특정 시간 내에 중지되지 않으면 Docker 는 강제로 종료합니다. --timeout 플래그를 사용하여 이 대기 시간을 제어할 수 있습니다.

컨테이너 중지에 대한 기본 타임아웃은 10 초입니다. 3 초의 더 짧은 타임아웃으로 web 서비스를 재시작해 보겠습니다.

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

cd ~/project

이제 3 초 타임아웃으로 web 서비스를 재시작하려면 다음 명령을 실행합니다.

docker-compose restart --timeout 3 web

web 서비스가 중지된 다음 시작되고 있음을 나타내는 출력을 볼 수 있습니다. Docker Compose 는 강제 종료하기 전에 컨테이너가 정상적으로 중지될 때까지 최대 3 초 동안 기다립니다.

명령이 완료된 후 docker-compose ps를 사용하여 서비스 상태를 확인합니다.

docker-compose ps

두 서비스 모두 여전히 Up 상태여야 합니다.

--timeout 플래그를 사용하면 재시작 중에 Docker Compose 가 서비스가 중지될 때까지 대기하는 시간을 제어할 수 있습니다. 이는 깔끔하게 종료하는 데 더 많은 시간이 필요하거나 덜 필요한 서비스에 유용할 수 있습니다.

마지막으로, 실행 중인 서비스를 중지하고 제거하여 정리해 보겠습니다.

docker-compose down

docker-compose down 명령은 docker-compose up으로 생성된 컨테이너, 네트워크 및 볼륨을 중지하고 제거합니다.

요약

이 랩에서는 Docker Compose 를 사용하여 간단한 다중 서비스 애플리케이션을 준비하는 방법을 배웠습니다. 여기에는 Docker Compose 설치, 설치 확인, 그리고 웹 서비스 (nginx) 와 데이터베이스 서비스 (postgres) 의 두 가지 서비스를 정의하는 docker-compose.yml 파일 생성 (웹 서비스가 데이터베이스 서비스에 종속됨) 이 포함되었습니다.

그런 다음 docker compose restart 명령을 사용하여 이러한 서비스를 관리하는 다양한 방법을 살펴보았습니다. docker-compose.yml 파일에 정의된 모든 서비스를 재시작하는 방법, 특정 서비스를 재시작하는 방법, 종속성을 재시작하지 않고 서비스를 재시작하는 방법, 그리고 지정된 타임아웃 기간으로 서비스를 재시작하는 방법을 배웠습니다. 이러한 단계는 다중 컨테이너 애플리케이션의 수명 주기를 관리하기 위해 Docker Compose 가 제공하는 유연성과 제어 기능을 보여주었습니다.