Docker CE（無償版 Community Edition）を構築しよう（CentOS8）

# 構築環境

```bash
$ cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
```

# インストール
公式手順：https://docs.docker.com/engine/install/centos/
非公式翻訳手順：http://docs.docker.jp/engine/installation/linux/docker-ce/centos.html

## OSを最新状態にする

```
$ yum update
$ yum upgrade
```

## 旧バージョンのDockerをアンインストールする

```
$ yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
```

## 安定したYumリポジトリのセットアップ

```
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

## Dockerのインストール

```
$ yum install docker-ce docker-ce-cli containerd.io
```

上記コマンドでは、パッケージの依存関係でdocker-ceがインストールエラーとなる。
※ 2020/4/29時点

そこで、「--nobest」オプションを指定して実行することで、最新版ではないがインストールに成功した。

```
$ yum install --nobest docker-ce
Last metadata expiration check: 0:09:23 ago on Wed 29 Apr 2020 01:16:58 AM JST.
Dependencies resolved.

 Problem: package docker-ce-3:19.03.8-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.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
================================================================================================================================================================
 Package                                     Architecture          Version                                                Repository                       Size
================================================================================================================================================================
Installing:
 docker-ce                                   x86_64                3:18.09.1-3.el7                                        docker-ce-stable                 19 M
Installing dependencies:
 container-selinux                           noarch                2:2.124.0-1.module_el8.1.0+298+41f9343a                AppStream                        47 k
 libcgroup                                   x86_64                0.41-19.el8                                            BaseOS                           70 k
 policycoreutils-python-utils                noarch                2.9-3.el8_1.1                                          BaseOS                          250 k
 containerd.io                               x86_64                1.2.0-3.el7                                            docker-ce-stable                 22 M
 docker-ce-cli                               x86_64                1:19.03.8-3.el7                                        docker-ce-stable                 40 M
Enabling module streams:
 container-tools                                                   rhel8
Skipping packages with broken dependencies:
 docker-ce                                   x86_64                3:19.03.8-3.el7                                        docker-ce-stable                 25 M

Transaction Summary
================================================================================================================================================================
Install  6 Packages
Skip     1 Package

