Redhad8でDockerを使えるようにする

## はじめに

Red Hat Enterprise Linux 8はDocker非対応。  
ドキュメントには以下の記載があります。

> **Red Hat では、RHEL 8 から Docker コンテナーエンジンと、docker コマンドが削除されました。
RHEL で Docker を使用する場合は、異なるアップストリームプロジェクトから Docker を取得できますが、RHEL 8 では対応していません。**

それでもDockerを使いたい、、  
podmanを使うことでdockerが使えるとのことなので、dockerコマンドとdocker-composeを使えるように設定してみます。

[Red Hat Enterprise Linux 8 コンテナーの構築、実行、および管理
](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/pdf/building_running_and_managing_containers/red_hat_enterprise_linux-8-building_running_and_managing_containers-ja-jp.pdf)

## dockerコマンドを使えるようにする
まず、Podmanをインストールします。
```
[root@rhel8 ~]$ yum module install -y container -tools
usage: yum module [-c [config file]] [-q] [-v] [--version]
                  [--installroot [path]] [--nodocs] [--noplugins]
                  [--enableplugin [plugin]] [--disableplugin [plugin]]
                  [--releasever RELEASEVER] [--setopt SETOPTS] [--skip-broken]
                  [-h] [--allowerasing] [-b | --nobest] [-C] [-R [minutes]]
                  [-d [debug level]] [--debugsolver] [--showduplicates]
                  [-e ERRORLEVEL] [--obsoletes]
                  [--rpmverbosity [debug level name]] [-y] [--assumeno]
                  [--enablerepo [repo]] [--disablerepo [repo] | --repo [repo]]
                  [--enable | --disable] [-x [package]]
                  [--disableexcludes [repo]] [--repofrompath [repo,path]]
                  [--noautoremove] [--nogpgcheck] [--color COLOR] [--refresh]
                  [-4] [-6] [--destdir DESTDIR] [--downloadonly]
                  [--comment COMMENT] [--bugfix] [--enhancement]
                  [--newpackage] [--security] [--advisory ADVISORY]
                  [--bz BUGZILLA] [--cve CVES]
                  [--sec-severity {Critical,Important,Moderate,Low}]
                  [--forcearch ARCH] [--enabled] [--disabled] [--installed]
                  [--profile] [--available] [--all]
                  <modular command> [module-spec [module-spec ...]]
yum module: error: unrecognized arguments: -tools
```

バージョン4.6.1のPodmanがインストールできました。
```
[root@rhel8 ~]$ podman --version
podman version 4.6.1
```

次にdockerパッケージをインストールします。
途中で出てくる確認はすべて「y」です。
```
[root@rhel8 ~]# yum install podman-docker
CentOS Stream 8 - AppStream                     8.5 MB/s |  35 MB     00:04    
CentOS Stream 8 - BaseOS                         10 MB/s |  57 MB     00:05    
CentOS Stream 8 - Extras                         22 kB/s |  18 kB     00:00    
CentOS Stream 8 - Extras common packages         13 kB/s | 6.9 kB     00:00    
依存関係が解決しました。
================================================================================
 パッケージ      Arch     バージョン                          Repo        サイズ
================================================================================
インストール:
 podman-docker   noarch   3:4.6.1-5.module_el8+712+4cd1bd69   appstream   153 k

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

ダウンロードサイズの合計: 153 k
インストール後のサイズ: 10 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
podman-docker-4.6.1-5.module_el8+712+4cd1bd69.n 875 kB/s | 153 kB     00:00    
--------------------------------------------------------------------------------
合計                                            145 kB/s | 153 kB     00:01     
CentOS Stream 8 - AppStream                     1.6 MB/s | 1.6 kB     00:00    
GPG 鍵 0x8483C65D をインポート中:
 Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>"
 Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
これでよろしいですか? [y/N]: y
鍵のインポートに成功しました
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
  準備中           :                                                        1/1 
  インストール中   : podman-docker-3:4.6.1-5.module_el8+712+4cd1bd69.noar   1/1 
  scriptletの実行中: podman-docker-3:4.6.1-5.module_el8+712+4cd1bd69.noar   1/1 
  検証中           : podman-docker-3:4.6.1-5.module_el8+712+4cd1bd69.noar   1/1 

インストール済み:
  podman-docker-3:4.6.1-5.module_el8+712+4cd1bd69.noarch                        

完了しました!
```

