~Podman編~
こんにちは、サイオステクノロジーのエンジニア 中島です。
前回は、Dockerをベースに行いました。Docker以外でもPodmanというツールがあり、もし突然Dockerのサポートを得ることが難しくなってもPodmanの使い方を覚えていれば移行も可能ではないのかと思ったので、Dockerと同じことがPodmanでもできることを前回の記事に確認してみます。なお、確認用の端末としてRaspberry Pi4を使用しています。
Podmanのインストール
Raspberry Pi OS上でPodmanをインストールするには、64bit用を使用したほうがPodman用のライブラリが楽に導入できるため、64bit用のRaspberry Pi OSを使用します。
次に、Rapsberry Pi OS用のリポジトリにPodmanのインストールリポジトリが登録されていないため、コンテナ動作エンジンであるCRI-Oが公開しているリポジトリを登録します。このリポジトリを追加する理由としてはPodmanのパッケージがこの中に含まれているため、それを使用するとインストールが非常に簡単になります。
以下のコマンドで、CRI-Oのリポジトリを登録します。
VERSION=1.23 OS=Debian_11 echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key |sudo apt-key add - curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -
次に、以下のコマンドでリポジトリの更新とアップグレードを実施して、podmanのインストールを行います。
sudo apt update && sudo apt upgrade -y sudo apt install podman -y
以上で、Podmanのインストールは終わりです。
余談となりますが、32bit用のRaspberry Pi OSでpodmanをインストールしようとすると以下の通り、ライブラリが古いためインストールができないとエラーが返され、簡単に解決することは難しくなります。
$ sudo apt install podman -y Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: podman : Depends: libseccomp2 (>= 2.4.3-1) but 2.3.3-4 is to be installed Depends: crun (>= 100:0.19.1-1) but it is not going to be installed Recommends: slirp4netns (>= 100:1.1.8-3) but it is not going to be installed Recommends: containernetworking-plugins (>= 100:1.0.0-1) but it is not going to be installed Recommends: uidmap but it is not going to be installed Recommends: fuse-overlayfs but it is not going to be installed E: Unable to correct problems, you have held broken packages.
Nginxの動作確認
前回の記事同様にNginxコンテナをPodmanで動かします。
まず、以下のコマンドを入力してNginxのコンテナをpullします。
$ podman pull nginx ? Please select an image: ▸ docker.io/library/nginx:latest quay.io/nginx:latest
pullを実行すると、コンテナのpull先を聞かれますので、好きなほうを選びます。なお、上記の設定が出る理由として、podmanのコンテナレジストリの参照先として、dockerhubとquay.ioがデフォルトのダウンロード先として登録しているからです。
後は、以下のコマンドを実行することで、nginxコンテナを立ち上げることができます。
podman run -d -p 8080:80 nginx
DockerComposeを利用する
以下のコマンドで、DockerComposeをインストールします。一応pipコマンドでインストールする理由としては、aptコマンドを使用すると同時にdockerもインストールされることが理由となります。
sudo pip install docker-compose
次に、DockerComposeでPodmanを使用できるようにソケットサービスを以下のコマンドで作成します。この方法で作成する方法はrootlessと呼ばれており、この方法で作成したソケットは作成したユーザがDockerComposeを利用して、コンテナを立ち上げることができるようになります。
systemctl --user daemon-reload systemctl --user enable --now podman.socket
次に、DockerComposeが作成したソケットを使用するように「DOCKER_HOST」の環境変数を以下のコマンドで設定します。
export DOCKER_HOST="unix:$XDG_RUNTIME_DIR/podman/podman.sock"
ただし、上記の方法はログアウトしたり再起動すると無効になるため以下のコマンドでログイン時に自動実行するように設定します。
echo "export DOCKER_HOST=\"unix:$XDG_RUNTIME_DIR/podman/podman.sock\"" >> ~/.bashrc
以上で、DockerComposeの設定は完了となります。次に動作テスト、前回と同じようにNextCloudをDockerComposeで立ち上げてみますので、以下のdocker-compose.ymlファイルを作成します。
version: '3.1' volumes: nextcloud: db: services: db: image: mariadb command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed ports: - 3306:3306 volumes: - db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root # 適当なパスワードを設定 - MYSQL_PASSWORD=root # 適当なパスワードを設定 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud nextcloud: image: nextcloud ports: - 8080:80 volumes: - nextcloud:/var/www/html environment: - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_PASSWORD=root - MYSQL_HOST=db
以下のコマンドを実行して、NextCloudのサービスをDockerComposeで立ち上げます。
docke-compose up -d
ブラウザでhttp://IP:8080にアクセスすると以下の通り、管理ユーザの登録サイトが表示されます。
rootlessモードでのやり方を解説しましたが、root専用でサービスソケットを作成する場合は以下のコマンドを実行します。
sudo systemctl daemon-reload sudo systemctl enable --now podman
まとめ
本記事は、RaspberryPiと呼ばれるシングルボードコンピュータでDockerと同じようにPodmanを動かすことができました。PodmanであってもDockerと同じように作成することができます。しかし、32bit OSではPodmanを使用することはDockerにくらべて難しいため、Raspberry Piも64bit OSを使用することを進めます。