14.6. Podman을 사용하여 systemd 장치 파일 자동 생성
기본적으로 Podman은 기존 컨테이너 또는 포드에 대한 유닛 파일을 생성합니다. podman generate
를 사용하여 더 많은 이식 가능한 systemd 장치 파일을 생성할 수 있습니다. systemd
--newnew
플래그는 컨테이너를 생성, 시작 및 제거하는 장치 파일을 생성, 시작 및 제거하도록 Podman에 지시합니다.
Podman v4.6부터 일반 systemd
장치 파일과 유사한 형식으로 컨테이너를 실행하는 방법을 설명하고 systemd
에서 실행 중인 컨테이너의 복잡성을 숨길 수 있습니다.
사전 요구 사항
-
container-tools
모듈이 설치되어 있습니다.
절차
시스템에서 사용할 이미지를 가져옵니다. 예를 들어
httpd-24
이미지를 가져오려면 다음을 수행합니다.# podman pull registry.access.redhat.com/ubi8/httpd-24
선택 사항: 시스템에서 사용 가능한 모든 이미지를 나열합니다.
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi8/httpd-24 latest 8594be0a0b57 2 weeks ago 462 MB
httpd
컨테이너를 생성합니다.# podman create --name httpd -p 8080:8080 registry.access.redhat.com/ubi8/httpd-24 cdb9f981cf143021b1679599d860026b13a77187f75e46cc0eac85293710a4b1
선택 사항: 컨테이너가 생성되었는지 확인합니다.
# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cdb9f981cf14 registry.access.redhat.com/ubi8/httpd-24:latest /usr/bin/run-http... 5 minutes ago Created 0.0.0.0:8080->8080/tcp httpd
httpd
컨테이너의systemd
장치 파일을 생성합니다.# podman generate systemd --new --files --name httpd /root/container-httpd.service
생성된
container-httpd.service
systemd
장치 파일의 내용을 표시합니다.# cat /root/container-httpd.service # container-httpd.service # autogenerated by Podman 3.3.1 # Wed Sep 8 20:41:44 CEST 2021 [Unit] Description=Podman container-httpd.service Documentation=man:podman-generate-systemd(1) Wants=network-online.target After=network-online.target RequiresMountsFor=%t/containers [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure TimeoutStopSec=70 ExecStartPre=/bin/rm -f %t/%n.ctr-id ExecStart=/usr/bin/podman run --cidfile=%t/%n.ctr-id --sdnotify=conmon --cgroups=no-conmon --rm -d --replace --name httpd -p 8080:8080 registry.access.redhat.com/ubi8/httpd-24 ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id Type=notify NotifyAccess=all [Install] WantedBy=multi-user.target default.target
new
옵션을 사용하여 생성한 유닛 파일은 컨테이너와 포드가 존재할 것으로 예상하지 않습니다. 따라서 podman
명령을 수행합니다( start
명령 대신 서비스를 시작할 때 podman runExecStart
행 참조). 예를 들어 Podman을 사용하여 systemd 장치 파일 생성 섹션을 참조하십시오.
podman run
명령은 다음 명령줄 옵션을 사용합니다.-
con
mon-pidfile
옵션은 호스트에서 실행 중인conmon
프로세스의 프로세스 ID를 저장하는 경로를 가리킵니다.conmon
프로세스는 컨테이너와 동일한 종료 상태로 종료되므로systemd
가 올바른 서비스 상태를 보고하고 필요한 경우 컨테이너를 다시 시작할 수 있습니다. -
cidfile
옵션은 컨테이너 ID를 저장하는 경로를 가리킵니다. -
%t
는 런타임 디렉토리 루트의 경로입니다(예:/run/user/$UserID
). %n
은 서비스의 전체 이름입니다./etc/systemd/system
에 단위 파일을 복사하여 root 사용자로 설치합니다.# cp -Z container-httpd.service /etc/systemd/system
container-httpd.service
를 활성화하고 시작합니다 :# systemctl daemon-reload # systemctl enable --now container-httpd.service Created symlink /etc/systemd/system/multi-user.target.wants/container-httpd.service
/etc/systemd/system/container-httpd.service. Created symlink /etc/systemd/system/default.target.wants/container-httpd.service /etc/systemd/system/container-httpd.service.
-
con
검증
container-httpd.service :의 상태를 확인합니다.
# systemctl status container-httpd.service ● container-httpd.service - Podman container-httpd.service Loaded: loaded (/etc/systemd/system/container-httpd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-08-24 09:53:40 EDT; 1min 5s ago Docs: man:podman-generate-systemd(1) Process: 493317 ExecStart=/usr/bin/podman run --conmon-pidfile /run/container-httpd.pid --cidfile /run/container-httpd.ctr-id --cgroups=no-conmon -d --repla> Process: 493315 ExecStartPre=/bin/rm -f /run/container-httpd.pid /run/container-httpd.ctr-id (code=exited, status=0/SUCCESS) Main PID: 493435 (conmon) ...