RHEL8からDockerコンテナーエンジン、Dockerコマンド等は無くなり、サポート対象外になっています。そのクローンOSであるCentOS8も同等であります。
デフォルト状態では、yum、dnfでインストールしようとしてもリポジトリにDockerが無いことも確認できます。
RedHatとしては今後はpodmanを推奨のようです。
そんな中、CentOS8でDockerを稼働させる必要に迫られたので、その手順をまとめておくことにします。(自己責任の範囲)
CentOS8でDockerを稼働させる参考サイトは結構ありましたが、以下サイトを参考にさせてもらいました。感謝致します。
CentOS8にDockerをインストール。名前解決できなかったのが解消した。
検証環境は以下となります。
- VirtualBox Version6.1.2 r135662
- CentOS Linux release 8.1.1911 (Core)
- kernel 4.18.0-147.5.1.el8_1.x86_64
podmanアンインストール
本環境ではデフォルト状態でpodmanがインストールされていたのでアンインストールします。
# dnf -y remove podman
モジュラーの依存に関する問題:
問題 1: conflicting requests
- nothing provides module(perl:5.26) needed by module perl-DBD-SQLite:1.58:8010020191114033549:073fa5fe-0.x86_64
問題 2: conflicting requests
- nothing provides module(perl:5.26) needed by module perl-DBI:1.641:8010020191113222731:16b3ab4d-0.x86_64
依存関係が解決しました。
=============================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
=============================================================================================================================================================
削除中:
podman x86_64 1.6.4-2.module_el8.1.0+272+3e64ee36 @AppStream 57 M
依存関係パッケージの削除:
cockpit-podman noarch 11-1.module_el8.1.0+272+3e64ee36 @AppStream 4.0 M
未使用の依存関係の削除:
conmon x86_64 2:2.0.6-1.module_el8.1.0+272+3e64ee36 @AppStream 83 k
libvarlink x86_64 18-3.el8 @anaconda 129 k
podman-manpages noarch 1.6.4-2.module_el8.1.0+272+3e64ee36 @AppStream 137 k
トランザクションの概要
=============================================================================================================================================================
削除 5 パッケージ
解放された容量: 62 M
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
scriptletの実行中: cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/1
削除 : cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/5
削除 : podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 2/5
scriptletの実行中: podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 2/5
削除 : podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch 3/5
削除 : conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 4/5
削除 : libvarlink-18-3.el8.x86_64 5/5
scriptletの実行中: libvarlink-18-3.el8.x86_64 5/5
検証 : cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/5
検証 : conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 2/5
検証 : libvarlink-18-3.el8.x86_64 3/5
検証 : podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 4/5
検証 : podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch 5/5
削除しました:
podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch
conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 libvarlink-18-3.el8.x86_64
podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch
完了しました!
Dockerインストール
リポジトリ追加
dnfコマンドでDockerをインストールしてもパッケージが無いと表示されるので、まずはリポジトリを追加します。
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
repo の追加: https://download.docker.com/linux/centos/docker-ce.repo
Dockerインストール
dnfコマンドで普通にインストールしようとすると依存関係の問題でインストールできません。一旦ここでは「--nobest」オプションを指定して強制的にインストールを行います。
# dnf -y install --nobest docker-ce docker-ce-cli
CentOS-8 - AppStream 11 kB/s | 4.3 kB 00:00
CentOS-8 - Base 8.0 kB/s | 3.8 kB 00:00
CentOS-8 - Extras 2.4 kB/s | 1.5 kB 00:00
Docker CE Stable - x86_64 53 kB/s | 21 kB 00:00
依存関係が解決しました。
問題: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
=============================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
=============================================================================================================================================================
インストール:
docker-ce x86_64 3:18.09.1-3.el7 docker-ce-stable 19 M
docker-ce-cli x86_64 1:19.03.6-3.el7 docker-ce-stable 40 M
依存関係のインストール:
libcgroup x86_64 0.41-19.el8 BaseOS 70 k
containerd.io x86_64 1.2.0-3.el7 docker-ce-stable 22 M
壊れた dependencies のパッケージをスキップします:
docker-ce x86_64 3:19.03.6-3.el7 docker-ce-stable 24 M
トランザクションの概要
=============================================================================================================================================================
インストール 4 パッケージ
スキップ 1 パッケージ
ダウンロードサイズの合計: 80 M
インストール済みのサイズ: 338 M
パッケージのダウンロード:
(1/4): libcgroup-0.41-19.el8.x86_64.rpm 353 kB/s | 70 kB 00:00
(2/4): containerd.io-1.2.0-3.el7.x86_64.rpm 6.2 MB/s | 22 MB 00:03
(3/4): docker-ce-cli-19.03.6-3.el7.x86_64.rpm 9.4 MB/s | 40 MB 00:04
(4/4): docker-ce-18.09.1-3.el7.x86_64.rpm 3.6 MB/s | 19 MB 00:05
-------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 14 MB/s | 80 MB 00:05
警告: /var/cache/dnf/docker-ce-stable-091d8a9c23201250/packages/containerd.io-1.2.0-3.el7.x86_64.rpm: ヘッダー V4 RSA/SHA512 Signature、鍵 ID 621e9f35: NOKEY
Docker CE Stable - x86_64 13 kB/s | 1.6 kB 00:00
GPG 鍵 0x621E9F35 をインポート中:
Userid : "Docker Release (CE rpm) <docker@docker.com>"
Fingerprint: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
From : https://download.docker.com/linux/centos/gpg
鍵のインポートに成功しました
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : docker-ce-cli-1:19.03.6-3.el7.x86_64 1/4
scriptletの実行中: docker-ce-cli-1:19.03.6-3.el7.x86_64 1/4
インストール中 : containerd.io-1.2.0-3.el7.x86_64 2/4
scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/4
scriptletの実行中: libcgroup-0.41-19.el8.x86_64 3/4
インストール中 : libcgroup-0.41-19.el8.x86_64 3/4
scriptletの実行中: libcgroup-0.41-19.el8.x86_64 3/4
scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 4/4
インストール中 : docker-ce-3:18.09.1-3.el7.x86_64 4/4
scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 4/4
検証 : libcgroup-0.41-19.el8.x86_64 1/4
検証 : containerd.io-1.2.0-3.el7.x86_64 2/4
検証 : docker-ce-3:18.09.1-3.el7.x86_64 3/4
検証 : docker-ce-cli-1:19.03.6-3.el7.x86_64 4/4
インストール済み:
docker-ce-3:18.09.1-3.el7.x86_64 docker-ce-cli-1:19.03.6-3.el7.x86_64 libcgroup-0.41-19.el8.x86_64 containerd.io-1.2.0-3.el7.x86_64
スキップしました:
docker-ce-3:19.03.6-3.el7.x86_64
完了しました!
リポジトリ上、docker-ceの最新バージョン(2020年2月)は19.03.6ですが、18.09がインストールされます。そして、containerd.ioについては、最新バージョン(2020年2月)は1.2.10となりますが、1.2.0-3がインストールされます。
「docker-ce-3:19.03.6-3.el7.x86_64」をインストールするには、「containerd.io-1.2.2-3.el7.x86_64」以上が必要となるが、それが無いため依存関係を考慮し、18.09のdocker-ceと1.2.0-3のcontainerd.ioの組み合わせとなるようです。
この状態のままだと、「dnf upgrade」コマンドを実行すると以下のエラーとなります。
# dnf upgrade
メタデータの期限切れの最終確認: 0:28:08 時間前の 2020年02月21日 01時28分55秒 に実施しました。
エラー:
問題: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best update candidate for package docker-ce-3:18.09.1-3.el7.x86_64
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
CentOS7のリポジトリを利用して、containerd.ioをアップデートします。
# dnf -y update https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm
メタデータの期限切れの最終確認: 0:30:47 時間前の 2020年02月21日 01時28分55秒 に実施しました。
containerd.io-1.2.10-3.2.el7.x86_64.rpm 8.8 MB/s | 23 MB 00:02
依存関係が解決しました。
=============================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
=============================================================================================================================================================
アップグレード:
containerd.io x86_64 1.2.10-3.2.el7 @commandline 23 M
置き換え runc.x86_64 1.0.0-64.rc9.module_el8.1.0+272+3e64ee36
トランザクションの概要
=============================================================================================================================================================
アップグレード 1 パッケージ
合計サイズ: 23 M
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
scriptletの実行中: containerd.io-1.2.10-3.2.el7.x86_64 1/1
アップグレード中 : containerd.io-1.2.10-3.2.el7.x86_64 1/3
scriptletの実行中: containerd.io-1.2.10-3.2.el7.x86_64 1/3
scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/3
整理 : containerd.io-1.2.0-3.el7.x86_64 2/3
scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/3
廃止 : runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3
scriptletの実行中: runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3
検証 : containerd.io-1.2.10-3.2.el7.x86_64 1/3
検証 : containerd.io-1.2.0-3.el7.x86_64 2/3
検証 : runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3
アップグレード済み:
containerd.io-1.2.10-3.2.el7.x86_64
完了しました!
docker-ceのアップデートを行います。
# dnf -y update docker-ce
メタデータの期限切れの最終確認: 0:35:03 時間前の 2020年02月21日 01時28分55秒 に実施しました。
依存関係が解決しました。
=============================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
=============================================================================================================================================================
アップグレード:
docker-ce x86_64 3:19.03.6-3.el7 docker-ce-stable 24 M
トランザクションの概要
=============================================================================================================================================================
アップグレード 1 パッケージ
ダウンロードサイズの合計: 24 M
パッケージのダウンロード:
docker-ce-19.03.6-3.el7.x86_64.rpm 9.5 MB/s | 24 MB 00:02
-------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 9.5 MB/s | 24 MB 00:02
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
scriptletの実行中: docker-ce-3:19.03.6-3.el7.x86_64 1/1
アップグレード中 : docker-ce-3:19.03.6-3.el7.x86_64 1/2
scriptletの実行中: docker-ce-3:19.03.6-3.el7.x86_64 1/2
scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 2/2
/usr/bin/dockerd は dockerd の為の互換用として設定されていません。
整理 : docker-ce-3:18.09.1-3.el7.x86_64 2/2
scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 2/2
検証 : docker-ce-3:19.03.6-3.el7.x86_64 1/2
検証 : docker-ce-3:18.09.1-3.el7.x86_64 2/2
アップグレード済み:
docker-ce-3:19.03.6-3.el7.x86_64
完了しました!
Dockerの自動起動を有効化します。
# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
Dockerを起動します。
# systemctl start docker
「docker version」コマンドを実行してみます。
# docker version
Client: Docker Engine - Community
Version: 19.03.6
API version: 1.40
Go version: go1.12.16
Git commit: 369ce74a3c
Built: Thu Feb 13 01:29:29 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.6
API version: 1.40 (minimum version 1.12)
Go version: go1.12.16
Git commit: 369ce74a3c
Built: Thu Feb 13 01:28:07 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
「docker info」コマンドを実行してみます。
# docker info
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.6
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.18.0-147.5.1.el8_1.x86_64
Operating System: CentOS Linux 8 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 3.692GiB
Name: localhost.localdomain
ID: 73MA:7GEH:Z4TQ:V4QU:O5JB:4DNI:R4LO:HMXO:GO2E:BSPN:NAKZ:2XFP
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
アップグレードコマンドを実行してもエラーが出なくなりました。
# dnf upgrade
メタデータの期限切れの最終確認: 0:38:50 時間前の 2020年02月21日 01時28分55秒 に実施しました。
依存関係が解決しました。
行うべきことはありません。
完了しました!
firewalldの変更
CentOS8の場合、デフォルトの状態ではDockerビルド中のdnfやyum等で名前解決ができません。
一つの回避方法としては、「docker container build」で「--network host」を指定して実行します。もう一つの回避方法は、以下firewalldでNAPTします。
# firewall-cmd --add-masquerade --permanent
success
# firewall-cmd --reload
success
Docker Composeインストール
jqのインストール
# dnf -y install jq
メタデータの期限切れの最終確認: 0:03:02 時間前の 2020年02月21日 03時25分28秒 に 実施しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
jq x86_64 1.5-12.el8 AppStream 161 k
依存関係のインストール:
oniguruma x86_64 6.8.2-1.el8 AppStream 188 k
トランザクションの概要
================================================================================
インストール 2 パッケージ
ダウンロードサイズの合計: 349 k
インストール済みのサイズ: 1.0 M
パッケージのダウンロード:
(1/2): jq-1.5-12.el8.x86_64.rpm 1.9 MB/s | 161 kB 00:00
(2/2): oniguruma-6.8.2-1.el8.x86_64.rpm 1.6 MB/s | 188 kB 00:00
--------------------------------------------------------------------------------
合計 682 kB/s | 349 kB 00:00
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : oniguruma-6.8.2-1.el8.x86_64 1/2
scriptletの実行中: oniguruma-6.8.2-1.el8.x86_64 1/2
インストール中 : jq-1.5-12.el8.x86_64 2/2
scriptletの実行中: jq-1.5-12.el8.x86_64 2/2
検証 : jq-1.5-12.el8.x86_64 1/2
検証 : oniguruma-6.8.2-1.el8.x86_64 2/2
インストール済み:
jq-1.5-12.el8.x86_64 oniguruma-6.8.2-1.el8.x86_64
完了しました!
最新版のDocker Conposeをインストールするスクリプト作成
# vim docker-compose-install.sh
-------------------------------------------------------------------------------------------
#!/bin/bash
compose_version=$(curl https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)
output='/usr/local/bin/docker-compose'
curl -L https://github.com/docker/compose/releases/download/$compose_version/docker-compose-$(uname -s)-$(uname -m) -o $output
chmod +x $output
echo $(docker-compose --version)
-------------------------------------------------------------------------------------------
Esc + :wq
実行権付与します。
# chmod +x docker-compose-install.sh
スクリプト実行します。最後にdocker-composeのバージョンが表示されます。
# sh docker-compose-install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19167 100 19167 0 0 63049 0 --:--:-- --:--:-- --:--:-- 63049
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 100 617 0 0 2730 0 --:--:-- --:--:-- --:--:-- 2730
100 16.3M 100 16.3M 0 0 3849k 0 0:00:04 0:00:04 --:--:-- 4486k
docker-compose version 1.25.4, build 8d51620a
依存関係を無視して強制インストールした状態で、Docker Composeを利用してWordPress環境を構築した際に、WordPressのコンテナーからMySQLのコンテナーへの接続における内部の名前解決ができないなど不具合がありましたが、上記手順で解決できました。
今後のdocker-ceのアップデート運用も検討が必要となりそうな感じですね。。
RHEL8からpodman推奨となるとDocker利用はUbuntuで利用するケースが多くなるかもしれませんが、それに代わるpodmanについても色々と追っていきたいと思いました。