최근 연휴 기간중에 우리 블로그가 잠시 장애를 겪었는데, 원인은 클라우드 서버가 무슨 이유에서인지 재시작되었기 때문인 것 같습니다. 서버는 재시작 되었는데, 서버에서 구동중인 도커 컨테이너 재시작은 자동으로 구동 되지 않았기 때문에 서비스 장애로 이어진 것이었습니다.
그래서 내친김에 도커 컨테이너가 자동으로 재시작 될 수 있도록 조치를 하느라 관련해서 찾아봤던 내용을 공유하려고 합니다.
도커 구동 스크립트에 추가
과거에 작성한 글에서 언급한 바와 같이 블로그 사이트는 docker-compose 를 이용해서 구동하였습니다. 구동을 위한 YAML 파일은 아래와 같은 형태로 작성이 되었는데요.
version: "3.1"
services:
wordpress:
image: wordpress:latest
container_name: mywp
depends_on:
- db
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: MY_USERNAME
WORDPRESS_DB_PASSWORD: MY_PASSWORD
WORDPRESS_DB_NAME: MY_DBNAME
WORDPRESS_TABLE_PREFIX: wp_
volumes:
- /mnt/disks/data-disk-200g/wordpress-data:/var/www/html
db:
image: mysql:latest
container_name: mydb
ports:
- 3306:3306
environment:
MYSQL_DATABASE: MY_DBNAME
MYSQL_USER: MY_USERNAME
MYSQL_PASSWORD: MY_PASSWORD
MYSQL_ROOT_PASSWORD: MY_ROOT_PASSWORD
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- /mnt/disks/data-disk-200g/mysql-data:/var/lib/mysql
해당 스크립트에 자동 재시작을 위한 설정을 추가하였습니다.
restart: always
위의 설정을 추가하면 됩니다. 완성된 스크립트는 아래와 같이 작성이 됩니다.
version: "3.1"
services:
wordpress:
image: wordpress:latest
container_name: mywp
depends_on:
- db
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: MY_USERNAME
WORDPRESS_DB_PASSWORD: MY_PASSWORD
WORDPRESS_DB_NAME: MY_DBNAME
WORDPRESS_TABLE_PREFIX: wp_
# 자동 재시작 추가 #
restart: always
# ############### #
volumes:
- /mnt/disks/data-disk-200g/wordpress-data:/var/www/html
db:
image: mysql:latest
container_name: mydb
ports:
- 3306:3306
environment:
MYSQL_DATABASE: MY_DBNAME
MYSQL_USER: MY_USERNAME
MYSQL_PASSWORD: MY_PASSWORD
MYSQL_ROOT_PASSWORD: MY_ROOT_PASSWORD
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
# 자동 재시작 추가 #
restart: always
# ############### #
volumes:
- /mnt/disks/data-disk-200g/mysql-data:/var/lib/mysql
이미 구동중인 도커 컨테이너 재시작 설정 업데이트
그런데 이미 구동중인 상태에서 재시작 설정을 추가하고 싶은 경우가 대부분일 것으로 생각됩니다. 이런 경우 아래와 같이 커맨드라인에서 도커 설정을 업데이트 해 주면 됩니다.
username@instance-1:~$ docker update --restart=always CONTAINER_ID
CONTAINER_ID 는 아래의 커맨드로 확인할 수 있습니다.
username@instance-1:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbe389fc69b1 wordpress:latest "docker-entrypoint.s…" 57 minutes ago Exited (0) 54 minutes ago mywp
eb8d9dee912e mysql:8.0.22 "docker-entrypoint.s…" 57 minutes ago Exited (1) 54 minutes ago mydb
username@instance-1:~$
아래의 예제와 같이 CONTAINER ID 를 확인하여 설정 업데이트를 해 주면 클라우드 서버가 불시에 재시작 되더라도 자동으로 컨테이너가 다시 구동이 되어 서비스 장애 시간을 최소화 할 수 있게 됩니다.
username@instance-1:~$ docker update --restart=always fbe389fc69b1
fbe389fc69b1
username@instance-1:~$
0개의 댓글