문서의 이전 판입니다!
systemd를 통한 컨테이너 자동 업데이트
— 이강우 2026/01/20 03:12
컨테이너 운영시 컨테이너 이미지를 최신으로 유지해야하는데 수동으로 하기엔 귀찮은점이 있다.
이럴때 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-compose나 podman-compose를 이용하면 안된다.
따라서 컨테이너 구동시 아래와 같이 CLI로 기동을 시켜서 systemd 로 제어되도록 구성한다.
이때 중요한 점은 반드시 --label "io.containers.autoupdate=image" 라벨을 추가하여야 한다는 것이다.
그리고 컨테이너 이미지의 경로를 반드시 full url형태로 하여야 한다.
즉 docker.io/jc21/nginx-proxy-manager:latest 라고 하여야 하며 jc21/nginx-proxy-manager:latest 와 같이 도메인을 생략한 형태는 허용하지 않는다.
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 script를 generate해서 등록해준다.
$ 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