Linux on Power での Docker Engine インストール

## Linux on Power でのコンテナ環境構築

IBM Power サーバー上での Linux（Linux on Power）環境でコンテナを稼働させたい場合、RHEL であれば [Podman](https://www.redhat.com/ja/topics/containers/what-is-podman) のパッケージが利用できますし、あるいは OpenShift によるコンテナ基盤の構築も進んでいます。  

ただ、以前からの情報も多い docker での利用を試したいこともあるかと思いますので、2023/06 時点で Docker Engine のインストールを試した結果をまとめてみました。

## Red Hat Enterprise Linux

RHEL でのインストールについては、docker docs（公式ドキュメント）サイトに記載された手順に従います。RHEL on Power への Docker Engine のインストールは [CentOS向け](https://docs.docker.com/engine/install/centos/) の解説を利用します。

今回は RHEL8 環境にて、パッケージマネジャー(dnf/yum)を利用したインストールを実施します。

### 1. リポジトリのセットアップ

まず最初に、docker 用のリポジトリをセットアップする必要があります。これを実施しておくことで、このリポジトリから docker のインストールや更新が可能となります。

リポジトリの登録を実施するための yum-config-manager コマンドを含んでいる yum-utils パッケージがまだインストールされていない場合は、先にこれをインストールしておきます。

```
$ sudo dnf install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

セットアップ後にリポジトリ一覧を確認すると、docker-ce-stable というリポジトリが追加されていることが確認できます。

```
$ sudo dnf repolist
 
repo id                                                          repo の名前
codeready-builder-for-rhel-8-ppc64le-rpms                        Red Hat CodeReady Linux Builder for RHEL 8 Power, little endian (RPMs)
docker-ce-stable                                                 Docker CE Stable - ppc64le
epel                                                             Extra Packages for Enterprise Linux 8 - ppc64le
rhel-8-for-ppc64le-appstream-rpms                                Red Hat Enterprise Linux 8 for Power, little endian - AppStream (RPMs)
rhel-8-for-ppc64le-baseos-rpms                                   Red Hat Enterprise Linux 8 for Power, little endian - BaseOS (RPMs)

```

### 2. Docker Engine のインストール

docker 用のリポジトリをセットアップできたので、そのリポジトリからインストール可能な Docker Engine バージョンの確認もできます。下記がその例です。

```
sudo dnf list docker-ce --showduplicates | sort -r

docker-ce.ppc64le               3:24.0.2-1.el8                 docker-ce-stable
docker-ce.ppc64le               3:24.0.1-1.el8                 docker-ce-stable
docker-ce.ppc64le               3:24.0.0-1.el8                 docker-ce-stable
docker-ce.ppc64le               3:23.0.6-1.el8                 docker-ce-stable
:
docker-ce.ppc64le               3:20.10.10-3.el8               docker-ce-stable
```

利用したい特定のバージョンがあれば明示的に指定します。ここでは最新のパッケージをインストールする場合の例を記載します。

```
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

インストール時に GPG キーのインポート確認を求められたら、フィンガープリントが 「060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35」と合致することを確認し、Is this ok [y/N]: に対して y をインプットしてインポートします。

インストールは完了しますが、Docker は自動的には起動していません。また、docker グループが作成されますが、デフォルトではそのグループにはまだどのユーザーも追加していません。次ステップで確認していきます。

### 3. 稼働確認

まず docker が systemd のサービスとして登録されていることを確認します。この段階ではまだスタートしていません。

```
$ sudo systemctl status docker

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com
```

docker をスタートします。

```
$ sudo systemctl start docker
$ sudo systemctl status docker

$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-06-27 01:58:39 EDT; 40s ago
     Docs: https://docs.docker.com
 Main PID: 37185 (dockerd)
 :
```

docker コマンドや、実際のコンテナ稼働を確認します。  

```
$ sudo docker version

Client: Docker Engine - Community
 Version:           v24.0.2
 API version:       1.43
 Go version:        go1.20.4
 Git commit:        cb74dfc
 Built:             Fri Jun  9 07:56:59 2023
 OS/Arch:           linux/ppc64le
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          v24.0.2
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.4
  Git commit:       659604f
  Built:            Fri Jun  9 07:55:37 2023
  OS/Arch:          linux/ppc64le
  Experimental:     false
 containerd:
  Version:          1.6.21
  GitCommit:        3dce8eb055cbb6872793272b4f20ed16117344f8
 runc:
  Version:          1.1.7
  GitCommit:        v1.1.7-0-g860f061
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

$ sudo docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

$ sudo docker images

REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f1af0faa586: Pull complete
Digest: sha256:a13ec89cdf897b3e551bd9f89d499db6ff3a7f44c5b9eb8bca40da20eb4ea1fa
Status: Downloaded newer image for hello-world:latest

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

$ sudo docker images

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    5735de2b810b   7 weeks ago   66.4kB
```

ただしネットワーク環境によっては、上限の Pull 回数を超えている、として Docker Hub からのコンテナイメージの入手がエラーとなることがあります。その場合は、docker login コマンドにより利用可能な docker ユーザー ID でログインを実施しておくことで対応できます。

最後に、OS起動時に自動的にサービスがスタートするように設定しておきます。

```
$ sudo systemctl enable docker
```

以上で、docker のインストールと基本セットアップが完了しました。IBM Power 用の特別な設定や手順などは必要ありませんでした。あとは運用体制に合わせて、docker グループへのユーザーの登録などのカストマイズを実施してください。