웹사이트 검색

Ubuntu 20.04에서 Podman(Docker 대안)을 설치하고 사용하는 방법


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

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 20.04(Focal Fossa)

이 페이지에서

  1. 전제 조건
  2. Ubuntu 20.04에 Podman 설치
  3. 새 사용자 생성 및 hello-world 컨테이너 실행\n
  4. Podman 기본 사용법
  5. 결론

Podman은 컨테이너, 이미지, 볼륨 및 포드(컨테이너 그룹)를 관리하기 위한 오픈 소스 도구입니다. 컨테이너 수명 주기를 관리하기 위해 libpod 라이브러리 API를 사용했으며 OCI(Open Container Initiative) 및 Docker 이미지를 포함한 여러 컨테이너 이미지 형식을 지원합니다.

Podman은 OCI(Open Container Initiative) 규정 준수 컨테이너 엔진입니다. Docker CLI 인터페이스와 호환되며 루트 없이 컨테이너를 실행할 수 있습니다(루트 권한 없이 컨테이너 실행). Podman은 더 빠른 실험과 기능 개발을 통해 차세대 Linux 컨테이너 도구로 설계된 Red Hat Enterprise Linux의 일부로 출시되었습니다.

이 자습서에서는 Ubuntu 20.04 시스템에 Podman을 설치하는 방법을 배웁니다. Podman을 설치하고 Docker 컨테이너, 이미지 및 볼륨을 관리하기 위한 podman의 기본 사용법을 배웁니다.

전제 조건

  • Ubuntu 20.04 서버 - 더 이상 사용되지 않는 종속성을 제거하고 설치 중에 오류가 발생하도록 모든 패키지가 최신 버전인지 확인합니다.\n
  • 루트 권한이 있는 사용자 또는 루트 사용자 - 새 패키지를 설치하고 시스템 전체의 구성을 변경합니다.\n

Ubuntu 20.04에 Podman 설치

처음에는 Ubuntu 20.04 시스템에 podman을 설치하기 위한 타사 리포지토리 및 키를 추가합니다.

1. 다음 명령을 실행하여 /etc/os-release 파일에서 환경 변수를 내보냅니다.

. /etc/os-release

2. 안정적인 릴리스로 podman 리포지토리를 추가하고 아래 명령을 사용하여 시스템에 GPG 키를 추가합니다.

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list

curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key" | sudo apt-key add -

3. Ubuntu 리포지토리를 업데이트/새로 고침하고 모든 패키지를 최신 버전으로 업그레이드합니다.

sudo apt update
sudo apt -y upgrade

4. 그 후 아래의 apt 명령을 사용하여 podman을 설치합니다.

sudo apt install podman

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

5. 설치가 완료되면 다음 명령을 사용하여 podman 버전을 확인합니다.

podman version

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

볼 수 있듯이 Linux 아키텍처 amd64(64비트)용 Go 1.16으로 컴파일된 podman v3.3.1을 설치했습니다.

새 사용자 생성 및 hello-world 컨테이너 실행

Podman을 사용하면 루트 권한 없이 사용자로 컨테이너를 실행할 수 있습니다. 이 단계에서는 새 사용자를 추가하고 Docker 이미지를 기반으로 컨테이너 hello-world를 실행합니다.

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

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

사용자 johndoe의 새 비밀번호를 입력하십시오.

2. 그런 다음 johndoe 사용자로 로그인하고 Docker 이미지 hello-world를 기반으로 컨테이너를 실행합니다.

사용자 johndoe로 로그인합니다.

su - johndoe

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

podman run hello-world

어떤 컨테이너 레지스트리를 사용할 것인지 묻는 메시지가 표시되고 docker.io 컨테이너 레지스트리를 선택하면 아래와 유사한 출력이 표시됩니다.

3. 로컬 머신에서 컨테이너와 이미지를 확인하려면 아래 명령을 실행합니다.

podman ps -a
podman images

새 컨테이너가 생성되고 현재 상태가 Exited임을 확인할 수 있습니다. 컨테이너는 hello-world Docker 이미지를 기반으로 합니다.

Podman 기본 사용법

이 가이드에서는 podman을 사용하여 컨테이너, 이미지 및 볼륨을 관리하는 방법을 배웁니다. 컨테이너 관리를 위한 podman의 기본 명령어를 배우게 되며, 본 가이드에서 사용할 명령어는 Docker CLI 명령어와 100% 동일합니다.

1. podman과 호환되는 컨테이너 이미지를 찾으려면 아래 podman 명령을 실행합니다.

podman search nginx

그러면 기본 Docker 이미지 레지스트리 및 Quay 이미지 레지스트리의 컨테이너 이미지 목록이 표시됩니다.

Docker 레지스트리에서 컨테이너 이미지 nginx를 선택하고 아래 podman 명령을 사용하여 로컬 머신에 다운로드합니다.

podman pull nginx:alpine

컨테이너 레지스트리 docker.io를 선택하면 Nginx 컨테이너 이미지에 대한 다운로드 프로세스가 시작됩니다.

