systemd를_통한_컨테이너_자동_업데이트

문서의 이전 판입니다!


systemd를 통한 컨테이너 자동 업데이트

컨테이너 운영시 컨테이너 이미지를 최신으로 유지해야하는데 수동으로 하기엔 귀찮은점이 있다.
이럴때 Systemd를 이용하여 자동으로 최신 이미지를 유지하도록 설정 할 수 있다.

예를 들어 아래처럼 Nginx-Proxy-Manager를 컨테이너로 운용중이라고 가정한다.
아래 예제에서는 podman을 사용하지만 docker의 경우에도 동일하다.

proxy:~# podman ps -a
CONTAINER ID  IMAGE                                      COMMAND     CREATED         STATUS         PORTS                                           NAMES
fe7fb41703f7  docker.io/jc21/nginx-proxy-manager:latest              13 minutes ago  Up 13 minutes  0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp  npm

먼저 해당 컨테이너가 systemd에 의해 관리되어야 하므로 docker-composepodman-compose를 이용하면 안된다.
따라서 컨테이너 구동시 아래와 같이 CLI로 기동을 시켜서 systemd 로 제어되도록 구성한다.

이때 중요한 점은 반드시 --label "io.containers.autoupdate=image" 라벨을 추가하여야 한다는 것이다.

podman run -d \
   --name npm \
   --label "io.containers.autoupdate=image" \
   -p 80:80 -p 81:81 -p 443:443 \
   -v /npm/data:/data:Z \
   -v /npm/letsencrypt:/etc/letsencrypt:Z \
   docker.io/jc21/nginx-proxy-manager:latest

위와같이 컨테이너를 생성한 후 systemd scriptgenerate해서 등록해준다.

$ podman generate systemd --new --name npm > /etc/systemd/system/podman-npm.service

# 이후 systemd로 제어하기 위해서 동작중인 컨테이너를 중지하고 삭제한다.
$ podman stop npm
$ podman rm npm

# 그리고 systemd를 통해서 컨테이너를 기동한다.
$ systemctl daemon-reload
$ systemctl enable --now podman-npm.service

위와같이 systemd를 통해 컨테이너를 기동하고 io.containers.autoupdate=image라벨을 추가했다면 아래명령어로 자동 업데이트가 가능하다.

$ podman auto-update

자동 업데이트 상태 확인은 아래와 같이 가능하다.

$ systemctl status podman-auto-update

# 업데이트 주기 확인
$ systemctl list-timers podman-auto-update
  • systemd를_통한_컨테이너_자동_업데이트.1768878633.txt.gz
  • 마지막으로 수정됨: 2026/01/20 03:10
  • 저자 koov