Total download size: 81 M
Installed size: 339 M
Is this ok [y/N]: y
Downloading Packages:
(1/6): libcgroup-0.41-19.el8.x86_64.rpm                                                                                         3.2 MB/s |  70 kB     00:00
(2/6): policycoreutils-python-utils-2.9-3.el8_1.1.noarch.rpm                                                                    6.5 MB/s | 250 kB     00:00
(3/6): container-selinux-2.124.0-1.module_el8.1.0+298+41f9343a.noarch.rpm                                                       932 kB/s |  47 kB     00:00
(4/6): docker-ce-18.09.1-3.el7.x86_64.rpm                                                                                       6.6 MB/s |  19 MB     00:02
(5/6): docker-ce-cli-19.03.8-3.el7.x86_64.rpm                                                                                    10 MB/s |  40 MB     00:03
(6/6): containerd.io-1.2.0-3.el7.x86_64.rpm                                                                                     5.0 MB/s |  22 MB     00:04
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                            16 MB/s |  81 MB     00:05
warning: /var/cache/dnf/docker-ce-stable-091d8a9c23201250/packages/containerd.io-1.2.0-3.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
Docker CE Stable - x86_64                                                                                                       4.4 kB/s | 1.6 kB     00:00
Importing GPG key 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
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                        1/1
  Installing       : docker-ce-cli-1:19.03.8-3.el7.x86_64                                                                                                   1/6
  Running scriptlet: docker-ce-cli-1:19.03.8-3.el7.x86_64                                                                                                   1/6
  Installing       : containerd.io-1.2.0-3.el7.x86_64                                                                                                       2/6
  Running scriptlet: containerd.io-1.2.0-3.el7.x86_64                                                                                                       2/6
  Installing       : policycoreutils-python-utils-2.9-3.el8_1.1.noarch                                                                                      3/6
  Running scriptlet: container-selinux-2:2.124.0-1.module_el8.1.0+298+41f9343a.noarch                                                                       4/6
  Installing       : container-selinux-2:2.124.0-1.module_el8.1.0+298+41f9343a.noarch                                                                       4/6
  Running scriptlet: container-selinux-2:2.124.0-1.module_el8.1.0+298+41f9343a.noarch                                                                       4/6
  Running scriptlet: libcgroup-0.41-19.el8.x86_64                                                                                                           5/6
  Installing       : libcgroup-0.41-19.el8.x86_64                                                                                                           5/6
  Running scriptlet: libcgroup-0.41-19.el8.x86_64                                                                                                           5/6
  Running scriptlet: docker-ce-3:18.09.1-3.el7.x86_64                                                                                                       6/6
  Installing       : docker-ce-3:18.09.1-3.el7.x86_64                                                                                                       6/6
  Running scriptlet: docker-ce-3:18.09.1-3.el7.x86_64                                                                                                       6/6
  Running scriptlet: container-selinux-2:2.124.0-1.module_el8.1.0+298+41f9343a.noarch                                                                       6/6
  Running scriptlet: docker-ce-3:18.09.1-3.el7.x86_64                                                                                                       6/6
  Verifying        : container-selinux-2:2.124.0-1.module_el8.1.0+298+41f9343a.noarch                                                                       1/6
  Verifying        : libcgroup-0.41-19.el8.x86_64                                                                                                           2/6
  Verifying        : policycoreutils-python-utils-2.9-3.el8_1.1.noarch                                                                                      3/6
  Verifying        : containerd.io-1.2.0-3.el7.x86_64                                                                                                       4/6
  Verifying        : docker-ce-3:18.09.1-3.el7.x86_64                                                                                                       5/6
  Verifying        : docker-ce-cli-1:19.03.8-3.el7.x86_64                                                                                                   6/6

Installed:
  docker-ce-3:18.09.1-3.el7.x86_64                    container-selinux-2:2.124.0-1.module_el8.1.0+298+41f9343a.noarch   libcgroup-0.41-19.el8.x86_64
  policycoreutils-python-utils-2.9-3.el8_1.1.noarch   containerd.io-1.2.0-3.el7.x86_64                                   docker-ce-cli-1:19.03.8-3.el7.x86_64

Skipped:
  docker-ce-3:19.03.8-3.el7.x86_64

Complete!
```

2020/4/29時点では、以下のバージョンがインストールされた。

```
$ docker -v
Docker version 19.03.8, build afacb8b
```

## Dockerの起動

```
$ systemctl start docker
```

Dockerが正しくインストールされていることを確認するため、*hello-world*イメージを実行する。

```
$ docker run hello-world
```

「Hello from Docker!」の文字列が表示されれば、正しくインストールされている。

OS起動時にDockerが自動起動するように設定する。

```
$ systemctl enable docker
```

### 【番外編】プロキシ環境下の設定

プロキシに関する設定を追加する。プロキシサーバを経由しないホストやドメインをNO_PROXYに設定する。以下の例では、ローカルホストとexample.domain.comドメインをNO_PROXYに設定した。

```
$ mkdir -p /etc/systemd/system/docker.service.d
$ vi /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://example.proxy.com:8080"
Environment="HTTPS_PROXY=http://example.proxy.com:8080"
Environment="NO_PROXY=127.0.0.1,localhost,.example.domain.com"
```

以下のコマンドで、プロキシの設定反映する。

```
$ systemctl daemon-reload
$ systemctl restart docker
```

# アンインストール

Docker Engine、CLI、およびContainerdパッケージをアンインストールする。

```
$ yum remove docker-ce docker-ce-cli containerd.io
```

ホスト上のイメージ、コンテナー、ボリューム、またはカスタマイズされた構成ファイルは、自動的に削除されない。すべてのイメージ、コンテナー、ボリュームを削除するために、以下を実行する。

```
$ rm -rf /var/lib/docker
```