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
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 로 설치된 것을 확인할 수 있음!!