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

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

~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を使用することを進めます。

アバター画像
About 中島克典 15 Articles
サイオステクノロジーでインフラ関連の業務を実施。趣味で自宅でKubernetesを運用し、その環境下で自作アプリ開発運用を実施。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる