DockerをRHEL系のLinuxにインストール

# OSのバージョン
+ Oracle Linux Server release 9.4
※Oracle Linux は RedHat 互換のディストリビューションであるため、他のRHEL系でも代用が可能。

# 手順
まず、システムパッケージを最新の状態に更新。
```
sudo dnf update -y
```

Dockerをインストールするために必要なパッケージをインストール。
```
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
```
+ **yum-utils**...　パッケージ管理を便利にするための追加機能を提供。
+ **device-mapper-persistent-data**...デバイスマッパー（Device Mapper）に関連するライブラリおよびツールのセットで、主にLVM（Logical Volume Manager）やDockerなどのアプリケーションで使用。このパッケージは、デバイスマッパーのメタデータを管理し、永続的なデバイスマッピングをサポート。
+ **lvm2**...LVM（Logical Volume Manager）に関連するツールのセットで、物理ボリューム（物理ディスクやパーティション）を論理ボリューム（仮想的なディスク）に抽象化し、柔軟にストレージを管理可能。

Dockerの公式リポジトリ(ここでは「rhel」)を追加。
別のディストリビューションのリポジトリを追加する場合は、以下コマンドの`--add-repo`のlinux以降のパスを書き換える。
```
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
```

念の為、`dnf repolist`コマンドで Docker 用リポジトリが追加されているか確認を行う。
```shell:実行結果の例
[opc@docker ~]$ dnf repolist
repo id                                          repo の名前
docker-ce-stable                                 Docker CE Stable - x86_64
ol9_UEKR7                                        Oracle Linux 9 UEK Release 7 (x86_64)
ol9_addons                                       Oracle Linux 9 Addons (x86_64)
ol9_appstream                                    Oracle Linux 9 Application Stream Packages (x86_64)
ol9_baseos_latest                                Oracle Linux 9 BaseOS Latest (x86_64)
ol9_ksplice                                      Ksplice for Oracle Linux 9 (x86_64)
ol9_oci_included                                 Oracle Linux 9 OCI Included Packages (x86_64)
```

Docker CE（Community Edition）をインストール。
```
sudo dnf install -y docker-ce docker-ce-cli containerd.io
```

インストール完了後、Dockerサービスを起動。
```
sudo systemctl start docker
```
```
sudo systemctl enable docker
```

Dockerが正常に動作しているか確認。
```
sudo systemctl status docker
```
```shell:実行結果の例
[opc@docker ~]$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-07-31 09:50:24 JST; 3h 40min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 10285 (dockerd)
      Tasks: 18
     Memory: 747.8M
        CPU: 31.040s
     CGroup: /system.slice/docker.service
             ├─10285 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
             └─15273 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.3 -container-port 80
```

通常、Dockerコマンドを使用するためにはsudoが必要だが、特定のユーザーをDockerグループに追加することで、sudoなしでDockerコマンドを実行できるように設定できる。
以下のコマンドでユーザーをDockerグループに追加。
```
sudo usermod -aG docker $USER
```

念の為、現在実行しているユーザーの権限を確認、group内にdockerが登録されれば追加完了となる。
```
id $USER
```
```shell:実行結果の例
uid=1000(opc) gid=1000(opc) groups=1000(opc),4(adm),190(systemd-journal),984(docker)
```

以下のコマンドを実行して、Dockerが正常にインストールされているか確認する。
```
docker --version
```
```shell:実行結果の例
Docker version 27.1.1, build 6312585
```

以下のコマンドでDockerのテストコンテナを実行し、インストールが正常に完了したか確認する。
`This message shows that your installation appears to be working correctly.`と表示された場合、正常にテストコンテナが実行されたこととなる。
```
sudo docker run hello-world
```
```shell:実行結果の例
[opc@docker ~]$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete 
Digest: sha256:1408fec50309afee38f3535383f5b09419e6dc0925bc69891e79d84cc4cdcec6
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/
```

以上でDockerのインストールが完了。