AWS RHEL7.6にDockerをインストールする

AWS RHEL7.6にDockerをインストールするのに色々と調査が必要で時間がかかったのでまとめます。

公式サイトを確認しましたがDocker公式のインストール手順にはRHELにインストールする手順はありません。Docker公式のCentOSでのインストール手順で実施してみましたがインストールすることが出来ませんでした。

yum-utilsインストール

インストール作業でyum-config-managerを使用するため、yum-utilsをインストールします。

$ sudo yum install -y yum-utils

Extrasリポジトリを有効化

RHEL7.6ではExtrasリポジトリを有効化する必要があります。有効にするExtrasリポジトリをを確認するため、設定されているリポジトリ一覧を確認。

$ sudo yum repolist all
Loaded plugins: amazon-id, search-disabled-repos
repo id repo name status
rhel-7-server-dotnet-rhui-debug-rpms/7Server/x86_64 dotNET on RHEL Debug RPMs for Red Hat Enterprise Linux 7 Server from RHUI disabled
rhel-7-server-dotnet-rhui-rpms/7Server/x86_64 dotNET on RHEL RPMs for Red Hat Enterprise Linux 7 Server from RHUI disabled
rhel-7-server-dotnet-rhui-source-rpms/7Server/x86_64 dotNET on RHEL Source RPMs for Red Hat Enterprise Linux 7 Server from RHUI disabled
rhel-7-server-rhui-debug-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server from RHUI (Debug RPMs) disabled
rhel-7-server-rhui-extras-debug-rpms/x86_64 Red Hat Enterprise Linux 7 Server - Extras from RHUI (Debug RPMs) disabled
rhel-7-server-rhui-extras-rpms/x86_64 Red Hat Enterprise Linux 7 Server - Extras from RHUI (RPMs) disabled
rhel-7-server-rhui-extras-source-rpms/x86_64 Red Hat Enterprise Linux 7 Server - Extras from RHUI (Source RPMs) disabled
rhel-7-server-rhui-optional-debug-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Optional from RHUI (Debug RPMs) disabled
rhel-7-server-rhui-optional-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Optional from RHUI (RPMs) disabled
rhel-7-server-rhui-optional-source-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Optional from RHUI (Source RPMs) disabled
rhel-7-server-rhui-rh-common-debug-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - RH Common from RHUI (Debug RPMs) disabled
rhel-7-server-rhui-rh-common-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - RH Common from RHUI (RPMs) enabled: 243
rhel-7-server-rhui-rh-common-source-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - RH Common from RHUI (Source RPMs) disabled
rhel-7-server-rhui-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server from RHUI (RPMs) enabled: 29,431
rhel-7-server-rhui-source-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server from RHUI (Source RPMs) disabled
rhel-7-server-rhui-supplementary-debug-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Supplementary from RHUI (Debug RPMs) disabled
rhel-7-server-rhui-supplementary-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Supplementary from RHUI (RPMs) disabled
rhel-7-server-rhui-supplementary-source-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server - Supplementary from RHUI (Source RPMs) disabled
rhel-server-rhui-rhscl-7-debug-rpms/7Server/x86_64 Red Hat Software Collections Debug RPMs for Red Hat Enterprise Linux 7 Server from RHUI disabled
rhel-server-rhui-rhscl-7-rpms/7Server/x86_64 Red Hat Software Collections RPMs for Red Hat Enterprise Linux 7 Server from RHUI disabled
rhel-server-rhui-rhscl-7-source-rpms/7Server/x86_64 Red Hat Software Collections Source RPMs for Red Hat Enterprise Linux 7 Server from RHUI disabled
rhui-client-config-server-7/x86_64 Custom Repositories - Red Hat Update Infrastructure 3 Client Configuration Server 7 enabled: 11
repolist: 29,685

リポジトリを使用できるようにするには、上記リストを有効化する必要がある。上記の「rhel-7-server-rhui-extras-rpms」を有効化する

$ sudo yum-config-manager --enable rhel-7-server-rhui-extras-rpms

Dockerインストール

有効化されているリポジトリからDockerがインストールできるか確認

$ sudo yum info docker
Loaded plugins: amazon-id, search-disabled-repos
Available Packages
Name : docker
Arch : x86_64
Epoch : 2
Version : 1.13.1
Release : 162.git64e9980.el7_8
Size : 18 M
Repo : rhel-7-server-rhui-extras-rpms/x86_64
Summary : Automates deployment of containerized applications
URL : https://github.com/docker/docker
License : ASL 2.0
Description : Docker is an open-source engine that automates the deployment of any
: application as a lightweight, portable, self-sufficient container that will
: run virtually anywhere.
:
: Docker containers can encapsulate any payload, and will run consistently on
: and between virtually any server. The same container that a developer builds
: and tests on a laptop will run at scale, in production*, on VMs, bare-metal
: servers, OpenStack clusters, public instances, or combinations of the above.

