클라우드 서버 리부팅시 도커 컨테이너 재시작
클라우드 서버 리부팅시 도커 컨테이너 장애

최근 연휴 기간중에 우리 블로그가 잠시 장애를 겪었는데, 원인은 클라우드 서버가 무슨 이유에서인지 재시작되었기 때문인 것 같습니다. 서버는 재시작 되었는데, 서버에서 구동중인 도커 컨테이너 재시작은 자동으로 구동 되지 않았기 때문에 서비스 장애로 이어진 것이었습니다.

그래서 내친김에 도커 컨테이너가 자동으로 재시작 될 수 있도록 조치를 하느라 관련해서 찾아봤던 내용을 공유하려고 합니다.

도커 구동 스크립트에 추가

과거에 작성한 글에서 언급한 바와 같이 블로그 사이트는 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:~$

참조 자료 링크

구동중인 도커 컨테이너 재시작 방법

docker-compose 스크립트 작성 방법


Jay

Jay

S/W Engineer!!

0개의 댓글

답글 남기기

아바타 플레이스홀더