웹사이트 검색

Podman 시작하기: 이미지, 컨테이너 및 볼륨 관리


이 페이지에서

  1. 1. 기본 Podman 명령
  2. 2. Podman을 사용하여 컨테이너 이미지 관리\n
  3. 3. 컨테이너 관리
  4. 4. 볼륨 관리
  5. 5. 커밋으로 사용자 지정 이미지 만들기
  6. 6. Dockerfile로 커스텀 이미지 만들기

Podman은 Docker와 유사한 기능을 제공하는 컨테이너 런타임입니다. libpod 라이브러리의 일부이며 포드, 컨테이너, 컨테이너 이미지 및 컨테이너 볼륨을 관리하는 데 사용할 수 있습니다. Podman은 클라이언트-서버 아키텍처를 사용하고 실행하기 위해 docker 데몬이 필요한 Docker와 매우 달랐지만 Podman은 실행하는 데 데몬이 필요하지 않으며 루트 권한 없이도 완벽하게 실행할 수 있습니다.

이 튜토리얼에서는 컨테이너, 이미지 및 볼륨을 관리하고 컨테이너 이미지를 생성하기 위한 Podman의 기본 사용법을 보여줍니다. 이 가이드를 완료하려면 podman이 설치되어 있어야 합니다. 다양한 운영 체제에 대한 가이드는 다음과 같습니다.

  • Ubuntu 22.04에 Podman을 설치하는 방법\n
  • Rocky Linux에서 Podman(Docker 대안) 시작하기\n
  • Ubuntu 20.04에서 Podman(Docker 대안) 설치 및 사용 방법
  • Debian 11에서 Podman을 Docker 대안으로 설치하는 방법\n

전제 조건

  • Podman이 설치된 Ubuntu 서버
  • Docker에 대한 기본 지식이 있으면 더 쉽게 만들 수 있습니다.\n

1. 기본 Podman 명령

Ubuntu 시스템에 Podman을 설치한 후 Podman 자체를 확인하는 방법을 알아야 합니다. 시스템에 이미 설치된 버전, Podman 시스템 환경, 기본적인 도움말 사용법을 확인해야 합니다.

머신에 설치된 Podman 버전을 가져오려면 다음 명령을 사용하십시오.

podman version

Podman 버전 > 1.0.1은 이 가이드에 적합합니다.

이제 Podman 환경 설정을 확인하십시오.

podman info

그러면 Podman 설치의 시스템 환경이 표시됩니다. 호스트 패키지 정보, 레지스트리 및 스토리지를 포함합니다.

다음으로 다음 명령을 실행하여 사용 가능한 모든 Podman 명령 옵션을 표시합니다.

podman --help

특정 명령에 대한 도움말을 표시하려면 아래와 같이 사용할 수 있습니다.

podman pod help

2. Podman을 사용하여 컨테이너 이미지 관리

이제 Podman을 사용하여 컨테이너 이미지 관리로 이동했습니다. 이미지 검색, 이미지 다운로드, 로컬 시스템에서 사용 가능한 이미지 표시 및 이미지 제거를 포함하여 컨테이너 이미지 관리와 관련하여 알아야 할 몇 가지 기본 명령이 있습니다.

이미지를 검색하려면 아래 명령어를 실행하세요.

podman search nginx

이 명령은 /etc/containers/repositories.conf 구성 파일에 이미 정의되어 있는 사용 가능한 모든 리포지토리에서 nginx라는 단어가 포함된 이미지를 검색합니다.

이제 아래의 podman 풀 명령을 사용하여 일부 이미지를 다운로드합니다.

podman pull docker.io/library/nginx
podman pull docker.io/library/alpine

완료되면 서버 시스템에서 사용 가능한 모든 이미지를 확인합니다.

podman images

이제 시스템에서 nginx 및 alpine 이미지를 얻을 수 있습니다.

알파인 이미지를 제거하려면 아래와 같이 rmi 옵션을 사용할 수 있습니다.

podman rmi alpine

결과적으로 시스템에는 nginx 컨테이너 이미지만 있습니다.

3. 컨테이너 관리

이 단계에서는 컨테이너 이미지 관리에 대해 배웠습니다. 그리고 다음 단계에서는 Podman으로 컨테이너를 생성하고 관리하는 방법에 대해 알아봅니다.

