設定 - Podman Compose
概要
podman compose
コマンドは、docker-composeのような外部のComposeプロバイダの薄いラッパーである。
つまり、podman compose
コマンドは、Compose機能を実装する別のツールを実行するが、ComposeプロバイダがローカルのPodmanソケットと透過的に通信できるように環境を設定する。
指定したオプション、コマンド、引数は直接composeプロバイダに渡される。
デフォルトのComposeプロバイダは、docker-composeとpodman-composeである。
両方ともインストールされている場合は、docker-composeが優先される。
なぜなら、docker-composeはCompose仕様のオリジナルの実装であり、サポートされているプラットフォーム (Linux、MacOS、Windows) で広く使用されているからである。
デフォルトの挙動を変更する場合や、選択したプロバイダのカスタムインストールパスが必要な場合は、~/.config/containers/containers.confファイルのcompose_provider
フィールドを変更する必要がある。
また、環境変数PODMAN_COMPOSE_PROVIDER
を設定して変更することもできる。
Podman Composeのインストール
パッケージ管理システムからインストール
# RHEL sudo dnf install podman-compose # SUSE sudo zypper install python3-podman-compose
PyPIからインストール
# Python3のルートディレクトリにインストールする場合 sudo pip3 install podman-compose python-dotenv PyYAML # Python3のユーザディレクトリにインストールする場合 pip3 install --user podman-compose python-dotenv PyYAML # GithubからPodman Composeをユーザディレクトリに直接インストールする場合 pip3 install --user https://github.com/containers/podman-compose/archive/devel.tar.gz pip3 install --user python-dotenv PyYAML
ソースコードからインストール
PyYAML / Python-DotEnvのインストール
まず、PyYAMLおよびPython-DotEnvをインストールする。
パッケージ管理システムからPyYAMLおよびPython-DotEnvをインストールする場合、依存関係が多すぎるため、PyPIからインストールすることを推奨する。
pip3 install --user python-dotenv PyYAML
aardvark-dnsおよびnetavarkのインストール (推奨)
- パッケージ管理システムからインストールする場合
- netavarkおよびaardvark-dnsをパッケージ管理システムからインストールする。
sudo zypper install netavark aardvark-dns
- netavarkおよびaardvark-dnsをパッケージ管理システムからインストールする。
- ソースコードからインストール
- aardvark-dnsのGithubから、ソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf aardvark-dns-<バージョン>.tar.gz
cd aardvark-dns-<バージョン>
- aardvark-dnsをビルドおよびインストールする。
make PREFIX=<Podmanのインストールディレクトリ> -j $(nproc)
make PREFIX=<Podmanのインストールディレクトリ> install
- netavarkをインストールする。
netavarkを手動でインストールする場合は、インストール - Podman#ソースコードからインストール#最新のnetavarkが必要な場合のページを参照すること。
- aardvark-dnsのGithubから、ソースコードをダウンロードする。
Podman DNSname Pluginのインストール (非推奨)
もし、CNIネットワークを使用する場合は、Podman DNSname Pluginをインストールする。
ただし、2023年以降、Podman DNSname Pluginの開発は止まっているため、netavarkとaardvark-dnsを使用することを推奨する。
# Podman DNSname Pluginのインストール git clone https://github.com/containers/dnsname.git cd dnsname make -j $(nproc) PREFIX=<Podmanのインストールディレクトリ> make install PREFIX=<Podmanのインストールディレクトリ>
Podman Composeのインストール
Podman ComposeのGithubから、ソースコードをダウンロードする。
git clone https://github.com/containers/podman-compose.git -b stable
Podman Composeをビルドおよびインストールする。
export PYTHONPATH="/<Podmanのインストールディレクトリ>/lib/python<Pythonのバージョン>/site-packages:$PYTHONPATH" python3 ./setup.py build python3 ./setup.py install --prefix=<Podmanのインストールディレクトリ>
~/.profileファイル等に、環境変数PYTHONPATH
を設定する。
export PYTHONPATH="/<Podmanのインストールディレクトリ>/lib/python<Pythonのバージョン>/site-packages:$PYTHONPATH"
container-compose.ymlファイル
ボリューム
:Z
オプションは、SELinuxを有効にしている場合において、ボリュームの共有時にセキュリティコンテキストを設定するためのものである。
SELinuxが無効の場合は、このオプションは無視される。
container-compose.ymlファイルにおいて、volumes
セクションを使用してボリュームを定義する場合、
SELinuxを有効にしている場合は、ホストとコンテナ間で適切なセキュリティコンテキストが設定される。
services:
<コンテナ名>:
# ...略
volumes:
- /<ホスト側のパス>/:/<コンテナ内のパス>/:Z
container-compose.ymlファイルの例
version: '<Composeファイルのバージョン (docker-compose.ymlのバージョンと同じ)>' # 例: '3'
networks:
frontend:
# bridge, overlay, macvlan等を指定する
driver: <ネットワークのドライバを指定>
backend:
# bridge, overlay, macvlan等を指定する
driver: <ネットワークのドライバを指定>
external: <既存の外部ネットワークを指定>
driver_opts: <ドライバに関連する追加のオプションを指定>
# IPアドレスの管理に関連する設定を指定する
ipam:
# IPアドレス管理のドライバを指定する
driver: default
# driverセクションに指定したドライバに関する設定を指定する
config:
- subnet: "<サブネットマスク 例: 172.18.0.0/16>"
# networksセクションの説明:
# 上記の例では、backendネットワークに対しては、ipamセクションでサブネットを指定している。
# これにより、ネットワーク内のコンテナに対して、手動でIPアドレスを指定することができる。
services:
<コンテナ名 1 (任意の名前) 例: sample1)>:
# イメージからコンテナを生成する場合、imageを指定
image: <イメージ (リポジトリ:タグ) を指定する>
command:
<コンテナ起動時に実行するコマンド 例: --default-authentication-plugin=mysql_native_password>>
# ホストとコンテナでファイルを同期する場合等
volumes:
# 例: /tmp/mysql/mysql_data:/var/lib/mysql
- <ホスト側のパス 1:コンテナのパス 1>
- <ホスト側のパス 2:コンテナのパス 2>
# ポート転送 (ポートフォワーディング) を行う場合
# 例: 63306:3306
ports:
- <ホスト側のポート 1:コンテナのポート 1>
- <ホスト側のポート 2:コンテナのポート 2>
# 環境変数を指定する場合
# 例1: MYSQL_ROOT_PASSWORD: password
# 例2: MYSQL_PORT: 3306
environment:
<環境変数名 1: 環境変数値>
<環境変数名 2: 環境変数値>
security_opt:
# AppArmorプロファイルを適用する場合
# /etc/apparmor.dディレクトリにプロファイルを配置して、apparmor_parserコマンドでプロファイルを読み込む必要がある
- apparmor=<AppArmorプロファイル名>
<コンテナ名 2 (任意の名前) 例: sample2)>:
build:
# Containerfileが存在するディレクトリ
context: .
# Containerfileのファイル名
containerfile: Containerfile
# または、以下に示す記述方法でもよい
# Containerfileのファイルパス
#build: <Containerfileのファイルパス>
# 任意のコンテナ名を付けることもできる
container_name: <任意のコンテナ名>
# ホストとコンテナでファイルを同期する場合等
volumes:
- <ホスト側のパス:コンテナのパス>
# ポート転送 (ポートフォワーディング) を行う場合
ports:
- <ホスト側のポート:コンテナのポート>
# 環境変数を指定する場合
environment:
<環境変数名 1: 環境変数値>
<環境変数名 2: 環境変数値>
<環境変数名 3: 環境変数値>
# 依存関係を設定する場合 (他のコンテナと連携する場合)
# この項目で指定されたコンテナが先に起動する
depends_on:
- <依存するコンテナ名 例: sample1>
ファイルの確認
シンタックスの検証
docker-compose.ymlファイルと同様、ファイルの検証はpodman-compose -f <container-compose.ymlファイルのパス> config
コマンドを実行する。
container-compose.ymlファイルと同階層のディレクトリで実行する場合、または、環境変数COMPOSE_FILE
がcontainer-compose.ymlファイルを指している場合は、
-f <container-compose.ymlファイル>
の部分を省略することができる。
podman-compose -f <container-compose.ymlファイルのパス> config # または podman-compose config # コマンドを実行しているカレントディレクトリと同階層のディレクトリにcontainer-compose.ymlファイルが存在する場合
検証エラー : networks
以下に示すようなエラーが出力される場合がある。
RuntimeError: missing networks: <ネットワーク名>
Podman Composeでは、ネットワークの定義をサービスの前に配置する必要がある。
このエラーは、networksセクションがサービスの前に配置されているために発生している。
Composeコマンド
container-compose.ymlファイルを実行するには、podman-compose -d
コマンドで実行する必要がある。
Composeコマンドは、container-compose.ymlファイルが存在するディレクトリで行う。
もし、別のディレクトリに存在するcontainer-compose.ymlファイルを指定する場合は、-f
オプションを付加する。
podman-compose <コマンド> -f <container-compose.ymlファイルのパス>
サービスイメージの確認
podman-compose images
サービスイメージの作成
サービスイメージのビルドを実行する。
container-compose.ymlファイルにimage:
が記述されている場合、そのイメージ名がローカルに存在しなければ、リモートからプルする。
container-compose.ymlファイルにimage:
が記述されていない場合、build
に記述されているパスのContainerfileを使用して、コンテナイメージを構築する。
podman-compose build
リモートからサービスイメージを取得
リモートからコンテナイメージを取得する。
podman-compose pull
サービスの確認
podman-compose ps
サービスの作成
構築されたサービスイメージからサービスを作成する。
また、作成直後のサービスは停止している。
podman-compose create
サービスの実行
サービスを作成して起動する。
-d
オプションを付加することにより、バックグラウンドで実行することができる。
また、--build
オプションを付加することにより、起動前にイメージを構築することもできる。
podman-compose up # バックグラウンドで実行する場合 podman-compose up -d # サービスイメージを構築してサービスを実行する場合 podman-compose up -d --build
サービスの起動
停止中のサービスを起動する。
podman-compose start
サービス再起動
サービスを再起動する。
podman-compose restart
サービスの停止
起動中のサービスを停止する。
podman-compose stop
サービスの削除
container-compose.ymlファイルに記述されているサービスからコンテナを停止して、そのコンテナとネットワークを削除する。
--rmi all
オプションを付加することにより、サービスイメージも削除することができる。
podman-compose down # ボリュームも含めて削除する場合 podman-compose down -v # サービスイメージの停止および削除 podman-compose down --rmi all
サービスの強制削除
停止中のコンテナを削除する。
podman-compose rm
サービスの強制消去
サービスを強制停止する。
podman-compose kill
コマンドの実行
引数で指定したサービスのコンテナ内でコマンドを実行する。
podman-compose run <サービス名> <コマンド> <引数 1> <引数 2> <引数...> # 例: container-compose.ymlファイル内のdbを強制的にpullして、dbおよびwebを実行する podman-compose run db web new . --force --database=mysql
サービスの設定の確認
container-compose.ymlファイルで記述されている設定を表示する。
podman-compose config
サービスログの確認
サービスのログを表示する。
podman-compose logs
Kubernetes YAMLへ変換
Container-compose.ymlファイルからポッドを構築する。
podman-compose up -d # または podman-compose up -d -f <Container-compose.ymlファイルのパス>
Kubernetes YAMLファイルへ変換する。
podman generate kube <ポッド名> > <Kubernetes YAMLファイル名>.yml