Azure VM(RHEL 8.x)へDockerをインストール

### 手順メモ
Azure VM(RHEL 8.x)へDockerをインストールする機会があり、少しはまったため備忘。
(AWSでは、すんなりインストール可能)
まずはドキュメント通りに進めてみる。DockerはRHELをサポートしていないため、CentOSの手順を参照。
- Install Docker Engine on CentOS
　https://docs.docker.com/engine/install/centos/
```
[azureuser@vm01 ~]$ sudo yum install -y yum-utils
Red Hat Enterprise Linux 8 for x86_64 - BaseOS - Extended Update Support from RHUI (RPMs)            12 MB/s |  29 MB     00:02    
Red Hat Enterprise Linux 8 for x86_64 - AppStream - Extended Update Support from RHUI (RPMs)        6.8 MB/s |  17 MB     00:02    
Microsoft Azure RPMs for RHEL8 Extended Update Support                                              2.4 kB/s | 2.2 kB     00:00    
Package yum-utils-4.0.8-4.el8_1.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[azureuser@vm01 ~]$ 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
[azureuser@vm01 ~]$ sudo yum install docker-ce docker-ce-cli containerd.io
Docker CE Stable - x86_64                                                                            52 kB/s |  23 kB     00:00    
Red Hat Enterprise Linux 8 for x86_64 - BaseOS - Extended Update Support from RHUI (RPMs)           4.3 kB/s | 2.4 kB     00:00    
Red Hat Enterprise Linux 8 for x86_64 - AppStream - Extended Update Support from RHUI (RPMs)        4.9 kB/s | 2.8 kB     00:00    
Microsoft Azure RPMs for RHEL8 Extended Update Support                                              6.6 kB/s | 2.1 kB     00:00    
Error: 
 Problem: package docker-ce-3:20.10.14-3.el8.x86_64 requires docker-ce-rootless-extras, but none of the providers can be installed
  - cannot install the best candidate for the job
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.0-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.0-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.1-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.1-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.10-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.10-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.11-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.11-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.12-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.12-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.13-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.13-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.14-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.14-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.2-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.2-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.3-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.3-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.4-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.4-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.5-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.5-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.6-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.6-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.7-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.7-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.8-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.8-3.el8.x86_64
  - nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.9-3.el8.x86_64
  - nothing provides slirp4netns >= 0.4 needed by docker-ce-rootless-extras-20.10.9-3.el8.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
[azureuser@vm01 ~]$ 
```
エラーとなる。「fuse-overlayfs」「slirp4netns」の利用可能バージョンを確認する。
```
[azureuser@vm01 ~]$ sudo yum info fuse-overlayfs slirp4netns
Last metadata expiration check: 0:00:00 ago on xx xx Apr 2022 0:00:00 AM UTC.
Available Packages
Name         : fuse-overlayfs
Version      : 0.4.1
Release      : 1.module+el8.1.0+4081+b29780af
Architecture : x86_64
Size         : 50 k
Source       : fuse-overlayfs-0.4.1-1.module+el8.1.0+4081+b29780af.src.rpm
Repository   : rhel-8-for-x86_64-appstream-eus-rhui-rpms
Summary      : FUSE overlay+shiftfs implementation for rootless containers
URL          : https://github.com/containers/fuse-overlayfs
License      : GPLv3+
Description  : FUSE overlay+shiftfs implementation for rootless containers.

Name         : slirp4netns
Version      : 0.3.0
Release      : 4.module+el8.1.0+4306+1d917805
Architecture : x86_64
Size         : 83 k
Source       : slirp4netns-0.3.0-4.module+el8.1.0+4306+1d917805.src.rpm
Repository   : rhel-8-for-x86_64-appstream-eus-rhui-rpms
Summary      : slirp for network namespaces
URL          : https://github.com/rootless-containers/slirp4netns
License      : GPLv2
Description  : User-mode networking for unprivileged network namespaces.

[azureuser@vm01 ~]$ 
```
fuse-overlayfs:0.4.1、slirp4netns:0.3.0が利用可能であることが分かる。
「docker-ce」で利用する「docker-ce-rootless-extras」をインストールするためには、「fuse-overlayfs >= 0.7」「slirp4netns >= 0.4」が必要となるが、それを満たさないためエラーとなる模様。

