웹사이트 검색

Rocky Linux에서 Podman(Docker 대안) 시작하기


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 록키 리눅스 8.4
  • 록키 리눅스 8.4

이 페이지에서

  1. 전제 조건
  2. Rocky Linux에 Podman 설치
  3. Podman 중요 구성
  4. 새 사용자 설정
  5. Podman 기본 사용법
    1. 컨테이너 이미지 검색
    2. 컨테이너 이미지 관리
    3. Podman으로 컨테이너 실행\n
    4. Podman으로 컨테이너 로그 확인\n
    5. Podman으로 컨테이너 중지
    6. Podman으로 사용자 지정 볼륨 설정
    7. 실행 중인 컨테이너에 대한 SSH\n
    8. 환경 정리\n

    Podman은 OCI(Open Container Initiative) 컨테이너 및 컨테이너 이미지를 사용하여 애플리케이션을 배포하기 위한 Linux 네이티브 도구입니다. Docker 이미지 및 OCI 컨테이너 이미지를 포함하여 여러 컨테이너 이미지 형식을 지원합니다. 또한 Podman은 포드, 컨테이너 그룹 관리를 지원합니다.

    Podman은 서비스 없이 단일 바이너리 명령줄로 실행되는 데몬이 없는 도구입니다. Docker와 유사한 명령줄을 제공하며 별칭 docker=podman과 같은 별칭을 사용할 수 있습니다.

    컨테이너를 실행하고 컨테이너 이미지를 관리하기 위해 Podman은 runc, crun 및 runv와 같은 libpod 및 OCI 컨테이너 런타임에 의존합니다.

    전제 조건

    이 가이드에서는 Rocky Linux 시스템에 Podman을 설치하는 방법을 배웁니다. 또한 컨테이너 및 컨테이너 이미지 관리를 위한 Podman의 기본 사용법을 배웁니다.

    시작하기 전에 다음 요구 사항을 충족하는지 확인하십시오.

    • 운영 체제: Rocky Linux 8.4(Green Obsidian)
    • 루트 권한: 새 패키지 설치 및 시스템 구성 편집용\n

    이제 Podman 설치를 시작하겠습니다.

    Rocky Linux에 Podman 설치

    기본적으로 Rocky Linux appstream 리포지토리는 podman 패키지를 제공합니다.

    1. 아래 DNF 명령을 실행하여 podman 패키지에 대한 정보를 표시합니다.

    sudo dnf info podman

    아래와 비슷한 출력이 표시됩니다.

    Last metadata expiration check: 0:07:09 ago on Tue 16 Nov 2021 09:30:27 AM UTC.
    Available Packages
    Name         : podman
    Version      : 3.3.1
    Release      : 9.module+el8.5.0+710+4c471e88
    Architecture : x86_64
    Size         : 12 M
    Source       : podman-3.3.1-9.module+el8.5.0+710+4c471e88.src.rpm
    Repository   : appstream
    Summary      : Manage Pods, Containers and Container Images
    URL          : https://podman.io/
    License      : ASL 2.0 and GPLv3+
    Description  : podman (Pod Manager) is a fully featured container engine that is a simple
                 : daemonless tool.  podman provides a Docker-CLI comparable command line that
                 : eases the transition from other container engines and allows the management of
                 : pods, containers and images.  Simply put: alias docker=podman.
                 : Most podman commands can be run as a regular user, without requiring
                 : additional privileges.
                 :
                 : podman uses Buildah(1) internally to create container images.
                 : Both tools share image (not container) storage, hence each can use or
                 : manipulate images (but not containers) created by the other.
                 :
                 : Manage Pods, Containers and Container Images
                 : podman Simple management tool for pods, containers and images

    appstream 리포지토리는 Podman 패키지 버전 3.3.1을 제공합니다.

    2. 아래 DNF 명령을 사용하여 Podman을 설치합니다.

    sudo dnf install podman

    y를 입력하여 확인하고 Enter를 눌러 설치를 계속하십시오.

    3. Podman 설치가 완료되면 다음 명령을 사용하여 확인합니다.

    podman version

    아래와 비슷한 출력이 표시됩니다.

    Version:      3.3.1
    API Version:  3.3.1
    Go Version:   go1.16.7
    Built:        Wed Nov 10 01:48:06 2021
    OS/Arch:      linux/amd64

    Podman 중요 구성

    Podman 패키지는 /etc/containers 디렉토리에 있는 몇 가지 기본 구성과 함께 제공됩니다.

    다음은 알아야 할 일부 Podman 구성입니다.

    • policy.json. 이미지 서명을 위한 정책 구성입니다.\n
    • registries.conf. Docker Registry, RHEL 컨테이너 이미지 레지스트리 및 Fedora 컨테이너 이미지 레지스트리와 같은 사용 가능한 컨테이너 이미지 레지스트리 목록입니다.\n
    • storage.conf. Podman의 기본 스토리지 구성. 드라이버, 위치 등을 포함합니다.\n
    • 디렉토리 registries.d/. 추가 레지스트리 구성 및 이미지 서명
    • 디렉토리 registries.conf.d/. 컨테이너 이미지 별칭에 대한 추가 구성입니다.\n

    새 사용자 설정

    이 단계에서는 새 사용자를 생성하고 Docker 이미지 hello-world를 실행하여 Podman 설치를 확인합니다.

    1. 아래 명령을 실행하여 새 사용자 johndoe를 추가합니다.

    useradd -m -s /bin/bash johndoe
    passwd johndoe

    사용자 johndoe의 강력한 새 암호를 입력하십시오.

    2. 그런 다음 다음 명령을 사용하여 johndoe 사용자로 로그인합니다.

    su - johndoe

    3. 이제 다음 명령을 실행하여 Docker 이미지 hello-world를 기반으로 새 컨테이너를 실행합니다.

    podman run hello-world

    Hello World 메시지 출력이 표시되며 이는 컨테이너가 실행 중이지만 지금은 종료되었음을 의미합니다.

    ? docker.io/library/hello-world:latest
    Trying to pull docker.io/library/hello-world:latest...
    Getting image source signatures
    Copying blob 2db29710123e done
    Copying config feb5d9fea6 done
    Writing manifest to image destination
    Storing signatures

    Hello from Docker!
    This message shows that your installation appears to be working correctly.

    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash

    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/

    For more examples and ideas, visit:
     https://docs.docker.com/get-started/

    4. 아래 Podman 명령을 사용하여 시스템의 컨테이너 상태를 확인합니다.

    podman ps -a

    현재 상태가 Exited인 Docker 이미지 hello-world를 기반으로 하는 컨테이너가 표시됩니다.

    CONTAINER ID  IMAGE                                 COMMAND     CREATED        STATUS                    PORTS       NAMES
    cea9bbfeac4d  docker.io/library/hello-world:latest  /hello      6 minutes ago  Exited (0) 6 minutes ago              recursing_shaw

    Podman 기본 사용법

    이 단계에서는 컨테이너 및 컨테이너 이미지를 관리하기 위한 Podman의 기본 사용법을 배웁니다.

    컨테이너 이미지 검색

    1. Podman을 사용하여 컨테이너 이미지를 찾으려면 다음 명령을 사용하십시오. 이 예에서는 이름이 nginx인 컨테이너 이미지를 검색했습니다.

    podman search nginx

    여러 레지스트리에서 많은 컨테이너 이미지를 볼 수 있습니다.

    2. --limit n 옵션을 사용하여 각 컨테이너 이미지 레지스트리에서 검색 결과를 제한할 수 있습니다.

    podman search nginx --limit 3

    이제 이름이 nginx인 컨테이너 이미지의 3개 결과가 있는 각 레지스트리가 표시됩니다.

    INDEX              NAME                                                DESCRIPTION                                      STARS       OFFICIAL    AUTOMATED
    fedoraproject.org  registry.fedoraproject.org/f29/nginx                                                                 0
    fedoraproject.org  registry.fedoraproject.org/f29/origin-nginx-router                                                   0
    redhat.com         registry.access.redhat.com/ubi8/nginx-120           Platform for running nginx 1.20 or building ...  0
    redhat.com         registry.access.redhat.com/ubi8/nginx-118           Platform for running nginx 1.18 or building ...  0
    redhat.com         registry.access.redhat.com/rhscl/nginx-18-rhel7     Nginx 1.8 server and a reverse proxy server      0
    centos.org         registry.centos.org/bamachrn/nginx-header                                                            0
    centos.org         registry.centos.org/centos/nginx                                                                     0
    centos.org         registry.centos.org/centos/nginx-110-centos7                                                         0
    docker.io          docker.io/library/nginx                             Official build of Nginx.                         15839       [OK]
    docker.io          docker.io/jwilder/nginx-proxy                       Automated Nginx reverse proxy for docker con...  2096                    [OK]
    docker.io          docker.io/nginxinc/nginx-unprivileged               Unprivileged NGINX Dockerfiles                   54

    컨테이너 이미지 관리

    Podman은 OCI 및 Docker 이미지 형식을 지원합니다. 이 단계에서는 Podman으로 컨테이너 이미지를 관리하게 됩니다.

    1. 다음 명령을 사용하여 컨테이너 이미지 nginx:alpine을 다운로드합니다.

    podman pull nginx:alpine

    사용하려는 컨테이너 레지스트리를 선택한 다음 Enter 키를 눌러 확인합니다. 이 예에서는 Docker 레지스트리를 사용합니다.

    ? Please select an image:
        registry.fedoraproject.org/nginx:alpine
        registry.access.redhat.com/nginx:alpine
        registry.centos.org/nginx:alpine
      ? docker.io/library/nginx:alpine

    다운로드 프로세스가 시작됩니다.

    ? docker.io/library/nginx:alpine
    Trying to pull docker.io/library/nginx:alpine...
    Getting image source signatures
    Copying blob a4e156412037 done
    Copying blob a2402c2da473 done
    Copying blob e0bae2ade5ec done
    Copying blob 97518928ae5f done
    Copying blob 3f3577460f48 done
    Copying blob e362c27513c3 done
    Copying config b46db85084 done
    Writing manifest to image destination
    Storing signatures
    b46db85084b80a87b94cc930a74105b74763d0175e14f5913ea5b07c312870f8

    2. 컨테이너 이미지 다운로드 프로세스가 완료되면 다음 명령을 사용하여 다운로더 이미지를 확인합니다.

    podman images

    아래는 비슷한 출력입니다.

    REPOSITORY                     TAG         IMAGE ID      CREATED      SIZE
    docker.io/library/nginx        alpine      b46db85084b8  3 days ago   24.7 MB
    docker.io/library/hello-world  latest      feb5d9fea6a5  7 weeks ago  19.9 kB

    Podman으로 컨테이너 실행

    컨테이너 이미지 nginx:alpine을 다운로드한 후 Podman을 사용하여 새 컨테이너를 실행하는 방법을 배웁니다.

    1. 다음 명령을 실행하여 nginx:alpine 이미지를 기반으로 컨테이너를 실행합니다.

    podman run -it --rm -d -p 8080:80 --name web nginx:alpine

    임의의 문자열과 컨테이너 번호를 얻을 수 있습니다.

    2. 다음 명령을 사용하여 시스템에서 실행 중인 컨테이너를 확인합니다.

    podman ps

    아래와 비슷한 출력이 표시됩니다.

    컨테이너 이름 webUp이며 호스트 시스템에서 포트 8080을 노출합니다.

    3. 이제 웹 브라우저를 열고 주소 표시줄에 Rocky Linux IP 주소를 입력합니다. 이 예에서 Rocky Linux 시스템의 IP 주소는 192.168.1.10입니다.

    http://192.168.1.10:8080/

    컨테이너 이미지 nginx:alpine을 기반으로 하는 컨테이너 web에서 기본 index.html을 볼 수 있습니다.

    Podman으로 컨테이너 로그 확인

    이제 logs 옵션을 사용하여 컨테이너 로그를 확인하는 Podman 명령을 배웁니다.

    1. 컨테이너의 로그를 확인하려면 아래 Podman 명령을 사용할 수 있습니다.

    podman logs web

    컨테이너 web의 자세한 로그가 표시됩니다.

    2. 컨테이너 로그 출력을 제한하려면 --tail n 옵션을 사용합니다.

    podman logs --tail 10 web

    다음은 컨테이너 web의 유사한 로그 출력입니다.

    Podman으로 컨테이너 중지

    1. 컨테이너 웹을 중지하려면 아래 Podman 명령을 사용하십시오.

    podman stop web

    이제 컨테이너 이 중지됩니다.

    2. 다음 명령을 사용하여 확인합니다.

    podman ps
    podman ps -a

    컨테이너를 실행할 때 --rm 옵션을 사용하고 있기 때문에 컨테이너 웹이 자동으로 삭제되는 것을 볼 수 있습니다.

    Podman으로 사용자 정의 볼륨 설정

    이 단계에서는 Podman으로 볼륨을 관리하는 방법을 배웁니다.

    1. 새 디렉터리 데이터와 사용자 지정 파일 index.html을 만듭니다. 이는 Nginx 컨테이너의 기본 Nginx index.html 파일을 대체합니다.

    mkdir -p ~/data/
    nano ~/data/inde.html

    다음 HTML 스크립트를 복사하여 붙여넣으십시오.

    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>Welcome to Container Nginx</title>
    </head>
    <body>
      <h2>Hello from Nginx container - Managed with Podman</h2>
    </body>
    </html>

    스크립트를 저장하고 종료합니다.

    2. 다음으로 다음 명령을 실행하여 사용자 지정 볼륨으로 새 컨테이너를 생성합니다.

    podman run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine

    -v data:/usr/share/nginx/html 옵션을 사용하여 새 컨테이너에 대한 사용자 정의 볼륨을 설정하십시오. data 디렉토리는 컨테이너 디렉토리 /usr/share/nginx/html에 마운트됩니다.

    3. 아래 Podman 명령을 사용하여 실행 중인 컨테이너를 확인합니다.

    podman ps

    새 컨테이너 이름 web은 사용자 지정 볼륨과 함께 Up입니다.

    4. 웹 브라우저를 열고 8080 포트로 서버 IP 주소를 입력합니다.

    http://192.168.1.10:8080/

    이제 아래와 같이 사용자 정의 index.html 페이지가 표시됩니다.

    실행 중인 컨테이너에 대한 SSH

    이 단계에서는 실행 중인 컨테이너의 셸에 액세스합니다.

    1. 실행 중인 컨테이너에 로그인하려면 아래와 같이 exec 옵션과 함께 Podman을 사용합니다.

    podman exec -it web /bin/sh

    2. 컨테이너에 로그인한 후 컨테이너 호스트 이름, IP 주소, 라우팅 테이블을 확인합니다.

    hostname

    ip a
    route -n

    이제 exit를 입력하고 Enter를 눌러 컨테이너에서 로그아웃합니다.

    환경 정리

    마지막 단계에서는 환경을 정리합니다.

    1. 다음 명령을 사용하여 컨테이너 web을 중지합니다.

    podman stop web

    2. 다음으로 아래 podman 명령을 사용하여 상태가 Exited인 모든 컨테이너를 제거합니다.

    podman rm $(podman ps --filter "status=exited" -q)

    이제 컨테이너 및 컨테이너 이미지 관리를 위한 Podman의 기본 사용을 완료했습니다.

    결론

    축하합니다! Rocky Linux 시스템에 Podman을 성공적으로 설치했습니다. 또한 컨테이너 및 컨테이너 이미지를 관리하기 위한 Podman의 기본 사용법을 배웠습니다.

    다음 단계에서는 Docker 이미지 형식 또는 OCI 컨테이너 이미지 사양을 기반으로 사용자 지정 컨테이너 이미지를 만드는 데 관심이 있을 수 있습니다.