CentOS8にDockerを入れる


## はじめに
基本的にCentOS7時とインストール方法に大きな違いはありませんが公式ではまだCentOS８のサポートはされていなさそうなのでしっかりとした環境を作るならまだCentOS7のほうがよさそうです

## 対象者
CentOS8にDockerを入れてみたいなって人

## version
* VirtualBox 6.0
* CetnOS 8 
* Docker 19.03.2

## 事前準備
とりあえずお決まりの~~yum update~~ではなくdnf update


```
#dnf -y update
```


### リポジトリの追加
dnf repolistであらかじめ最初の状態を確認しておく


```
# dnf repolist
メタデータの期限切れの最終確認: 1:03:10 時間前の 2019年09月30日 01時08分59秒 に 実施しました。
repo id                         repo の名前                                状態
AppStream                       CentOS-8 - AppStream                       4,928
BaseOS                          CentOS-8 - Base                            2,713
extras                          CentOS-8 - Extras                              3
```

dnfになってからはdnf config-manager --add-repoでリポジトリが追加できるそう

```
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

リポジトリが追加されたことを確認する

```
メタデータの期限切れの最終確認: 0:00:01 時間前の 2019年09月30日 02時17分03秒 に 実施しました。
repo id                          repo の名前                               状態
AppStream                        CentOS-8 - AppStream                      4,928
BaseOS                           CentOS-8 - Base                           2,713
docker-ce-stable                 Docker CE Stable - x86_64                    51
extras                           CentOS-8 - Extras                             3
```

## Dockerのインストール
早速インストールしようと思ったらエラーどうやらcontainerd.ioがダメって言われてるっぽい

```
# dnf -y install docker-ce docker-ce-cli containerd.io
メタデータの期限切れの最終確認: 0:02:40 時間前の 2019年09月30日 02時17分03秒 に 実施しました。
エラー:
 問題: package docker-ce-3:19.03.2-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.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
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
```

ぱっと見違うバージョンをいれれば動きそうだったのでhttps://download.docker.com/linux/centos/7/x86_64/stable/Packages/
ここからそれっぽいバージョンをとってくることにした

```
# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.2-3.3.el7.x86_64.rpm
--2019-09-30 02:28:20--  https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.2-3.3.el7.x86_64.rpm
download.docker.com (download.docker.com) をDNSに問いあわせています... 13.35.50.98, 13.35.50.10, 13.35.50.117, ...
download.docker.com (download.docker.com)|13.35.50.98|:443 に接続しています...  接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 23159364 (22M) [binary/octet-stream]
`containerd.io-1.2.2-3.3.el7.x86_64.rpm' に保存中

containerd.io-1.2.2 100%[===================>]  22.09M  5.67MB/s 時間 3.8s

2019-09-30 02:28:26 (5.75 MB/s) - `containerd.io-1.2.2-3.3.el7.x86_64.rpm' へ保 存完了 [23159364/23159364]
```

無事に落としてくることが出来たので古いバージョンを消してから改めてインストール

```
# dnf remove containerd.io
依存関係が解決しました。
================================================================================
 パッケージ         アーキテクチャー
                                バージョン         リポジトリ             サイズ
================================================================================
削除中:
 containerd.io      x86_64      1.2.0-3.el7        @docker-ce-stable       88 M

トランザクションの概要
================================================================================
削除  1 パッケージ

解放された容量: 88 M
これでよろしいですか? [y/N]: y
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64                       1/1
  削除             : containerd.io-1.2.0-3.el7.x86_64                       1/1
  scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64                       1/1
  検証             : containerd.io-1.2.0-3.el7.x86_64                       1/1

削除しました:
  containerd.io-1.2.0-3.el7.x86_64

完了しました!
# dnf install containerd.io-1.2.2-3.3.el7.x86_64.rpm
メタデータの期限切れの最終確認: 0:11:57 時間前の 2019年09月30日 02時17分03秒 に 実施しました。
依存関係が解決しました。
================================================================================
 パッケージ          アーキテクチャー
                                  バージョン           リポジトリ         サイズ
