CentOS 8 から Docker がレポジトリから無くなった

自宅サーバを 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 7.6 に Docker 環境を構築する – あらいラボ

インストールしてみる

今回、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