できることが確認できました。やってみる。できた

$ sudo yum install docker

設定

dockerコマンドをec2-userで実行するための設定をします。

Dockerは何で実行されているかの確認。グループ一覧を表示

$ cat /etc/group | grep docker
dockerroot:x:994:

おそらくDockerはdockerrootグループで実行されているしょう。
ec2-userをdockerrootグループに所属させます。

$ sudo usermod -a -G dockerroot ec2-user

確認

$ groups ec2-user
ec2-user : ec2-user adm wheel systemd-journal dockerroot

ググったところ、Dockerサービス起動していないとダメらしい。起動する。

$ sudo systemctl start docker

確認。できた。

$ sudo docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-162.git64e9980.el7_8.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Mon Jun 22 03:20:20 2020
OS/Arch: linux/amd64

Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-162.git64e9980.el7_8.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Mon Jun 22 03:20:20 2020
OS/Arch: linux/amd64
Experimental: false

今回は権限ではじかれていること確認

$ docker version
Client:
Version: 1.13.1
API version: 1.26
Package version:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/version: dial unix /var/run/docker.sock: connect: permission denied

root rootで実行されていること確認。

$ ls -l /var/run/docker.sock
srw-rw----. 1 root root 0 Sep 15 02:27 /var/run/docker.sock

次のように変更する。

$ sudo chown root:dockerroot /var/run/docker.sock

確認。できた。

$ docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-162.git64e9980.el7_8.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Mon Jun 22 03:20:20 2020
OS/Arch: linux/amd64

Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-162.git64e9980.el7_8.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Mon Jun 22 03:20:20 2020
OS/Arch: linux/amd64
Experimental: false

はまったこと

様々なサイトではリポジトリ追加しそのリポジトリからインストールすると記載されていますが、私の環境ではその方法は出来ませんでした。

リポジトリ追加

リポジトリ追加

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

追加されたことを確認

$ ls -l /etc/yum.repos.d
total 48
-rw-r--r--. 1 root root 2424 Jul 28 11:08 docker-ce.repo
-rw-r--r--. 1 root root 4745 Aug 11 09:35 redhat-rhui-beta.repo.disabled
-rw-r--r--. 1 root root 504 Sep 14 14:00 redhat-rhui-client-config.repo
-rw-r--r--. 1 root root 607 Sep 14 13:44 redhat-rhui-client-config.repo.rpmsave
-rw-r--r--. 1 root root 10142 Sep 14 14:00 redhat-rhui.repo
-rw-r--r--. 1 root root 8679 Sep 14 13:44 redhat-rhui.repo.rpmsave
-rw-r--r--. 1 root root 38 Sep 14 13:48 rhui-load-balancers.conf.rpmsave

Dockerインストール

$ sudo yum install docker-ce docker-ce-cli containerd.io
Loaded plugins: amazon-id, search-disabled-repos
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 | 45 kB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package containerd.io.x86_64 0:1.2.13-3.2.el7 will be installed
--> 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.12-3.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.12-3.el7.x86_64
---> Package docker-ce-cli.x86_64 1:19.03.12-3.el7 will be installed
--> 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.12-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

エラーが起きる。EC2のRHEL7.6はこのリポジトリからインストールすることは出来ないらしい。なので削除。

$ sudo rm -f /etc/yum.repos.d/docker-ce.repo

リポジトリを有効化

EC2のRHEL7系で使用できると記述されていたリポジトリを有効化してみました。しかしこれも失敗に終わりました。

$ sudo yum-config-manager --enable rhui-REGION-rhel-server-extras
Loaded plugins: amazon-id

改めて、Dockerインストール

$ sudo yum -y install docker
Loaded plugins: amazon-id, search-disabled-repos
No package docker available.
Error: Nothing to do

amazon-linux-extrasでインストール

Amazon Linuxではこのようにインストールするとのこと。試してみたがこれもダメでした。

$ sudo amazon-linux-extras install docker
sudo: amazon-linux-extras: command not found

Docker起動していないとバージョン表示されない

起動していない状態でバージョン確認すると、次のようなメッセージが表示される。これを権限が無いからだと思って対処をしたが変わらず、起動していないと表示されるものだと判明した。

$ docker version
Client:
Version: 1.13.1
API version: 1.26
Package version:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?