2. 로컬 머신에서 사용 가능한 컨테이너 이미지를 확인하려면 아래 podman 명령을 실행합니다.

podman images

그러면 hello-world 및 nginx 이미지라는 두 개의 이미지가 표시됩니다.

3. 다음으로 nginx:alpine 이미지를 기반으로 새 컨테이너를 시작하고 실행하려면 아래와 같이 run 옵션을 사용하여 podman 명령을 실행합니다.

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

알아야 할 몇 가지 옵션:

  • -i 또는 --interactive - 연결되지 않은 경우에도 컨테이너 STDIN을 열어 둡니다.
  • -t 또는 --tty - 터미널을 컨테이너의 STDIN 및 STDOUT과 연결하는 의사 터미널을 할당합니다.\n
  • --rm - 컨테이너가 종료되거나 중지되면 자동으로 컨테이너를 제거합니다.\n
  • -d - 백그라운드에서 컨테이너를 실행하고 실행 후 컨테이너를 분리합니다.\n
  • -p 8080:80 - 컨테이너와 호스트 시스템 간의 포트를 매핑합니다. 컨테이너의 포트 80은 호스트 시스템 포트 8080에 매핑됩니다.\n
  • --name web - 새 컨테이너 이름을 web으로 지정합니다.\n
  • nginx:alpine - 우리가 사용하는 이미지는 nginx:alpine입니다.\n

실행 중인 컨테이너의 임의의 문자열과 번호가 표시됩니다. 아래 podman 명령을 사용하여 실행 중인 컨테이너를 확인합니다.

podman ps

아래와 같이 출력이 표시됩니다.

컨테이너 상태는 Up이고 호스트 시스템에서 포트 TCP 포트 8080을 노출합니다.

웹 브라우저를 열고 아래와 같이 포트 8080으로 서버 IP 주소를 방문하십시오.

그러면 nginx 컨테이너의 기본 index.html 수명이 표시됩니다.

4. 또한 아래와 같이 로그 옵션을 사용하여 컨테이너의 로그를 확인할 수 있습니다.

podman logs web

또는 아래와 같이 --tail 옵션으로 컨테이너 로그의 마지막 번호 라인을 지정할 수 있습니다.

podman logs --tail 10 web

5. 이제 아래와 같이 podman 옵션 stop을 사용하여 실행 중인 컨테이너를 중지할 수 있습니다.

podman stop web

컨테이너 웹이 중지됩니다. 아래 명령어로 확인해보세요.

podman ps
podman ps -a

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

podman 명령에서 --rm 옵션을 사용하고 있기 때문에 컨테이너 웹이 중지되고 자동으로 삭제됩니다.

6. 다음으로 사용자 지정 볼륨을 사용하여 새 컨테이너에서 기본 index.html을 변경하는 방법을 배웁니다.

다음 명령을 사용하여 새 디렉터리 ~/data 및 index.html 파일을 만듭니다.

mkdir -p ~/data/
nano ~/data/index.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>

Ctrl+x 버튼을 누르고 y를 입력한 다음 Enter 키를 눌러 구성을 저장하고 종료합니다.

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

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

알아야 할 옵션:

  • -v - 컨테이너의 볼륨을 지정합니다. ~/data 디렉터리는 새 컨테이너 디렉터리 /usr/share/nginx/html에 마운트됩니다.

이제 다음 명령을 실행하여 실행 중인 컨테이너를 확인합니다.

podman ps

Up 상태에서 새 컨테이너 웹이 표시됩니다.

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

그리고 상단에 생성한 사용자 정의 index.html 페이지가 표시됩니다. 이는 ~/data 디렉토리가 웹 컨테이너에 마운트되었음을 의미합니다.

7. 다음으로 exec 옵션을 사용하여 실행 중인 컨테이너에 로그인하고 sh 셸을 실행할 수 있습니다.

다음 명령을 사용하여 컨테이너 웹이 실행 중인지 확인합니다.

podman ps

이제 아래의 podman 명령을 실행하여 컨테이너 웹에 로그인합니다.

podman exec -it web /bin/sh

컨테이너 웹의 호스트 이름을 확인하십시오.

hostname

컨테이너 웹의 IP 주소와 라우팅 테이블을 확인합니다.

ip a
route -n

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

8. 이제 다음 명령을 사용하여 환경을 정리합니다.

아래 podman 명령을 사용하여 컨테이너 웹을 중지합니다.

podman stop web

아래 podman 명령을 사용하여 종료됨 상태의 모든 컨테이너를 제거하십시오.

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

결론

축하합니다! Ubuntu 20.04 시스템에 Podman을 성공적으로 설치했습니다. 또한 컨테이너 이미지 다운로드, 컨테이너 실행, 컨테이너 상태 확인, 로그, 볼륨 관리를 위한 podman 기본 사용법을 배웠습니다. 다음 단계에서는 애플리케이션을 컨테이너 레지스트리에 푸시/업로드하기 위해 OCI 사양으로 사용자 지정 이미지를 만들 수 있습니다.