RHEL 기반의 Base Container 이미지를 만드는 방법에 대해서 설명합니다.
본 글은 RHEL/CentOS 환경에서 작업 하였습니다.

1. 작업 디렉토리 생성

작업을 위한 디렉토리를 생성 합니다.
[root@ruo91 ~]# mkdir -p /opt/{iso,rhel}
[root@ruo91 ~]# export target=/opt/rhel

2. RPM DB 루트 디렉토리 생성

RPM 정보를 저장하기 위한 Database를 초기화 합니다.
[root@ruo91 ~]# rpm --root ${target} --initdb

3. RHEL ISO 마운트

각 버전에 맞는 ISO 파일을 /mnt 디렉토리에 마운트 합니다.
3.1. RHEL 7.x
[root@ruo91 ~]# mount -o loop /opt/iso/rhel-server-7.8-x86_64-dvd.iso /mnt
3.2. RHEL 8.x
[root@ruo91 ~]# mount -o loop /opt/iso/rhel-8.2-x86_64-dvd.iso /mnt

4. RedHat Release Server RPM 설치

Base 이미지를 만들기 위해 release server rpm을 설치 합니다.
4.1. RHEL 7.x
[root@ruo91 ~]# rpm --root ${target} -ivh /mnt/Packages/redhat-release-*.rpm
4.2. RHEL 8.x
[root@ruo91 ~]# rpm --root ${target} -ivh /mnt/BaseOS/Packages/redhat-release-8*.rpm

5. Local Yum Repo 설정

패키지 설치를 위해 local yum repo를 설정 합니다.
5.1. RHEL 7.x
[root@ruo91 ~]# mkdir -p ${target}/etc/yum.repos.d/
[root@ruo91 ~]# cat << EOF > ${target}/etc/yum.repos.d/rhel.repo
[rhel-7-server-rpms]
name=rhel-7-server-rpms
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF

5.2. RHEL 8.x
[root@ruo91 ~]# rm -f ${target}/etc/yum.repos.d/*.repo
[root@ruo91 ~]# cat << EOF > ${target}/etc/yum.repos.d/rhel.repo
[rhel-8-for-x86_64-baseos-rpms]
name=rhel-8-for-x86_64-baseos-rpms
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0

[rhel-8-for-x86_64-appstream-rpms]
name=rhel-8-for-x86_64-appstream-rpms
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
EOF

6. Import GPG keys

local yum repo를 통해 패키지 설치시 필요한 gpg key 파일을 가져 옵니다.
[root@ruo91 ~]# rpm --root ${target} --import /mnt/RPM-GPG-KEY-redhat-*

7. 필요 패키지 설치

Base 이미지 생성시 포함 할 패키지를 설치 합니다.
[root@ruo91 ~]# yum -y --installroot=${target} install \
yum subscription-manager ncurses curl vi vim nano wget git-core net-tools tmux bind-utils traceroute

8. Local Repo 삭제

기존 local yum repo는 더이상 Base 이미지에 필요하지 않으므로 파일을 삭제 합니다.
[root@ruo91 ~]# rm -f ${target}/etc/yum.repos.d/*.repo

9. Container 이미지 생성

9.1. RHEL 7.x
– Docker
[root@ruo91 ~]# tar -C ${target}/ -c . | docker import - docker.io/ruo91/rhel:78

– Podman
[root@ruo91 ~]# tar -C ${target}/ -c . | podman import - docker.io/ruo91/rhel:78

9.2. RHEL 8.x
– Docker
[root@ruo91 ~]# tar -C ${target}/ -c . | docker import - docker.io/ruo91/rhel:82

– Podman
[root@ruo91 ~]# tar -C ${target}/ -c . | podman import - docker.io/ruo91/rhel:82