EC2(Amazon Linux 2)にDocker CEをインストールしてみる 

EC2(Amazon Linux 2)にDocker CEをインストールしてみる。

インストール方法をググっているとDocker公式の[CentOS向けインストール手順](http://docs.docker.jp/engine/installation/linux/docker-ce/centos.html#ce-install)が出てきたので、Amazon Linux 2も同じRHEL系だからいけるいけるとやってみた。

※**結果的にこの手順ではインストールできませんでした。成功した手順だけ見たい方は本ページ中ほどの "【再チャレンジ】amazon-linux-extrasでインストール" からご参照ください**。

EC2インスタンスを立ち上げてSSHログイン済みのところからスタート。

## インストール方法の選択
Docker CEのインストール方法はいくつかあるらしい。

～[公式ドキュメント](http://docs.docker.jp/engine/installation/linux/docker-ce/centos.html#ce-install)より引用～
>・たいていのユーザは Docker のリポジトリをセットアップ して、そこからインストールしています。 インストールやアップグレードの作業が簡単だからです。 この方法をお勧めします。
・ユーザの中には RPM パッケージをダウンロードし、手動でインストールしている方もいます。 アップグレードも完全に手動となります。 この方法は、インターネットにアクセスできない環境で Docker をインストールするような場合には有用です。
・テスト環境や開発環境向けに、自動化された 便利なスクリプト を使って Docker のインストールを行うユーザもいます。


おすすめされているリポジトリを使ったインストールをやってみる。

## リポジトリのセットアップ
yum-utils、device-mapper-persistent-data、lvm2をインストール。

```sh
$ sudo yum install -y yum-utils \
> device-mapper-persistent-data \
> lvm2
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                        | 3.7 kB  00:00:00
Package yum-utils-1.1.31-46.amzn2.0.1.noarch already installed and latest version
Package device-mapper-persistent-data-0.7.3-3.amzn2.x86_64 already installed and latest version
Package 7:lvm2-2.02.177-4.amzn2.0.2.x86_64 already installed and latest version
Nothing to do
$ 
```

既にインストール済みだった模様。

続いてリポジトリのセットアップ。

```sh

$ sudo yum-config-manager --add-repo \
> https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
$ 
```

## Docker CEのインストール
```sh:インストール
$ sudo yum install docker-ce
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                 | 3.7 kB  00:00:00
docker-ce-stable                                                           | 3.5 kB  00:00:00
(1/2): docker-ce-stable/x86_64/updateinfo                                  |   55 B  00:00:00
(2/2): docker-ce-stable/x86_64/primary_db                                  |  44 kB  00:00:00
Resolving Dependencies
--> Running transaction check
---> Package docker-ce.x86_64 3:19.03.11-3.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.11-3.el7.x86_64
--> Processing Dependency: containerd.io >= 1.2.2-3 for package: 3:docker-ce-19.03.11-3.el7.x86_64
--> Processing Dependency: docker-ce-cli for package: 3:docker-ce-19.03.11-3.el7.x86_64
--> Running transaction check
---> Package containerd.x86_64 0:1.3.2-1.amzn2 will be obsoleted
---> Package containerd.io.x86_64 0:1.2.13-3.2.el7 will be obsoleting
--> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.2.13-3.2.el7.x86_64
---> Package docker-ce.x86_64 3:19.03.11-3.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.11-3.el7.x86_64
---> Package docker-ce-cli.x86_64 1:19.03.11-3.el7 will be installed
---> Package runc.x86_64 0:1.0.0-0.1.20200204.gitdc9208a.amzn2 will be obsoleted
--> Finished Dependency Resolution
Error: Package: containerd.io-1.2.13-3.2.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
Error: Package: 3:docker-ce-19.03.11-3.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
$ 
```
エラーとなった。

同じRHEL系とは言えCentOS向けだしなぁと思いつつ解決策をググっていると[同じエラーになっている方](https://qiita.com/mj69/items/ba1dac9160b13cdb6aa0)がいたのでお知恵を拝借。どうも先にインストールしたdocker-ce.repoが悪さをしている模様。AWSにも[Amazon Linux 2にDocker CEをインストールする方法](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/docker-basics.html)が載っているとのことで、そちらを実行してみる。

## 【再チャレンジ】amazon-linux-extrasでインストール

```sh:再チャレンジ
$ sudo amazon-linux-extras install docker
Installing docker
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker docker-ce-stable
13 metadata files removed
6 sqlite files removed
0 metadata files removed
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                 | 3.7 kB  00:00:00
amzn2extra-docker                                                          | 3.0 kB  00:00:00
docker-ce-stable                                                           | 3.5 kB  00:00:00
(1/7): amzn2-core/2/x86_64/group_gz                                        | 2.5 kB  00:00:00
(2/7): amzn2-core/2/x86_64/updateinfo                                      | 218 kB  00:00:00
(3/7): amzn2extra-docker/2/x86_64/updateinfo                               |   69 B  00:00:00
(4/7): amzn2extra-docker/2/x86_64/primary_db                               |  68 kB  00:00:00
(5/7): docker-ce-stable/x86_64/updateinfo                                  |   55 B  00:00:00
(6/7): docker-ce-stable/x86_64/primary_db                                  |  44 kB  00:00:00
(7/7): amzn2-core/2/x86_64/primary_db                                      |  41 MB  00:00:00
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 0:19.03.6ce-4.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================================
 Package          Arch             Version                      Repository                   Size
==================================================================================================
Installing:
 docker           x86_64           19.03.6ce-4.amzn2            amzn2extra-docker            37 M

Transaction Summary
==================================================================================================
Install  1 Package

Total download size: 37 M
Installed size: 161 M
Is this ok [y/d/N]: y
Downloading packages:
docker-19.03.6ce-4.amzn2.x86_64.rpm                                        |  37 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : docker-19.03.6ce-4.amzn2.x86_64                                                1/1
  Verifying  : docker-19.03.6ce-4.amzn2.x86_64                                                1/1

Installed:
  docker.x86_64 0:19.03.6ce-4.amzn2

Complete!
  0  ansible2                 available    \
        [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  3  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  5  postgresql9.6            available    \
        [ =9.6.6  =9.6.8  =stable ]
  6  postgresql10             available    [ =10  =stable ]
  8  redis4.0                 available    \
        [ =4.0.5  =4.0.10  =stable ]
  9  R3.4                     available    [ =3.4.3  =stable ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0  =1.38.0
          =stable ]
 11  vim                      available    [ =8.0  =stable ]
 13  ruby2.4                  available    \
        [ =2.4.2  =2.4.4  =2.4.7  =stable ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19  =7.2.21  =7.2.22  =7.2.23
          =7.2.24  =7.2.26  =stable ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11  =10.2.10_7.2.13
          =10.2.10_7.2.14  =10.2.10_7.2.16  =10.2.10_7.2.17
          =10.2.10_7.2.19  =10.2.10_7.2.22  =10.2.10_7.2.23
          =10.2.10_7.2.24  =stable ]
 18  libreoffice              available    \
        [ =5.0.6.2_15  =5.3.6.1  =stable ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=latest            enabled      \
        [ =17.12.1  =18.03.1  =18.06.1  =18.09.9  =stable ]
 21  mate-desktop1.x          available    \
        [ =1.19.0  =1.20.0  =stable ]
 22  GraphicsMagick1.3        available    \
        [ =1.3.29  =1.3.32  =1.3.34  =stable ]
 23  tomcat8.5                available    \
        [ =8.5.31  =8.5.32  =8.5.38  =8.5.40  =8.5.42  =8.5.50
          =stable ]
 24  epel                     available    [ =7.11  =stable ]
 25  testing                  available    [ =1.0  =stable ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    \
        [ =1.8.0_192  =1.8.0_202  =1.8.0_212  =1.8.0_222  =1.8.0_232
          =1.8.0_242  =stable ]
 28  firecracker              available    [ =0.11  =stable ]
 29  golang1.11               available    \
        [ =1.11.3  =1.11.11  =1.11.13  =stable ]
 30  squid4                   available    [ =4  =stable ]
 31  php7.3                   available    \
        [ =7.3.2  =7.3.3  =7.3.4  =7.3.6  =7.3.8  =7.3.9  =7.3.10
          =7.3.11  =7.3.13  =stable ]
 32  lustre2.10               available    \
        [ =2.10.5  =2.10.8  =stable ]
 33  java-openjdk11           available    [ =11  =stable ]
 34  lynis                    available    [ =stable ]
 35  kernel-ng                available    [ =stable ]
 36  BCC                      available    [ =0.x  =stable ]
 37  mono                     available    [ =5.x  =stable ]
 38  nginx1                   available    [ =stable ]
 39  ruby2.6                  available    [ =2.6  =stable ]
 40  mock                     available    [ =stable ]
 41  postgresql11             available    [ =11  =stable ]
 42  php7.4                   available    [ =stable ]
 43  livepatch                available    [ =stable ]
 44  python3.8                available    [ =stable ]
[ec2-user@ip-172-31-14-246 ~]$
```

インストール成功。
　
## ec2-userのセカンダリグループにdockerを追加　
毎回sudoしなくていいようにdockerをグループ追加をしておく。

```text:グループ追加
$ sudo usermod -a -G docker ec2-user
$
$ id
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)
$ 
```


## docker起動
```sh
$ sudo systemctl start docker.service
$ 
$ sudo systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-06-18 17:12:07 UTC; 9s ago
     Docs: https://docs.docker.com
  Process: 6680 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
  Process: 6662 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
 Main PID: 6687 (dockerd)
    Tasks: 8
   Memory: 45.5M
   CGroup: /system.slice/docker.service
           mq6687 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --defa...

Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal systemd[1]: Started Docker App...
Jun 18 17:12:07 ip-172-31-14-246.ap-northeast-1.compute.internal dockerd[6687]: time="2020-06-1...
Hint: Some lines were ellipsized, use -l to show in full.
$ 
$ 
$ 
$ docker --version
Docker version 19.03.6-ce, build 369ce74
$ 
```

## 自動起動設定
```sh
$ sudo systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
$ 
$ sudo systemctl list-unit-files | grep docker.service
docker.service                                enabled
$ 
```
　
　
最後にCentoOS向け手順で設定したリポジトリは不要っぽいので削除。

```sh
$ cd /etc/yum.repos.d
$ 
$ ls -l
total 12
-rw-r--r-- 1 root root  985 Nov  1  2019 amzn2-core.repo
-rw-r--r-- 1 root root 1015 Jun 18 16:59 amzn2-extras.repo
-rw-r--r-- 1 root root 2424 Oct 18  2019 docker-ce.repo
$ 
$ sudo rm -f docker-ce.repo
$ 
$ 
$ docker --version
Docker version 19.03.6-ce, build 369ce74
$ 
```
　
 　

以上です。おつかれさまでした。