환경
- 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
'Cloud > Docker' 카테고리의 다른 글
[Docker + SpringBoot] 스프링부트 로그 파일 남기기 (1) | 2024.10.11 |
---|---|
[Docker + SpringBoot] Docker와 SpringBoot의 타임존 동기화 (1) | 2024.10.09 |
[Docker] Stateless 와 Volume (1) | 2024.09.12 |
[Docker] 도커 네트워크 (0) | 2024.09.11 |
[Docker] 이미지와 컨테이너 레이어 (0) | 2024.09.09 |