RaspberryPiでコンテナを始める~Podman編~

~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のコンテナレジストリの参照先として、dockerhubquay.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を使用することを進めます。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です