Centos8にDockerを入れてみる

本格的にCentos8を使い始めたので、いろいろ導入してみたことを記載します。
今回はDockerについてです。

公式のインストール手順は[こちら](https://docs.docker.com/install/linux/docker-ce/centos/)から。

ちなみに公式が公開している手順はCentos7ベースです。
私が試してみた際には2か所ほど引っ掛かりました。

# Docker インストール
## 古いパッケージの削除
新規インストールの場合は飛ばしてもよいかもしれません。

```
$ sudo dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

一致した引数がありません: docker
一致した引数がありません: docker-client
一致した引数がありません: docker-client-latest
一致した引数がありません: docker-common
一致した引数がありません: docker-latest
一致した引数がありません: docker-latest-logrotate
一致した引数がありません: docker-logrotate
一致した引数がありません: docker-engine
削除対象のパッケージはありません。
依存関係が解決しました。
行うべきことはありません。
完了しました!
```

## 必要パッケージをインストールします。

```
$ sudo dnf install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

CentOS-8 - AppStream                                                               3.9 MB/s | 6.0 MB     00:01
CentOS-8 - Base                                                                    4.0 MB/s | 4.0 MB     00:01
CentOS-8 - Extras                                                                  2.5 kB/s | 2.1 kB     00:00
Extra Packages for Enterprise Linux Modular 8 - x86_64                              24 kB/s |  21 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                                     4.0 MB/s | 5.5 MB     00:01
Remi's Modular repository for Enterprise Linux 8 - x86_64                           87 kB/s | 531 kB     00:06
Safe Remi's RPM repository for Enterprise Linux 8 - x86_64                         142 kB/s | 1.4 MB     00:10
パッケージ yum-utils-4.0.8-3.el8.noarch は既にインストールされています。
パッケージ device-mapper-persistent-data-0.8.5-2.el8.x86_64 は既にインストールされています。
パッケージ lvm2-8:2.03.05-5.el8.0.1.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
```

## リポジトリを追加します。

```
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
```

Dockerをインストールします。
そして引っ掛かりました。

```
$ sudo dnf install docker-ce docker-ce-cli containerd.io
CentOS-8 - AppStream                                                                11 kB/s | 4.3 kB     00:00
CentOS-8 - Base                                                                    5.1 kB/s | 3.8 kB     00:00
CentOS-8 - Extras                                                                  3.7 kB/s | 1.5 kB     00:00
Docker CE Stable - x86_64                                                           67 kB/s |  21 kB     00:00
Extra Packages for Enterprise Linux Modular 8 - x86_64                             9.0 kB/s | 8.7 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                                      14 kB/s | 9.3 kB     00:00
Remi's Modular repository for Enterprise Linux 8 - x86_64                          3.2 kB/s | 3.5 kB     00:01
Safe Remi's RPM repository for Enterprise Linux 8 - x86_64                         2.9 kB/s | 3.0 kB     00:01
エラー:
 問題: package docker-ce-3:19.03.5-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
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加し
て、最適候補のパッケージのみを使用しないでください)

```
どうやら`package containerd.io`で列挙されたバージョンが必要なのに、インストールができなかったようです。

```
$ sudo dnf search --repo docker-ce-stable containerd.io
========================================== 名前 完全一致: containerd.io ===========================================
containerd.io.x86_64 : An industry-standard container runtime
```
検索してみるとパッケージはありました。

```
$ dnf info --repo docker-ce-stable containerd.io
利用可能なパッケージ
名前         : containerd.io
バージョン   : 1.2.10
リリース     : 3.2.el7
Arch         : x86_64
サイズ       : 23 M
ソース       : containerd.io-1.2.10-3.2.el7.src.rpm
リポジトリー : docker-ce-stable
概要         : An industry-standard container runtime
URL          : https://containerd.io
ライセンス   : ASL 2.0
説明         : containerd is an industry-standard container runtime with an emphasis on
             : simplicity, robustness and portability. It is available as a daemon for Linux
             : and Windows, which can manage the complete container lifecycle of its host
             : system: image transfer and storage, container execution and supervision,
             : low-level storage and network attachments, etc.
```
infoで見てもバージョンに問題はなさそうなんですが。。。

```
$ sudo dnf --showduplicates search containerd.io
========================================== 名前 完全一致: containerd.io ===========================================
containerd.io-1.2.0-1.2.beta.2.el7.x86_64 : An industry-standard container runtime
containerd.io-1.2.0-2.0.rc.0.1.el7.x86_64 : An industry-standard container runtime
containerd.io-1.2.0-2.2.rc.2.1.el7.x86_64 : An industry-standard container runtime
containerd.io-1.2.0-3.el7.x86_64 : An industry-standard container runtime
```
インストール可能な全バージョンを検索してみたら、containerd.io-1.2.0 しかありませんでした。
infoで出たバージョンは何だったんだろう。。。？

仕方がないので、[ここ](https://download.docker.com/linux/centos/7/x86_64/stable/Packages/)から最新パッケージを落としてきてインストールします。
参考：[CentOS8にDockerを入れる](https://qiita.com/dora_2562/items/24691d3bec4c99c1d794)

そしてまた引っ掛かりました。

```
$ wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm
$ sudo rpm -ivh containerd.io-1.2.10-3.2.el7.x86_64.rpm
error: Failed dependencies:
        container-selinux >= 2:2.74 is needed by containerd.io-1.2.10-3.2.el7.x86_64
```
container-selinux が必要ってことですね。
今のバージョンは。。。？

```
$ sudo rpm -qa | grep container-selinux
$ 
```
oh...そもそもパッケージが入っていませんでした。

containerd.ioの二の舞にならないよう、念のため全バージョンを確認しておきましょう。

```
$ sudo dnf --showduplicates search container-selinux
======================================== 名前 完全一致: container-selinux =========================================
container-selinux-2:2.107-2.module_el8.1.0+237+63e26edc.noarch : SELinux policies for container runtimes
```
バージョン問題はクリアしていますね。
インストールしましょう。

```
$ sudo dnf install container-selinux
依存関係が解決しました。
===================================================================================================================
 パッケージ                Arch           バージョン                                       リポジトリー      サイズ
===================================================================================================================
インストール:
 container-selinux         noarch         2:2.107-2.module_el8.1.0+237+63e26edc            AppStream          44 k
モジュールストリームの有効化:
 container-tools                          rhel8

トランザクションの概要
===================================================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 44 k
インストール済みのサイズ: 40 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
container-selinux-2.107-2.module_el8.1.0+237+63e26edc.noarch.rpm                    26 kB/s |  44 kB     00:01
-------------------------------------------------------------------------------------------------------------------
合計                                                                                19 kB/s |  44 kB     00:02
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                           1/1
  インストール中   : container-selinux-2:2.107-2.module_el8.1.0+237+63e26edc.noarch                            1/1
  scriptletの実行中: container-selinux-2:2.107-2.module_el8.1.0+237+63e26edc.noarch                            1/1
  検証             : container-selinux-2:2.107-2.module_el8.1.0+237+63e26edc.noarch                            1/1

インストール済み:
  container-selinux-2:2.107-2.module_el8.1.0+237+63e26edc.noarch

完了しました!

```
無事にインストールできました。
改めてcontainerd.ioをインストールします。

```
$ sudo rpm -ivh containerd.io-1.2.10-3.2.el7.x86_64.rpm
warning: containerd.io-1.2.10-3.2.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:containerd.io-1.2.10-3.2.el7     ################################# [100%]
```
こちらも無事にインストールできました。

ようやくDockerがインストールできます！

```
$ sudo dnf install docker-ce docker-ce-cli
依存関係が解決しました。
===================================================================================================================
 パッケージ                 アーキテクチャー    バージョン                     リポジトリー                  サイズ
===================================================================================================================
インストール:
 docker-ce                  x86_64              3:19.03.5-3.el7                docker-ce-stable               24 M
 docker-ce-cli              x86_64              1:19.03.5-3.el7                docker-ce-stable               39 M
依存関係のインストール:
 libcgroup                  x86_64              0.41-19.el8                    BaseOS                         70 k

トランザクションの概要
===================================================================================================================
インストール  3 パッケージ

ダウンロードサイズの合計: 64 M
インストール済みのサイズ: 273 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/3): libcgroup-0.41-19.el8.x86_64.rpm                                             54 kB/s |  70 kB     00:01
(2/3): docker-ce-19.03.5-3.el7.x86_64.rpm                                           11 MB/s |  24 MB     00:02
(3/3): docker-ce-cli-19.03.5-3.el7.x86_64.rpm                                       11 MB/s |  39 MB     00:03
-------------------------------------------------------------------------------------------------------------------
合計                                                                                15 MB/s |  64 MB     00:04
warning: /var/cache/dnf/docker-ce-stable-091d8a9c23201250/packages/docker-ce-19.03.5-3.el7.x86_64.rpm: Header V4 RS
A/SHA512 Signature, key 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
これでよろしいですか? [y/N]: y
鍵のインポートに成功しました
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                           1/1
  インストール中   : docker-ce-cli-1:19.03.5-3.el7.x86_64                                                      1/3
  scriptletの実行中: docker-ce-cli-1:19.03.5-3.el7.x86_64                                                      1/3
  scriptletの実行中: libcgroup-0.41-19.el8.x86_64                                                              2/3
  インストール中   : libcgroup-0.41-19.el8.x86_64                                                              2/3
  scriptletの実行中: libcgroup-0.41-19.el8.x86_64                                                              2/3
  インストール中   : docker-ce-3:19.03.5-3.el7.x86_64                                                          3/3
  scriptletの実行中: docker-ce-3:19.03.5-3.el7.x86_64                                                          3/3
  検証             : libcgroup-0.41-19.el8.x86_64                                                              1/3
  検証             : docker-ce-3:19.03.5-3.el7.x86_64                                                          2/3
  検証             : docker-ce-cli-1:19.03.5-3.el7.x86_64                                                      3/3

インストール済み:
  docker-ce-3:19.03.5-3.el7.x86_64      docker-ce-cli-1:19.03.5-3.el7.x86_64      libcgroup-0.41-19.el8.x86_64

完了しました!
```

さて、Dockerを起動してみましょう。

```
$ sudo systemctl start docker
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-02-04 11:37:29 JST; 5s ago
     Docs: https://docs.docker.com
 Main PID: 14218 (dockerd)
    Tasks: 10
   Memory: 44.6M
   CGroup: /system.slice/docker.service
           └─14218 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.169376623+09:00" level=info msg="ClientConn swi>
 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.194751667+09:00" level=warning msg="Your kernel>
 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.194778024+09:00" level=warning msg="Your kernel>
 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.194932968+09:00" level=info msg="Loading contai>
 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.410006453+09:00" level=info msg="Default bridge>
 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.504908668+09:00" level=info msg="Loading contai>
 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.522814914+09:00" level=info msg="Docker daemon">
 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.523082762+09:00" level=info msg="Daemon has com>
 2月 04 11:37:29 server1 dockerd[14218]: time="2020-02-04T11:37:29.550752482+09:00" level=info msg="API listen on >
 2月 04 11:37:29 server1 systemd[1]: Started Docker Application Container Engine.
```
問題なく動いているようです。
あとは自動起動の設定を忘れずに実施すれば完了ですね。

```
$ sudo systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
```
お疲れ様でした。