새 컨테이너를 생성하려면 아래와 같이 podman run 명령을 사용할 수 있습니다.

podman run -d -p 8000:80 --name hakase-nginx docker.io/library/nginx

이 명령은 nginx 이미지를 기반으로 hakase-nginx라는 새 컨테이너를 생성하고 호스트 시스템에서 포트 8000을 노출합니다.

세부 명령 옵션:

-d - 컨테이너를 백그라운드에서 계속 실행하고 결과적으로 컨테이너 ID만 인쇄합니다.
-p 8000:80 - 컨테이너 및 호스트 시스템에 대한 포트 매핑. 호스트 시스템의 포트 8000 및 컨테이너의 포트 80.
--name hakase-nginx - hakase-nginx로 컨테이너 이름을 지정합니다.

이제 시스템에서 실행 중인 모든 컨테이너를 표시합니다.

podman ps

그러면 hakase-nginx라는 컨테이너가 실행되고 있음이 표시됩니다.

사용 가능한 모든 컨테이너를 확인하려면 -a 옵션을 사용할 수 있습니다.

podman ps -a

이제 상태가 다른 모든 사용 가능한 컨테이너를 얻을 수 있습니다.

호스트 머신에서 실행 중인 모든 컨테이너를 가져온 후 컨테이너 내부의 모든 프로세스를 확인하고 실행 중인 컨테이너에 연결하고 컨테이너를 중지하고 제거하는 방법을 보여줍니다.

다음 명령을 사용하여 실행 중인 컨테이너 내부의 프로세스를 확인합니다.

podman top hakase-nginx

이제 실행 중인 컨테이너에 연결하고 액세스하려면 아래와 같이 exec 명령을 사용할 수 있습니다.

podman exec -it hakase-nginx /bin/bash

hakase-nginx 컨테이너 내부에서 nginx 버전을 확인합니다.

nginx -V

아래와 같은 결과를 얻게 됩니다.

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

다음으로 hakase-nginx 컨테이너를 중지합니다.

podman stop hakase-nginx

그런 다음 용기를 제거하십시오.

podman rm hakase-nginx

실행 중인 컨테이너를 강제로 중지하고 제거하려면 옵션에 -f force를 사용할 수 있습니다.

podman rm hakase-nginx -f

4. 볼륨 관리

버전 0.12부터 Podman은 로컬 전용 볼륨 생성 및 관리를 지원합니다. 따라서 이전 버전을 사용하는 경우 이 podman 볼륨 명령을 받을 수 없습니다.

이제 다음 명령을 사용하여 새 로컬 볼륨을 만듭니다.

podman volume create hakase-volume

그런 다음 시스템에서 사용 가능한 모든 볼륨을 표시합니다.

podman volume ls

그러면 목록에 hakase-volume이 표시됩니다.

hakase-volume 볼륨에 대한 세부 정보를 확인하기 위해 아래와 같이 inspect 옵션을 사용할 수 있습니다.

podman volume inspect hakase-volume

그리고 볼륨의 mountPoint가 로컬 디렉토리 /var/lib/containers/storage/hakase-volume/_data에 있음을 알 수 있습니다.

해당 디렉토리로 이동하여 새 index.html 파일을 만듭니다.

cd /var/lib/containers/storage/hakase-volume/_data
echo "<h1><center>This is custom index and volume - Hello Podman</center></h1>" > index.html

이제 새 컨테이너를 만들고 hakase-volume을 컨테이너에 마운트합니다.

podman run -d -p 8000:80 -v hakase-volume:/usr/share/nginx/html --name hakase-nginx docker.io/library/nginx

컨테이너가 생성되면 다음 명령을 사용하여 컨테이너에서 사용 가능한 볼륨을 확인합니다.

podman inspect -f '{{ json .Mounts }}' hakase-nginx | jq

결과 하단에 컨테이너의 hakase-volume이 표시됩니다.

다음으로 컨테이너의 IP 주소를 확인합니다.

podman inspect -f '{{ .NetworkSettings.IPAddress }}' hakase-nginx

httpie를 사용하여 HTTP 포트에서 컨테이너에 액세스합니다.

http http://10.88.0.4/

그러면 hakase-volume에 생성된 사용자 지정 index.html 파일이 생성됩니다.