dockerのインストール可能なバージョンを確認。
```
[azureuser@vm01 ~]$ sudo yum --showduplicates list | grep docker-ce.x86_64
docker-ce.x86_64                                     3:19.03.13-3.el8                                           docker-ce-stable                           
docker-ce.x86_64                                     3:19.03.14-3.el8                                           docker-ce-stable                           
docker-ce.x86_64                                     3:19.03.15-3.el8                                           docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.0-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.1-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.2-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.3-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.4-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.5-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.6-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.7-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.8-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.9-3.el8                                            docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.10-3.el8                                           docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.11-3.el8                                           docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.12-3.el8                                           docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.13-3.el8                                           docker-ce-stable                           
docker-ce.x86_64                                     3:20.10.14-3.el8                                           docker-ce-stable                           
[azureuser@vm01 ~]$ 
```
古いバージョンのdockerを指定してインストール。　※docker-ce-3:20.xは全て同エラーとなることは確認済。
```
[azureuser@vm01 ~]$ sudo yum install docker-ce-3:19.03.15-3.el8 \
>  docker-ce-cli containerd.io
Last metadata expiration check: 0:00:00 ago on xx xx Apr 2022 0:00:00 AM UTC.
Dependencies resolved.
====================================================================================================================================
 Package                Arch       Version                                      Repository                                     Size
====================================================================================================================================
Installing:
 containerd.io          x86_64     1.5.11-3.1.el8                               docker-ce-stable                               29 M
 docker-ce              x86_64     3:19.03.15-3.el8                             docker-ce-stable                               24 M
 docker-ce-cli          x86_64     1:20.10.14-3.el8                             docker-ce-stable                               30 M
Installing dependencies:
 docker-scan-plugin     x86_64     0.17.0-3.el8                                 docker-ce-stable                              3.8 M
 libcgroup              x86_64     0.41-19.el8                                  rhel-8-for-x86_64-baseos-eus-rhui-rpms         70 k
 container-selinux      noarch     2:2.123.0-2.module+el8.1.0+4900+9d7326b8     rhel-8-for-x86_64-appstream-eus-rhui-rpms      45 k
Enabling module streams:
 container-tools                   rhel8                                                                                           

Transaction Summary
====================================================================================================================================
Install  6 Packages

Total download size: 87 M
Installed size: 368 M
Is this ok [y/N]: y
Downloading Packages:
(1/6): containerd.io-1.5.11-3.1.el8.x86_64.rpm                                                       49 MB/s |  29 MB     00:00    
(2/6): docker-ce-19.03.15-3.el8.x86_64.rpm                                                           33 MB/s |  24 MB     00:00    
(3/6): docker-scan-plugin-0.17.0-3.el8.x86_64.rpm                                                    16 MB/s | 3.8 MB     00:00    
(4/6): docker-ce-cli-20.10.14-3.el8.x86_64.rpm                                                       32 MB/s |  30 MB     00:00    
(5/6): libcgroup-0.41-19.el8.x86_64.rpm                                                             101 kB/s |  70 kB     00:00    
(6/6): container-selinux-2.123.0-2.module+el8.1.0+4900+9d7326b8.noarch.rpm                           66 kB/s |  45 kB     00:00    
------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                57 MB/s |  87 MB     00:01     
warning: /var/cache/dnf/docker-ce-stable-bbb88d8c1c4d66b5/packages/containerd.io-1.5.11-3.1.el8.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY
Docker CE Stable - x86_64                                                                            50 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-scan-plugin-0.17.0-3.el8.x86_64                                                                     1/6 
  Running scriptlet: docker-scan-plugin-0.17.0-3.el8.x86_64                                                                     1/6 
  Installing       : docker-ce-cli-1:20.10.14-3.el8.x86_64                                                                      2/6 
  Running scriptlet: docker-ce-cli-1:20.10.14-3.el8.x86_64                                                                      2/6 
  Installing       : container-selinux-2:2.123.0-2.module+el8.1.0+4900+9d7326b8.noarch                                          3/6 
  Running scriptlet: container-selinux-2:2.123.0-2.module+el8.1.0+4900+9d7326b8.noarch                                          3/6 
  Installing       : containerd.io-1.5.11-3.1.el8.x86_64                                                                        4/6 
  Running scriptlet: containerd.io-1.5.11-3.1.el8.x86_64                                                                        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 
  Installing       : docker-ce-3:19.03.15-3.el8.x86_64                                                                          6/6 
  Running scriptlet: docker-ce-3:19.03.15-3.el8.x86_64                                                                          6/6 
  Verifying        : containerd.io-1.5.11-3.1.el8.x86_64                                                                        1/6 
  Verifying        : docker-ce-3:19.03.15-3.el8.x86_64                                                                          2/6 
  Verifying        : docker-ce-cli-1:20.10.14-3.el8.x86_64                                                                      3/6 
  Verifying        : docker-scan-plugin-0.17.0-3.el8.x86_64                                                                     4/6 
  Verifying        : libcgroup-0.41-19.el8.x86_64                                                                               5/6 
  Verifying        : container-selinux-2:2.123.0-2.module+el8.1.0+4900+9d7326b8.noarch                                          6/6 
Installed products updated.

Installed:
  containerd.io-1.5.11-3.1.el8.x86_64                docker-ce-3:19.03.15-3.el8.x86_64                                             
  docker-ce-cli-1:20.10.14-3.el8.x86_64              docker-scan-plugin-0.17.0-3.el8.x86_64                                        
  libcgroup-0.41-19.el8.x86_64                       container-selinux-2:2.123.0-2.module+el8.1.0+4900+9d7326b8.noarch             

Complete!
[azureuser@vm01 ~]$ 
```
エラー無しでインストール完了。動作確認。
```
[azureuser@vm01 ~]$ sudo systemctl start docker
[azureuser@vm01 ~]$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[azureuser@vm01 ~]$ 
```
とりあえずは動作したが、はたしてこれが正解なのだろうか。