본문 바로가기

컨테이너/Podman

CentOS 7 / RHEL 7에 Podman 4.x 버전 설치

Podman(Pod Manager Tool의 약어)이란?

- OCI(Open Container Initiative) 컨테이너 및 컨테이너 이미지를 사용하여 애플리케이션을 쉽게 찾고 실행하고 빌드, 공유 및 배포할 수 있도록 설계된 데몬이 없는 오픈소스 Linux 기본 도구

- Podman은 Docker와의 호환성을 목표로 하기 때문에 거의 100% CLI command가 동일

- 표준화된 컨테이너 덕분에 Podman을 사용하여 Docker Hub와 Quay.io로부터 컨테이너 이미지를 pull 또는 push하는 것이 가능

- Podman은 RedHat이 만든 Docker 런타임의 대체물로 사용이 가능

 

* Docker Desktop(데스크톱 환경에서 Docker를 사용할 수 있게 해주는 프로그램)이 유료화됨에 따라 Docker의 대체물로 podman이 부상하고 있음

alias docker=podman

특히 alias 설정을 통해 podman을 마치 docker처럼 사용할 수 있음!

 

Podman의 주요 장점

  • 루트 없는 모드(Rootless)에서 컨테이너 실행 가능
     - 추가 권한 없이 실행되므로 더 안전한 루트없는 컨테이너를 실행할 수 있음(도커에 비해 보안적 측면 강화)
  • 기본 시스템 통합
     - Podman을 사용하면 시스템 단위 파일을 생성하고 컨테이너를 시스템 서비스로 실행할 수 있음
  • 데몬이 필요 없음
     - Podman은 데몬이 필요 없기 때문에 유휴 상태에서 리소스 요구사항이 훨씬 낮음

CentOS 7 / RHEL 7에 Podman 기본 설치(Podman 4.x 설치는 조금 더 하단 참고)

- OS환경 : CentOS Linux release 7.9.2009 (Core)

- 일반적으로 OS 기본 repository에서 CentOS 7 / RHEL 7에 Podman을 설치하면 이전 버전의 소프트웨어가 설치됨

(이전 버전의 소프트웨어 podman은 1.6.4 버전이 설치되는 것을 확인)

 

1. 서버 업데이트

yum update

y

2. 사용가능한 EPEL repo가 없는 경우 아래 명령어로 설치

yum install epel-release

3. podman 설치

- RHEL / CentOS 7의 경우 기본 Extras repo에서 podman을 사용할 수 있으므로 yum install podman 명령을 사용하여 설치가 가능

yum install podman

podman version

- podman은 기본적으로 1.6.4 버전이 설치됨

- 해당 버전은 이전 버전의 소프트웨어 이므로 우리는 podman 4.x 버전을 설치하도록 한다!!

 

CentOS 7 / RHEL 7에 Podman 4.x 설치하는 방법

* root 계정 로그인이 안되어 있다면 명령어 앞에 sudo 를 붙여야함

 

1. 먼저 기존의 podman이 설치되어 있다면 제거

yum -y remove podman

2. podman 4.x 버전을 설치하기 위해 EPEL 저장소가 설치되어 있고 시스템에서 활성화 되어있는지 확인

yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

3. 시스템의 모든 패키지를 업데이트하고 재부팅 수행

yum -y update
reboot

4. 다시 서버에 연결하고 CentOS 7 / RHEL 7에 개발 도구 설치

yum -y install "@Development Tools"

5. 다른 종속성을 설치

yum install -y curl \
  gcc \
  make \
  device-mapper-devel \
  git \
  btrfs-progs-devel \
  conmon \
  containernetworking-plugins \
  containers-common \
  git \
  glib2-devel \
  glibc-devel \
  glibc-static \
  golang-github-cpuguy83-md2man \
  gpgme-devel \
  iptables \
  libassuan-devel \
  libgpg-error-devel \
  libseccomp-devel \
  libselinux-devel \
  pkgconfig \
  systemd-devel \
  autoconf \
  python3 \
  python3-devel \
  python3-pip \
  yajl-devel \
  libcap-devel

6. Go(Golang) 설치

- Go 설치 방법은 두가지가 있으며 이 글에서는 Golang 설치 프로그램을 사용하여 설치

(1. 수동설치 / 2. Golang 설치 프로그램 사용)

yum -y install wget

- Linux 시스템용 공식 Golang 설치 프로그램을 다운로드

wget https://storage.googleapis.com/golang/getgo/installer_linux

- 실행 가능하도록 권한 부여

chmod +x ./installer_linux

- 최신 Golang 설치

./installer_linux

source ~/.bash_profile

- Golang 버전 확인

 

7. runc / conmon 설치

- Conmon은 OCI 런타임을 모니터링하는데 사용되며 패키지는 시스템에 설치되어야 함

(아래 명령을 한줄씩 차례로 수행)

cd ~
git clone https://github.com/containers/conmon
cd conmon
export GOCACHE="$(mktemp -d)"
make
sudo make podman
cd ..

- conmon 버전 확인

- runc패키지도 아래 명령어를 순차적으로 수행

git clone https://github.com/opencontainers/runc.git $GOPATH/src/github.com/opencontainers/runc
cd $GOPATH/src/github.com/opencontainers/runc
make BUILDTAGS="selinux seccomp"
sudo cp runc /usr/bin/runc
cd ~/

- runc 버전 확인

8. podman용 CNI 네트워크 설정

- /etc/containers CNI 네트워크 구성 파일을 저장하는 데 사용되는 디렉토리 생성

mkdir -p /etc/containers

- 구성 샘플을 다운로드하여 생성된 디렉토리 하위 파일에 배치

curl -L -o /etc/containers/registries.conf https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
curl -L -o /etc/containers/policy.json https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json

9. CentOS 7 / RHEL 7에 Podman 4.x 설치

- 아래의 명령을 한줄씩 수행

TAG=4.1.1
rm -rf podman*
wget https://github.com/containers/podman/archive/refs/tags/v${TAG}.tar.gz

- 압축 해제

tar xvf v${TAG}.tar.gz

- podman 디렉토리로 이동하여 빌드 프로세스를 수행

(아래의 명령어를 한줄씩 수행)

cd podman*/
make BUILDTAGS="selinux seccomp"
make install PREFIX=/usr

* make BUILDTAGS="selinux seccomp" 명령어로 인해 빌드 도중 아래와 같은 에러를 만나게되었다면 pgpm 패키지를 업데이트 해주자

- pgpm 버전 업데이트

yum remove  gpgme-devel -y
yum -y install https://cbs.centos.org/kojifiles/packages/gpgme/1.7.1/0.el7.centos.1/x86_64/gpgme-1.7.1-0.el7.centos.1.x86_64.rpm
yum -y install https://cbs.centos.org/kojifiles/packages/gpgme/1.7.1/0.el7.centos.1/x86_64/gpgme-devel-1.7.1-0.el7.centos.1.x86_64.rpm

- 다시 빌드 시작 (pgpm 업데이트 후에는 에러없이 잘 돌아감)

make BUILDTAGS="selinux seccomp"
make install PREFIX=/usr

- /etc/containers/storage.conf의 override_kernel_check 구성 라인에 주석 추가

sed -ie 's/override_kernel_check/#override_kernel_check/g' /etc/containers/storage.conf

- podman version 확인

- 빌드 후에 podman 버전이 4.x 로 설치된 것을 확인할 수 있음!!