================================================================================
Installing:
 containerd.io       x86_64       1.2.2-3.3.el7        @commandline        22 M

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

合計サイズ: 22 M
インストール済みのサイズ: 88 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード中です:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  Installing       : containerd.io-1.2.2-3.3.el7.x86_64                     1/1
  scriptletの実行中: containerd.io-1.2.2-3.3.el7.x86_64                     1/1
  検証             : containerd.io-1.2.2-3.3.el7.x86_64                     1/1

インストール済み:
  containerd.io-1.2.2-3.3.el7.x86_64

完了しました!
```

やはり違うバージョンを入れることによりエラーをはかないでインストールすることが出来た

```
# dnf install -y docker-ce docker-ce-cli
メタデータの期限切れの最終確認: 0:12:25 時間前の 2019年09月30日 02時17分03秒 に 実施しました。
依存関係が解決しました。
================================================================================
 パッケージ                   アーキテクチャー
                                     バージョン          リポジトリ       サイズ
================================================================================
Installing:
 docker-ce                    x86_64 3:19.03.2-3.el7     docker-ce-stable  24 M
 docker-ce-cli                x86_64 1:19.03.2-3.el7     docker-ce-stable  39 M
依存関係をインストール中:
 container-selinux            noarch 2:2.94-1.git1e99f1d.module_el8.0.0+58+91b614e7
                                                         AppStream         43 k
 checkpolicy                  x86_64 2.8-2.el8           BaseOS           338 k
 libcgroup                    x86_64 0.41-19.el8         BaseOS            70 k
 policycoreutils-python-utils noarch 2.8-16.1.el8        BaseOS           228 k
 python3-audit                x86_64 3.0-0.10.20180831git0047a6c.el8
                                                         BaseOS            85 k
 python3-libsemanage          x86_64 2.8-5.el8           BaseOS           127 k
 python3-policycoreutils      noarch 2.8-16.1.el8        BaseOS           2.2 M
 python3-setools              x86_64 4.2.0-2.el8         BaseOS           598 k
 tar                          x86_64 2:1.30-4.el8        BaseOS           838 k
Enabling module streams:
 container-tools                     rhel8

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

