Podman 시작하기: 이미지, 컨테이너 및 볼륨 관리
이 페이지에서
- 1. 기본 Podman 명령
- 2. Podman을 사용하여 컨테이너 이미지 관리\n
- 3. 컨테이너 관리
- 4. 볼륨 관리
- 5. 커밋으로 사용자 지정 이미지 만들기
- 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을 사용하여 애플리케이션에 대한 새 사용자 지정 이미지를 만들 수 있습니다.