환경

  • AWS EC2 (ubuntu)

 

Docker Compose 로 여러개의 도커 컨테이너가 묶여있고, EC2 인스턴스로 배포된 상황에서 여러가지 이슈들로 인스턴스가 재부팅 되거나 애플리케이션이 종료될 수 있다.

이때 재부팅되거나 배포한 애플리케이션이 종료되었을 때 자동으로 애플리케이션이 시작되게끔 할 수 있다.

먼저 Docker Compose 애플리케이션 서비스 파일을 생성해야 한다.

sudo vi /etc/systemd/system/docker-compose-app.service

 

이후 아래의 서비스 파일을 입력한다.

[Unit]
Description=Docker Compose Application Service
After=docker.service
Requires=docker.service

[Service]
Restart=always
RestartSec=10s  # 재시작 간격 설정
WorkingDirectory=<compose.yml이 있는 폴더 경로>
ExecStart=/usr/bin/docker compose up -d
#ExecStop=/usr/bin/docker compose down 필요시 주석 해제

[Install]
WantedBy=multi-user.target
  • RestartSec=10s 옵션을 추가하면, 서비스가 실패한 후 재시작하기 전까지 기다리는 시간을 10초로 설정하게 된다. 즉, 서비스가 비정상적으로 종료되었을 때, systemd는 10초 후에 다시 서비스를 재시작한다는 의미이다.
  • ExecStop=/usr/bin/docker compose down은 systemd 서비스가 종료될 때 실행할 명령어를 정의하는 옵션이다. 이 설정은 시스템이 docker-compose-app.service를 중지하거나, 재시작할 때 기존에 실행 중인 Docker Compose 애플리케이션을 깨끗하게 종료시키는 역할을 한다. 나는 이 설정으로 애플리케이션이 시작과 종료가 계속 반복되어 주석처리하였다.
  • WorkingDirectory=<compose.yml이 있는 폴더 경로> 는 말그대로 compose.yml이 있는 폴더 경로를 설정한다.
    예를들어, /home/ubuntu/server/compose.yml이 있는경우
    WorkingDirectory=/home/ubuntu/server  이렇게 지정하면 된다.

 

이후 서비스 파일을 저장한 후, systemd에 수정된 파일을 적용하고 다시 시작한다.

sudo systemctl daemon-reload
sudo systemctl start docker-compose-app

 

마지막으로 서비스 상태를 확인하여 잘 실행되고 있는지 확인한다.

sudo systemctl status docker-compose-app