본문 바로가기
Development(Web, Server, Cloud)/22) LINUX - Cloud

ss 2일차

by tonyhan18 2022. 7. 25.
728x90

podman

[Container] Podman 설치 및 사용법 (chhanz.github.io)

 

[Container] Podman 설치 및 사용법

Podman 이란? Red Hat Enterprise Linux 8 / CentOS 8 부터는 Docker 대신 Podman 이라는 도구를 제공합니다. Podman 은 Docker 와 동일하게 단일 노드에서 pod, 컨테이너 이미지 및 컨테이너를 관리합니다. Pod 라고 하

chhanz.github.io

podman은 docker 와 동일하게 단일 노드에서 pod, 컨테이너 이미지 및 컨테이너를 관리한다. Pod 라고 하는 컨테이너 및 컨테이너 그룹을 관리할 수 있는 libpod 라이브러리를 기반으로 한다.

 

위와 같은 구조적인 차이로 인해 예전에 Docker 에서는 systemd 를 이용하여 docker daemon을 재시작 하거나 중지를 하면 운영중인 컨테이너에 영향을 주었습니다.


하지만 Podman  Docker 와 달리 서로 간섭이 없는 컨테이너를 생성 할 수 있습니다.


일종의 PID 가 다른 프로세서라고 생각하면 됩니다.

 

설치

yum -y install podman

특이한 점은 systemd 설정 할 필요가 없습니다.

systemctl list-units | grep -i pod

위와 같이 Docker 와 다르게 systemd 로 서비스를 시작할 필요가 없습니다.

 

기본 사용법

컨테이너 생성

podman run -ti -d --name web httpd

컨테이너 구동 확인

podman ps -a

컨테이너 중지

podman stop web

컨테이너 시작

podman start web

컨테이너 이미지 확인

podman images

컨테이너 이미지 Pull

podman pull centos

컨테이너 삭제

podman rm relaxed_hypatia

컨테이너 Port Mapping

podman run -ti -d -p 80:80 --name web httpd

systemd generate 제공

Podman 은 각 컨테이너 별로 systemd 의 서비스 파일을 생성하여 관리를 할 수 있습니다.

 

- 일반 컨테이너 생성

podman run -d --name redis_server -p 6379:6379 redis

- systemd 서비스 파일 생성

[Unit]
Description=Redis container

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redis_server
ExecStop=/usr/bin/podman stop -t 2 redis_server

[Install]
WantedBy=local.target

위와 같이 /etc/systemd/system/redis_server.service 파일을 생성하거나,

 

podman generate systemd redis_server  > /etc/systemd/system/redis_server.service

위와 같이 generate 옵션을 통해 서비스 파일을 생성하고 Start 구문 및 Stop 구문, 기타 옵션을 컨테이너 실행 상황에 맞게 수정합니다.

 

- systemd 를 이용하여 컨테이너 관리

systemctl start redis-container.service
systemctl stop redis-container.service
systemctl status redis-container.service

 

kubernetes yaml generate 제공

- 1) Yaml 파일 생성

[root@fastvm-centos-7-7-41 ~]# podman generate kube web
# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-1.4.4
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2020-03-01T12:53:22Z"
  labels:
    app: web
  name: web
spec:
  containers:
  - command:
    - httpd-foreground
    env:
    - name: PATH
      value: /usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    - name: TERM
      value: xterm
    - name: HOSTNAME
    - name: container
      value: podman
    - name: HTTPD_PATCHES
    - name: HTTPD_PREFIX
      value: /usr/local/apache2
    - name: HTTPD_VERSION
      value: 2.4.41
    - name: HTTPD_SHA256
      value: 133d48298fe5315ae9366a0ec66282fa4040efa5d566174481077ade7d18ea40
    image: docker.io/library/httpd:latest
    name: web
    ports:
    - containerPort: 80
      hostPort: 80
      protocol: TCP
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
    stdin: true
    tty: true
    workingDir: /usr/local/apache2
status: {}

 

- 2) Kubernetes 에 배포

kubectl create -f podman-gen-web.yml

 

- 3) Pod 상세 내용 확인

kubectl describe pod web
728x90