ダウンロードサイズの合計: 68 M
インストール済みのサイズ: 285 M
パッケージのダウンロード中です:
(1/11): container-selinux-2.94-1.git1e99f1d.mod  38 kB/s |  43 kB     00:01
(2/11): libcgroup-0.41-19.el8.x86_64.rpm         57 kB/s |  70 kB     00:01
(3/11): python3-audit-3.0-0.10.20180831git0047a 957 kB/s |  85 kB     00:00
(4/11): checkpolicy-2.8-2.el8.x86_64.rpm        246 kB/s | 338 kB     00:01
(5/11): policycoreutils-python-utils-2.8-16.1.e 821 kB/s | 228 kB     00:00
(6/11): python3-libsemanage-2.8-5.el8.x86_64.rp 1.0 MB/s | 127 kB     00:00
(7/11): python3-setools-4.2.0-2.el8.x86_64.rpm  1.8 MB/s | 598 kB     00:00
(8/11): tar-1.30-4.el8.x86_64.rpm               2.0 MB/s | 838 kB     00:00
(9/11): python3-policycoreutils-2.8-16.1.el8.no 3.5 MB/s | 2.2 MB     00:00
(10/11): docker-ce-cli-19.03.2-3.el7.x86_64.rpm 2.4 MB/s |  39 MB     00:16
(11/11): docker-ce-19.03.2-3.el7.x86_64.rpm     1.3 MB/s |  24 MB     00:19
--------------------------------------------------------------------------------
合計                                            2.9 MB/s |  68 MB     00:23
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  Installing       : docker-ce-cli-1:19.03.2-3.el7.x86_64                  1/11
  scriptletの実行中: docker-ce-cli-1:19.03.2-3.el7.x86_64                  1/11
  Installing       : tar-2:1.30-4.el8.x86_64                               2/11
  scriptletの実行中: tar-2:1.30-4.el8.x86_64                               2/11
  Installing       : python3-setools-4.2.0-2.el8.x86_64                    3/11
  Installing       : python3-libsemanage-2.8-5.el8.x86_64                  4/11
  Installing       : python3-audit-3.0-0.10.20180831git0047a6c.el8.x86_    5/11
  scriptletの実行中: libcgroup-0.41-19.el8.x86_64                          6/11
  Installing       : libcgroup-0.41-19.el8.x86_64                          6/11
  scriptletの実行中: libcgroup-0.41-19.el8.x86_64                          6/11
  Installing       : checkpolicy-2.8-2.el8.x86_64                          7/11
  Installing       : python3-policycoreutils-2.8-16.1.el8.noarch           8/11
  Installing       : policycoreutils-python-utils-2.8-16.1.el8.noarch      9/11
  Installing       : container-selinux-2:2.94-1.git1e99f1d.module_el8.0   10/11
  scriptletの実行中: container-selinux-2:2.94-1.git1e99f1d.module_el8.0   10/11
  Installing       : docker-ce-3:19.03.2-3.el7.x86_64                     11/11
  scriptletの実行中: docker-ce-3:19.03.2-3.el7.x86_64                     11/11
  検証             : container-selinux-2:2.94-1.git1e99f1d.module_el8.0    1/11
  検証             : checkpolicy-2.8-2.el8.x86_64                          2/11
  検証             : libcgroup-0.41-19.el8.x86_64                          3/11
  検証             : policycoreutils-python-utils-2.8-16.1.el8.noarch      4/11
  検証             : python3-audit-3.0-0.10.20180831git0047a6c.el8.x86_    5/11
  検証             : python3-libsemanage-2.8-5.el8.x86_64                  6/11
  検証             : python3-policycoreutils-2.8-16.1.el8.noarch           7/11
  検証             : python3-setools-4.2.0-2.el8.x86_64                    8/11
  検証             : tar-2:1.30-4.el8.x86_64                               9/11
  検証             : docker-ce-3:19.03.2-3.el7.x86_64                     10/11
  検証             : docker-ce-cli-1:19.03.2-3.el7.x86_64                 11/11

インストール済み:
  docker-ce-3:19.03.2-3.el7.x86_64
  docker-ce-cli-1:19.03.2-3.el7.x86_64
  container-selinux-2:2.94-1.git1e99f1d.module_el8.0.0+58+91b614e7.noarch
  checkpolicy-2.8-2.el8.x86_64
  libcgroup-0.41-19.el8.x86_64
  policycoreutils-python-utils-2.8-16.1.el8.noarch
  python3-audit-3.0-0.10.20180831git0047a6c.el8.x86_64
  python3-libsemanage-2.8-5.el8.x86_64
  python3-policycoreutils-2.8-16.1.el8.noarch
  python3-setools-4.2.0-2.el8.x86_64
  tar-2:1.30-4.el8.x86_64

完了しました!
```
## Dockerの起動と確認
いつも通りsystemctlで起動と自動起動設定をする

```
# systemctl start docker
# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
```

バージョンの確認

```
# docker --version
Docker version 19.03.2, build 6a30dfc
```

## まとめ
この記事は私がふとDockerのお勉強がしたいなと思い立ち、さらにどうせやるならCentOS8にインストールしてしまえと思い立っただけの記事です。同じようなことをやりたいと思った人の参考になったらうれしいです。

## 参考にさせてもらったもの
https://qiita.com/summer/items/ac2d35fb10dfae52400e
https://qiita.com/ymasaoka/items/b6c3ffea060bcd237478

## おまけ
一応containerd.ioは別バージョン取ってこなくてもdnf installするときに--nobestをつけたりすれば警告は出るけどインストールはできる