RHEL8 버전 에서 Docker install 하는 방법에 대해 확인해 보겠습니다. 레드햇에서는 RHEL8 이상부터 Docker 지원을 중단합니다. 그러나 Docker는 OpenSource로 제공되는 제품이기 때문에 누구나 다운로드해 사용할 수 있습니다. 다만 Docker 지원을 중단한다고 하는 건 RedHat 쪽에서 RHEL8 버전용 Docker RPM 패키지 파일을 만들지 않겠다는 것입니다. 레드햇에서 제공하는 패키지가 아니기 때문에 Docker 사용 중 발생한 이슈로부터 기술 지원을 받을 수 없는 단점이 있습니다.
운영 환경에서 기술 지원을 받으면서 Container를 사용하기 위해서는 Docker 대안으로 Opensource 제품인 Podman을 사용할 수 있습니다.
환경
RHEL 8
Docker Install
1. 레포 설정
RedHat의 레포가 없기 때문에 대안으로 패키지를 entOS 에서 가져와야 합니다. 다행히 CentOS용 Docker 패키지가 제공되기 때문에 레포 설정만으로 간단하게 설치를 진행할 수 있습니다. 레포 설정이 궁금하다면 LocalRepo을 참조하면 됩니다.
아래는 Docker에서 제공하는 CentOs 용 레포 주소입니다. https://download.docker.com/linux/centos/
해당 주소를 이용해서 “docker.repo”라는 repo 파일을 하나 생성합니다.
- 레포 파일 생성
[root@localhost ~]# cat /etc/yum.repos.d/docker.repo
[docker]
name=docker
baseurl=https://download.docker.com/linux/centos/8/x86_64/stable/
gpgcheck=0
enabled=1
- 설정된 레포 확인 yum repolist -v 명령으로 설정한 레포에서 패키지 파일을 정상적으로 검출하는지 테스트할 수 있습니다.
[root@localhost ~]# yum repolist -v
Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download, generate_comple tion_cache, groups-manager, needs-restarting, playground, product-id, repoclosure, repodiff, repograph, repoma nage, reposync, subscription-manager, uploadprofile
Updating Subscription Management repositories.
Unable to read consumer identity
...
Repo-id : docker
Repo-name : docker
Repo-revision : 1705314521
Repo-updated : Mon 15 Jan 2024 07:28:41 PM KST
Repo-pkgs : 191
Repo-available-pkgs: 191
Repo-size : 3.5 G
Repo-baseurl : <https://download.docker.com/linux/centos/8/x86_64/stable/>
Repo-expire : 172,800 second(s) (last: Wed 17 Jan 2024 09:44:17 AM KST)
Repo-filename : /etc/yum.repos.d/docker.repo
Total packages: 7,936
2. Docker 패키지 설치
Docker Engine, Containerd, Docker-compose의 최신 버전을 설치합니다. 버전을 지정하시고 싶으신 분들은 Docker Documentation을 참조하실 수 있습니다.
- Docker Package Install
OS에서 제공하는 추가 패키지가 필요할 수 있습니다. 따라서 OS 이미지 Local Repo도 설정해야 문제없이 설치가 진행됩니다.
[root@localhost ~]# dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register .
Last metadata expiration check: 0:00:44 ago on Wed 17 Jan 2024 09:44:18 AM KST.
Dependencies resolved.
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
containerd.io x86_64 1.6.27-3.1.el8 docker 35 M
docker-buildx-plugin x86_64 0.11.2-1.el8 docker 13 M
docker-ce x86_64 3:24.0.7-1.el8 docker 24 M
docker-ce-cli x86_64 1:24.0.7-1.el8 docker 7.2 M
docker-compose-plugin x86_64 2.21.0-1.el8 docker 13 M
Installing dependencies:
checkpolicy x86_64 2.9-1.el8 BaseOS 346 k
container-selinux noarch 2:2.158.0-1.module+el8.4.0+10607+f4da7515 AppStream 51 k
fuse-common x86_64 3.2.1-12.el8 BaseOS 21 k
fuse-overlayfs x86_64 1.4.0-2.module+el8.4.0+10607+f4da7515 AppStream 72 k
fuse3 x86_64 3.2.1-12.el8 BaseOS 50 k
fuse3-libs x86_64 3.2.1-12.el8 BaseOS 94 k
libcgroup x86_64 0.41-19.el8 BaseOS 70 k
libslirp x86_64 4.3.1-1.module+el8.4.0+10607+f4da7515 AppStream 69 k
policycoreutils-python-utils noarch 2.9-14.el8 BaseOS 252 k
python3-audit x86_64 3.0-0.17.20191104git1c2f876.el8 BaseOS 86 k
python3-libsemanage x86_64 2.9-6.el8 BaseOS 127 k
python3-policycoreutils noarch 2.9-14.el8 BaseOS 2.2 M
python3-setools x86_64 4.3.0-2.el8 BaseOS 626 k
slirp4netns x86_64 1.1.8-1.module+el8.4.0+10607+f4da7515 AppStream 51 k
tar x86_64 2:1.30-5.el8 BaseOS 838 k
Installing weak dependencies:
docker-ce-rootless-extras x86_64 24.0.7-1.el8 docker 4.9 M
Enabling module streams:
container-tools rhel8
...
Complete!
3. Docker 데몬 실행 및 확인
- Docker 버전 확인
[root@localhost ~]# docker --version
Docker version 24.0.7, build afdd53b
- Docker 데몬 실행
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-01-17 09:47:30 KST; 8s ago
Docs: <https://docs.docker.com>
Main PID: 15716 (dockerd)
Tasks: 8
Memory: 26.3M
CGroup: /system.slice/docker.service
└─15716 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Jan 17 09:47:29 localhost.localdomain systemd[1]: Starting Docker Application Container Engine...
Jan 17 09:47:29 localhost.localdomain dockerd[15716]: time="2024-01-17T09:47:29.572536918+09:00" level=info msg=">
Jan 17 09:47:29 localhost.localdomain dockerd[15716]: time="2024-01-17T09:47:29.594184251+09:00" level=info msg=">
Jan 17 09:47:30 localhost.localdomain dockerd[15716]: time="2024-01-17T09:47:30.627630982+09:00" level=info msg=">
Jan 17 09:47:30 localhost.localdomain dockerd[15716]: time="2024-01-17T09:47:30.802197604+09:00" level=info msg=">
Jan 17 09:47:30 localhost.localdomain dockerd[15716]: time="2024-01-17T09:47:30.819245592+09:00" level=info msg=">
Jan 17 09:47:30 localhost.localdomain dockerd[15716]: time="2024-01-17T09:47:30.819379019+09:00" level=info msg=">
Jan 17 09:47:30 localhost.localdomain dockerd[15716]: time="2024-01-17T09:47:30.847685290+09:00" level=info msg=">
Jan 17 09:47:30 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
4. 컨테이너 기동 테스트
- Apache 서비스 기동
[root@localhost ~]# docker run -d -p 8080:80 docker.io/library/httpd
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
2f44b7a888fa: Pull complete
5abb3599da34: Pull complete
4f4fb700ef54: Pull complete
fa608a886227: Pull complete
afe6bbf00437: Pull complete
fd0ef2a49677: Pull complete
Digest: sha256:7765977cf2063fec486b63ddea574faf8fbed285f2b17020fa7ef70a4926cdec
Status: Downloaded newer image for httpd:latest
056986a13b14a7b822d0b424a96fec9d1b82f60c462d89b5b514eb305d6cc9f1
- 컨테이너 기동 확인
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
056986a13b14 httpd "httpd-foreground" 2 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp nifty_pascal
- 컨테이너 연결 테스트
[root@localhost ~]# curl localhost:8080
<html><body><h1>It works!</h1></body></html>
마치며
RHEL8 버전에서 Docker install 및 사용하는 방법에 대해서 확인했습니다. RedHat에서는 Docker와 사용 방법이 비슷한 제품인 Podman을 공식적으로 지원하고 있습니다.
참조
https://access.redhat.com/discussions/6249651