이제 볼륨을 제거하려면 rm 옵션을 사용할 수 있습니다.

podman volume rm hakase-volume

그리고 hakase-volume이 제거됩니다.

5. 커밋으로 커스텀 이미지 생성

이제 Podman을 사용하여 사용자 지정 컨테이너 이미지를 만들려고 합니다. 기본적으로 Podman을 사용하면 변경된 컨테이너를 기반으로 사용자 지정 이미지를 만들거나 Dockerfile을 사용하여 새 사용자 지정 이미지를 만들 수 있습니다.

이 섹션에서는 podman commit 명령을 통해 변경된 컨테이너를 기반으로 새로운 사용자 정의 이미지를 생성하려고 했습니다.

마스터 이미지 우분투를 다운로드/풀합니다.

podman pull docker.io/library/ubuntu

이제 이미지 우분투를 기반으로 컨테이너를 실행합니다. 그리고 컨테이너 내에서 리포지토리를 업데이트하고 nginx 패키지를 설치하는 bash 명령을 실행합니다.

podman run --name container-temp ubuntu bash -c "apt update && apt install -y nginx"

컨테이너 내부에서 nginx 설치를 기다립니다.

완료되면 다음 명령을 사용하여 컨테이너 임시를 기반으로 새 사용자 지정 이미지를 만듭니다.

podman commit container-temp my-nginx

다음으로 시스템에서 사용 가능한 이미지를 확인합니다.

podman images

그러면 목록에 my-nginx라는 새 이미지가 표시됩니다.

my-nginx 이미지를 기반으로 컨테이너를 실행하려면 다음 명령을 실행합니다.

podman run -dt -p 8001:80 --name nginx01 my-nginx /usr/sbin/nginx -g 'daemon off;'

이제 실행 중인 컨테이너를 확인하고 해당 IP 주소를 확인합니다.

podman ps
podman inspect --format '{{ .NetworkSettings.IPAddress }}' nginx01

그러면 nginx01 컨테이너가 실행되고 있음이 표시됩니다. 그런 다음 nginx01 컨테이너의 HTTP 포트에 액세스합니다.

http -p h 10.88.0.19

결과적으로 아래와 같은 HTTP 헤더 응답을 받게 됩니다.

6. Dockerfile로 커스텀 이미지 생성

이제 Dockerfile을 사용하여 새 사용자 지정 컨테이너 이미지를 만들려고 합니다.

새 프로젝트 디렉토리를 만들고 내부에 새 Dockerfile을 만듭니다.

mkdir project; cd project/
vim Dockerfile

다음 구성을 붙여넣습니다.

FROM ubuntu

# Install Nginx
RUN \
  apt-get update && \
  apt-get install -y nginx && \
  rm -rf /var/lib/apt/lists/* && \
  echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
chown -R www-data:www-data /var/lib/nginx

# Define mountable directories.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]

# Define the working directory.
WORKDIR /etc/nginx

# Define default command.
CMD ["nginx"]

# Expose ports.
EXPOSE 80
EXPOSE 443

저장하고 닫습니다.

이제 아래 podman을 실행하여 Dockerfile을 사용하여 새 사용자 지정 이미지를 빌드합니다.

podman build -t hakase-image .

완료되면 컴퓨터에서 새 이미지를 확인합니다.

podman images

그리고 당신은 hakase-image를 얻을 것입니다.

다음으로 다음 명령을 실행하여 hakase-image를 기반으로 새 컨테이너를 만듭니다.

podman run -d -p 8002:80 --name nginx02 hakase-image

그런 다음 nginx02 컨테이너와 해당 IP 주소를 확인합니다.

podman ps
podman inspect --format '{{ .NetworkSettings.IPAddress }}' nginx02

nginx02 컨테이너가 실행 중인지 확인하십시오.

이제 httpie 도구를 사용하여 컨테이너를 확인하십시오.

http 10.88.0.21

그러면 기본 Nginx 페이지와 해당 HTTP 헤더가 표시됩니다.

마지막으로 이제 Podman을 사용하여 컨테이너, 이미지 및 볼륨을 관리할 수 있습니다. 그리고 Dockerfile을 사용하여 애플리케이션에 대한 새 사용자 지정 이미지를 만들 수 있습니다.