본문 바로가기

리눅스-podman/실습

podman 실습 - 컨테이너 유닛 생성

컨테이너 시스템 유닛 생성

 

1) 컨테이너 생성

[admin@localhost ~]$ podman run -d --name web -p 8080:8080 -v ~/apps:/var/www/html:Z docker.io/centos/httpd-24-centos8
# web이름을 가지고 포트8080:8080을 가지고 html을 저장공간으로하는 컨테이너 생성
:Z옵션으로 자동으로 context 부여
bb3fb10b632f0aad5e172691c02d4308c68e307399f62cb175e5de3c45732c23


[admin@localhost ~]$ podman ps # 생성된 web 컨테이너 확인
CONTAINER ID  IMAGE                                     COMMAND               CREATED         STATUS         PORTS                    NAMES
bb3fb10b632f  docker.io/centos/httpd-24-centos8:latest  /usr/bin/run-http...  3 seconds ago   Up 4 seconds   0.0.0.0:8080->8080/tcp   web

 

2) 컨테이너 서비스로 만들기

# --new: 컨테이너가 종료되면 제거되게하는 옵션
[admin@localhost ~]$ podman generate systemd --name web --new
--------------------------------------------------------------
[Unit]
Description=Podman container-web.service
Documentation=man:podman-generate-systemd(1)
--------------------------------------------------------------
[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
--------------------------------------------------------------
[Install]
WantedBy=default.target
--------------------------------------------------------------
# --files: 위의 생성한 명령어를 파일로 만들어준다.
[admin@localhost ~]$ podman generate systemd --name web --new --files
/home/admin/container-web.service

 

3) loginctl 설정

[admin@localhost ~]$ loginctl show-user admin
--------------------------------------------------------------
Linger=yes
# Linger=yes를 설정하지 않으면 컨테이너가 SIGTERM 신호를 받으면 즉시 종료되기에  아직 실행 중인 프로세스가 종료되지 못하고 데이터 손실이나 시스템 장애가 발생할 수 있다.
[admin@localhost ~]$ loginctl enable-linger 

 

4) 생성된 서비스 파일 실행

[admin@localhost ~]$ mkdir -p .config/systemd/user/
# .config/systemd/디렉토리 밑에 user 생성
[admin@localhost ~]$ mv container-web.service ./.config/systemd/user/

# 생성된 서비스 파일을 만든 디렉토리로 이동
[admin@localhost ~]$ podman stop web
web
[admin@localhost ~]$ podman rm web
web
[admin@localhost ~]$ podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

# ssh로 본인에게 접속하지 않으면 에러 발생
[admin@localhost ~]$ systemctl --user enable --now container-web.service
Failed to connect to bus: No medium found

# 생성한 컨테이너 서비스를 실행. admin으로 실행시키기 때문에 --user 사용
[admin@localhost ~]$ ssh admin@192.168.180.128
# 스위치 유저로는 명령이 안되기에 ssh로 접속
[admin@localhost ~]$ podman ps
CONTAINER ID  IMAGE                                     COMMAND               CREATED        STATUS        PORTS                   NAMES
89f9da73a286  docker.io/centos/httpd-24-centos8:latest  /usr/bin/run-http...  4 seconds ago  Up 5 seconds  0.0.0.0:8080->8080/tcp  web

[admin@localhost ~]$ systemctl --user status container-web.service
# 생성한 서비스의 상태를 확인
--------------------------------------------------------------
container-web.service - Podman container-web.service
     Loaded: loaded (/home/admin/.config/systemd/user/container-web.service; enabled; preset: disabled)
     Active: active (running) since Fri 2023-06-09 11:04:06 KST; 26s ago
--------------------------------------------------------------



5) 재부팅 이후 실행 확인

[admin@localhost ~]$ podman ps
# 재부팅 이후에도 컨테이너가 실행 중이다.
CONTAINER ID  IMAGE                                     COMMAND               CREATED         STATUS         PORTS                   NAMES
63f593c3a588  docker.io/centos/httpd-24-centos8:latest  /usr/bin/run-http...  21 seconds ago  Up 22 seconds  0.0.0.0:8080->8080/tcp  web


[admin@localhost ~]$ ssh admin@localhost

# ssh로 접속해서 서비스가 실행 중인지 확인

[admin@localhost ~]$ systemctl --user status container-web.service
● container-web.service - Podman container-web.service
    Loaded: loaded (/home/admin/.config/systemd/user/container-web.service; en>
    Active: active (running) since Fri 2023-06-09 11:07:33 KST; 1min 31s ago

 

'리눅스-podman > 실습' 카테고리의 다른 글

podman 실습 - mariadb 생성 및 설정  (0) 2023.09.01
podman 실습 - 레지스트리 등록과 이미지 사용  (0) 2023.09.01
podman  (1) 2023.09.01