自宅サーバを CentOS 7 から CentOS 8 へバージョンアップしました。
その際、使っていた Docker の導入にてこずったので、他の方の一助になればと思い、メモを残します。
なお、結局のところ Docker ではなく、代替パッケージの Podman を導入しています。
Podman の導入手順をご覧になりたい方は、目次の「Podman導入」からご参照ください。
目次
環境
# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
失敗編(Dockerレポジトリ無し)
CentOS 7 と同じ感覚で、CentOS 8 へ導入しようとして躓きました。
ちなみに、CentOS 7 への導入手順は以前記事にしています。
インストールしてみる
今回、CentOS 8 インストーラーで「最小限のインストール」を選択して(しかもオプションをすべて外した状態で)インストールしています。
そのため、アップデートに加えて、今後使うであろう gcc なども事前に導入しておきます。
# yum update
# yum groupinstall "Development Tools"
前回の記事同様に、公式サイトの説明通り Docker を導入します。
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
repo の追加: https://download.docker.com/linux/centos/docker-ce.repo
ここまでは良かったのですが、yum makecache でエラーになりました。
どうも構文が変わった様子。
# yum makecache fast
yum makecache: error: argument timer: invalid choice: 'fast' (choose from 'timer')
念のため、キャッシュをクリーンしてから、オプションを削って実行します。
# yum clean all
# yum makecache
CentOS-8 - AppStream 2.9 MB/s | 7.0 MB 00:02
CentOS-8 - Base 3.6 MB/s | 2.2 MB 00:00
CentOS-8 - Extras 18 kB/s | 6.5 kB 00:00
Docker CE Stable - x86_64 39 kB/s | 23 kB 00:00
メタデータキャッシュを作成しました。
続いて、本題の Docker の導入です。
# yum install docker-ce
メタデータの期限切れの最終確認: 0:01:01 時間前の 2020年05月28日 14時23分23秒 に実施しました。
エラー:
問題: package docker-ce-3:19.03.9-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.13-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.13-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' を追加して、最適候補のパッケージのみを使用しないでください)
いきなりエラーになりました。
パッケージスキップの案内が出ますが(スキップすると後でどんな不具合が出るのか不明なので)指示には従わず、バージョンを指定して再度トライしてみます。
なお、下記は最新バージョン 19.03.9 の場合です。
# yum install docker-ce-19.03.9.ce
CentOS-8 - AppStream 7.6 kB/s | 4.3 kB 00:00
CentOS-8 - Base 11 kB/s | 3.9 kB 00:00
CentOS-8 - Extras 2.6 kB/s | 1.5 kB 00:00
Docker CE Stable - x86_64 56 kB/s | 3.5 kB 00:00
一致した引数がありません: docker-ce-19.03.9.ce
エラー: 一致するものが見つかりません: docker-ce-19.03.9.ce
なんかおかしいなと思い、上記で導入済みのレポジトリファイルを除いてみると、驚愕の事実が!!!
CentOS 7 で記述されている。。。
- /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://download.docker.com/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://download.docker.com/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://download.docker.com/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://download.docker.com/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
Dockerの導入はCentOS 8からは面倒
どうも、CentOS 8 への Docker インストールはちょっと面倒な感じ。
Docker を本番環境で使っており、すぐに代替ルートへ行けない場合はしかたないとして、そうでなければ(CentOS 8 からレポジトリに加わった)Podman をインストールしたほうがスムーズに作業が出来ます。
パッと調べてみたところ、Podman はこんな感じ。
- Docker 互換のコンテナエンジン
パッケージ名はなんと「podman-docker」。 - Red Hat によって運営されている
- オープンソースで GitHub でコード公開されている
- CentOS 8 から Docker に代わり、レポジトリに入る
レポジトリ削除
必要に応じて、先程導入したレポジトリを削除します。
# rm /etc/yum.repos.d/docker-ce.repo
Podman導入
気を取り直して、Docker 互換コンテナエンジン Podman を導入します。
Podmanは Red Hat が開発した Docker 互換のコンテナ管理ツールで、Docker とほぼ同じコマンドをサポートています。
Red Hat Enterprise Linux 8 から、コンテナ管理ツールとして(Docker の代わりに)採用されています。
どの程度、Docker と同じかも含めて操作してみたいと思います。
インストール
yum なので、必要パッケージがあれば引っ張ってきてくれます。
# yum install podman-docker -y
バージョン確認
コマンドにも互換性があり、podman, docker どちらでも同じ結果が返ってきます。
# podman -v
podman version 1.6.4
# docker -v
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 1.6.4
Podmanでコンテナ作成
軽くコンテナを作成してみます。
- 公式イメージを pull(取得)
# docker pull nextcloud
- pull したイメージを確認
# docker images Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nextcloud latest ca728001dde3 12 days ago 749 MB
- ポート番号・ホスト名・コンテナ名を指定して、run(起動)
# docker run -d -p 8081:80 --hostname nchost --name nchost nextcloud Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. 53ee14d58958381b04d27ab6e97dbb7cf3866b3d71026c8c0b3c72db5534d1a1
- 起動を確認
# docker ps Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 53ee14d58958 docker.io/library/nextcloud:latest apache2-foregroun... 7 seconds ago Up 5 seconds ago 0.0.0.0:8081->80/tcp nchost
- コンテナにログイン
試しにコンテナにログインしてみたところ、Docker と同じ構文で問題ありませんでした。# docker exec -it 53ee14d58958 bash Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. root@nchost:/var/www/html# exit