RHEL9にDockerをセットアップする

## 前書き
RHEL9にDocker（podman）をセットアップする時のメモです。

## 環境確認
OSを確認：RHEL9 64bit
```
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)
```
```
$ arch
x86_64
```

## Docker（podman）をインストール
Red Hat では、RHEL 9 から Docker コンテナーエンジンと、docker コマンドが削除されました。

RHEL で Docker を使用する場合は、異なるアップストリームプロジェクトから Docker を取得できますが、RHEL 9 では対応していません。

Dockerの変わりに、podman-docker パッケージをインストールできます。docker コマンドを実行するたびに、実際には podman コマンドが実行されます。

ちなみに、podman以外、Red Hat は一連のコマンドラインツールを提供します。これには、以下が含まれます。

- Podman - Pod およびコンテナーイメージの直接管理 (run、stop、start、ps、attach、exec など)
- buildah - コンテナーイメージの構築、プッシュ、および署名
- skopeo - イメージのコピー、検証、削除、および署名
- runc - podman および buildah へのコンテナーの実行機能と構築機能の提供
- crun - ルートレスコンテナーの柔軟性、制御、セキュリティーを向上するために設定可能なオプションのランタイム。

- dockerをインストールする
```
$ sudo yum install docker -y
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 0:15:09 前の 2024年01月28日 15時59分26秒 に実施しました。
依存関係が解決しました。
================================================================================
 パッケージ    Arch   バージョン         リポジトリー                     サイズ
================================================================================
インストール:
 podman-docker noarch 2:4.6.1-7.el9_3    rhel-9-for-x86_64-appstream-rpms 106 k

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

ダウンロードサイズの合計: 106 k
インストール後のサイズ: 10 k
パッケージのダウンロード:
podman-docker-4.6.1-7.el9_3.noarch.rpm          131 kB/s | 106 kB     00:00    
--------------------------------------------------------------------------------
合計                                            131 kB/s | 106 kB     00:00     
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1 
  インストール中   : podman-docker-2:4.6.1-7.el9_3.noarch                   1/1 
  scriptletの実行中: podman-docker-2:4.6.1-7.el9_3.noarch                   1/1 
  検証             : podman-docker-2:4.6.1-7.el9_3.noarch                   1/1 
インストール済みの製品が更新されています。

インストール済み:
  podman-docker-2:4.6.1-7.el9_3.noarch                                          

完了しました!
```

dockerをインストールしようとしているが、podman-dockerがインストールされた。

- podmanのバージョンを確認
```
$ podman -v
podman version 4.6.1
```
- buildahのバージョンを確認
```
$ buildah -v
buildah version 1.31.3 (image-spec 1.1.0-rc.3, runtime-spec 1.1.0-rc.3)
```
- skopeoのバージョンを確認
```
$ skopeo -v
skopeo version 1.13.3
```

- runcのバージョンを確認
```
$ runc  -v
runc version 1.1.9
spec: 1.0.2-dev
go: go1.20.10
libseccomp: 2.5.2
```

- crunのバージョンを確認
```
$ crun -v
crun version 1.8.7
commit: 45a1234ce12d1ee123456bdcc56789a1fa1234c4
rundir: /run/user/1000/crun
spec: 1.0.0
+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +YAJL
```

- dockerを実行してみる、実際にpodmanが実行される。
```
$ sudo 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
```

- ローカルストレージ内のイメージをリスト表示します。
```
# buildah images
REPOSITORY             TAG      IMAGE ID       CREATED        SIZE
quay.io/podman/hello   latest   e2b3db5d4fdf   5 months ago   82.3 KB
```

- quay.io/podman/hello イメージをもとに、新しい作業コンテナーを作成します。
```
# buildah from quay.io/podman/hello
hello-working-container
```

- コンテナーおよびそれらのベースイメージをリスト表示します。
```
# buildah containers
CONTAINER ID  BUILDER  IMAGE ID     IMAGE NAME                       CONTAINER NAME
fa8c29f1d821     *     e2b3db5d4fdf quay.io/podman/hello:latest      hello-working-container
```

- イメージに基づいてコンテナーを実行します。
```
# podman run --name=hello quay.io/podman/hello
!... 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
```

## DockerFileからDockerを作成する
- 今回使うソース（Spring boot + Mavenのプロジェクト）：

https://github.com/yoruzuki/jenkins_demo

- Dockerfileの中身
```
FROM eclipse-temurin:17-jdk-jammy

EXPOSE 8000

ADD ./target/jenkins_demo-0.0.1-SNAPSHOT.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]
```

- Dockerfileを使ってdockerイメージをビルドする（jenkins_demoのフォルダーで実行する）
```
[root@localhost jenkins_demo]# docker build -t jenkins_demo -f Dockerfile .
```

- Dockerイメージのリストを確認
```
# buildah images
REPOSITORY               TAG      IMAGE ID       CREATED          SIZE
localhost/jenkins_demo   latest   d92185b1bbe5   15 minutes ago   434 MB
```

- Dockerイメージを実行する
```
# docker run --rm -p8000:8000 jenkins_demo
```

WEBブラウザでURL：
http://localhost:8000/
を叩いて、コンテナー実行成功したことを確認出来ました。
![Screenshot from 2024-01-28 21-20-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1442793/93df26e4-a7db-0e23-2747-65f9f04146cb.png)