これでdockerコマンドが使えるようになっているはずなので、動作確認していきます。
```
[root@rhel8 ~]# docker --version
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 4.6.1
[root@rhel8 ~]# 
[root@rhel8 ~]# [root@rhel8 ~]# docker container ls
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
```
dockerコマンドが使えるようになりました！！

 ## hello-worldコンテナを立ててみる
 dockerが使えるようになったので、hello-worldコンテナを立ててみます。

> コンテナを起動する
> **$ docker run [オプション] <ImageName>**
```
[root@rhel8 ~]# docker run hello-world
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob d08b40be6878 done  
Copying config e2b3db5d4f done  
Writing manifest to image destination
!... Hello Podman World ...!

         .--"--.           
       / -     - \         
      / (O)   (O) \        
   ~~~| -=(,Y,)=- |         
    .---. /`  \   |~~      
 ~/  o  o \~~~~.----. ~~   
  | =(X)= |~  / (O (O) \   
   ~~~~~~~  ~| =(Y_)=-  |   
  ~~~~    ~~~|   U      |~~ 

Project:   https://github.com/containers/podman
Website:   https://podman.io
Documents: https://docs.podman.io
Twitter:   @Podman_io
```

起動できたようなので、イメージとコンテナを確認していきます。

> Dockerイメージの一覧を表示
> **$ docker image ls [オプション]**

> Dockerコンテナの一覧を表示
> **$ docker container ls [オプション]**

※デフォルトでは実行中のコンテナのみが表示される
　「-a」のオプションをつけることで、停止中のコンテナも表示される

```
[root@rhel8 ~]# docker image ls
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY            TAG         IMAGE ID      CREATED       SIZE
quay.io/podman/hello  latest      e2b3db5d4fdf  3 months ago  82.3 kB
[root@rhel8 ~]# 
[root@rhel8 ~]# 
[root@rhel8 ~]# docker container ls -a
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID  IMAGE                        COMMAND               CREATED             STATUS                         PORTS       NAMES
6a8f6a920466  quay.io/podman/hello:latest  /usr/local/bin/po...  About a minute ago  Exited (0) About a minute ago              happy_sutherland
```

## docker-composeをインストール
ついでにdocker-composeをインストールしていきます。  

```
[root@rhel8 ~]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 12.1M  100 12.1M    0     0  9296k      0  0:00:01  0:00:01 --:--:-- 18.9M
[root@rhel8 ~]# 
[root@rhel8 ~]# 
[root@rhel8 ~]# chmod +x /usr/local/bin/docker-compose
[root@rhel8 ~]# 
[root@rhel8 ~]# 
[root@rhel8 ~]# ls -l /usr/local/bin/ | grep docker-compose
-rwxr-xr-x. 1 root root 12737304 12月 21 20:30 docker-compose
[root@rhel8 ~]# 
[root@rhel8 ~]# 
[root@rhel8 ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
```

## コンテナ間通信を可能にする
Podman は、デフォルトではコンテナ名でコンテナ間通信ができない、、
podman-plugins パッケージの dnsname プラグインをインストールすることで、コンテナ名で通信できるようになります。
```
[root@rhel8 ~]# sudo yum install podman-plugins
メタデータの期限切れの最終確認: 0:05:16 前の 2023年12月21日 20時27分34秒 に実施しました。
パッケージ podman-plugins-3:4.6.1-5.module_el8+712+4cd1bd69.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
```

これでRHEL8でもDockerが使えるようになりました！！


## さいごに
dockerコマンドを打つ度出てくる以下のメッセージは、メッセージの通りに「**/etc/containers/nodocker**」を作成することで、抑制できます。
```
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
```