「設定 - Podman Compose」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <code>podman compose</code>コマンドは、docker-composeやpodman-composeのような外部のComposeプロバイダの薄いラッパーである。<br> つまり、<code>podman compose</code>はConpose機能を実装する別のツールを実行するが、Composeプロバイダがローカルの Podmanソケットと透過的に通信できるように環境を設定する。<br> <br> 指定したオプション、コマンド、引数は直接co…」)
 
62行目: 62行目:
  export PYTHONPATH="/<Podmanのインストールディレクトリ>/lib/python<Pythonのバージョン>/site-packages:$PYTHONPATH"
  export PYTHONPATH="/<Podmanのインストールディレクトリ>/lib/python<Pythonのバージョン>/site-packages:$PYTHONPATH"
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== YAMLファイル ==
<syntaxhighlight lang="yaml">
version: '<Composeファイルのバージョン (docker-compose.ymlのバージョンと同じ)>'  # 例: '3'
services:
    <コンテナ名 1 (任意の名前)>:                  # 例: sample1
      image: <イメージ (リポジトリ:タグ) を指定する>  # イメージからコンテナを生成する場合、imageを指定
      command:
          <コンテナ起動時に実行するコマンド>          #  例: --default-authentication-plugin=mysql_native_password>
      volumes:                              # ホストとコンテナでファイルを同期する場合等
          - <ホスト側のパス 1:コンテナのパス 1>      #  例: /tmp/mysql/mysql_data:/var/lib/mysql
          - <ホスト側のパス 2:コンテナのパス 2>
      ports:                                # ポート転送 (ポートフォワーディング) を行う場合
          - <ホスト側のポート 1:コンテナのポート 1>    # 例: 63306:3306
          - <ホスト側のポート 2:コンテナのポート 2>
      environment:                          # 環境変数を指定する場合
          <環境変数名 1: 環境変数値>              # 例: MYSQL_ROOT_PASSWORD: password
          <環境変数名 2: 環境変数値>              # 例: MYSQL_PORT: 3306
    <コンテナ名 2 (任意の名前)  例: sample2)>:
      build: <Dockerfileのファイルパス>        # Dockerfileを使用する場合、buildを指定
      volumes:                              # ホストとコンテナでファイルを同期する場合等
          - <ホスト側のパス:コンテナのパス>
      ports:                                # ポート転送 (ポートフォワーディング) を行う場合
          - <ホスト側のポート:コンテナのポート>
      environment:                          # 環境変数を指定する場合
          <環境変数名 1: 環境変数値>
          <環境変数名 2: 環境変数値>
          <環境変数名 3: 環境変数値>
      depends_on:                          # 依存関係を設定する場合 (他のコンテナと連携する場合)
          - <コンテナ名>                        # 例: sample1
</syntaxhighlight>
<br><br>
== Composeコマンド ==
YAMLファイルを実行するには、<code>podman-compose -d</code>コマンドで実行する必要がある。<br>
<br>
Composeコマンドは、YAMLファイルが存在するディレクトリで行う。<br>
<br>
==== サービスイメージの確認 ====
podman-compose images
<br>
==== サービスイメージの作成 ====
サービスイメージのビルドを実行する。<br>
YAMLファイルに<code>image:</code>が記述されている場合、そのイメージ名がローカルに存在しなければ、リモートからプルする。<br>
YAMLファイルに<code>image:</code>が記述されていない場合、<code>build</code>に記述されているパスのContainerfileを使用して、コンテナイメージを構築する。<br>
podman-compose build
<br>
==== リモートからサービスイメージを取得 ====
リモートからコンテナイメージを取得する。<br>
podman-compose pull
<br>
==== サービスの確認 ====
podman-compose ps
<br>
==== サービスの作成 ====
構築されたサービスイメージからサービスを作成する。<br>
また、作成直後のサービスは停止している。<br>
podman-compose create
<br>
==== サービスの実行 ====
サービスを作成して起動する。<br>
<code>-d</code>オプションを付加することにより、バックグラウンドで実行することができる。<br>
また、<code>--build</code>オプションを付加することにより、起動前にイメージを構築することもできる。<br>
podman-compose up
# バックグラウンドで実行する場合
podman-compose up -d
# サービスイメージを構築してサービスを実行する場合
podman-compose up -d --build
<br>
==== サービスの起動 ====
停止中のサービスを起動する。<br>
podman-compose start
<br>
==== サービス再起動 ====
サービスを再起動する。<br>
podman-compose restart
<br>
==== サービスの停止 ====
起動中のサービスを停止する。<br>
podman-compose stop
<br>
==== サービスの削除 ====
YAMLファイルに記述されているサービスからコンテナを停止して、そのコンテナとネットワークを削除する。<br>
<code>--rmi all</code>オプションを付加することにより、サービスイメージも削除することができる。<br>
podman-compose down
# サービスイメージの停止および削除
podman-compose down --rmi all
<br>
==== サービスの強制削除 ====
停止中のコンテナを削除する。<br>
podman-compose rm
<br>
==== サービスの強制消去 ====
サービスを強制停止する。<br>
podman-compose kill
<br>
==== コマンドの実行 ====
引数で指定したサービスのコンテナ内でコマンドを実行する。<br>
podman-compose run <サービス名> <コマンド> <引数 1> <引数 2> <引数...>
# 例: docker-compose.yml内のdbを強制的にpullして、dbおよびwebを実行する
podman-compose run db web new . --force --database=mysql
<br>
==== サービスの設定の確認 ====
YAMLファイルで記述されている設定を表示する。<br>
podman-compose config
<br>
==== サービスログの確認 ====
サービスのログを表示する。<br>
podman-compose logs
<br><br>
<br><br>



2024年2月5日 (月) 09:45時点における版

概要

podman composeコマンドは、docker-composeやpodman-composeのような外部のComposeプロバイダの薄いラッパーである。
つまり、podman composeはConpose機能を実装する別のツールを実行するが、Composeプロバイダがローカルの Podmanソケットと透過的に通信できるように環境を設定する。

指定したオプション、コマンド、引数は直接composeプロバイダに渡される。
デフォルトのComposeプロバイダは、docker-composeとpodman-composeである。

両方ともインストールされている場合は、docker-composeが優先される。
なぜなら、docker-composeはCompose仕様のオリジナルの実装であり、サポートされているプラットフォーム (Linux、MacOS、Windows) で広く使用されているからである。

デフォルトの挙動を変更する場合や、選択したプロバイダのカスタムインストールパスが必要な場合は、containers.confファイルのcompose_providerフィールドを変更する必要がある。
また、環境変数PODMAN_COMPOSE_PROVIDERを設定して変更することもできる。


Podman Composeのインストール

パッケージ管理システムからインストール

# RHEL
sudo dnf install podman-compose

# SUSE
sudo zypper install python3-podman-compose


PyPIからインストール

# Python3のルートディレクトリにインストールする場合
pip3 install podman-compose python-dotenv PyYAML

# Python3のユーザディレクトリにインストールする場合
pip3 install --user podman-compose python-dotenv PyYAML

# GithubからPodman Composeを直接インストールする場合
pip3 install https://github.com/containers/podman-compose/archive/devel.tar.gz
pip3 install python-dotenv PyYAML


ソースコードからインストール

まず、PyYAMLおよびPython-DotEnvをインストールする。
パッケージ管理システムからPyYAMLおよびPython-DotEnvをインストールする場合、依存関係が多すぎるため、PyPIからインストールすることを推奨する。

pip3 install --user python-dotenv PyYAML


もし、CNIネットワークを使用する場合は、Podman DNSname Pluginをインストールする。
ただし、2023年以降、Podman DNSname Pluginの開発は止まっているため、netavarkaardvark-dnsを使用することを推奨する。

# Podman DNSname Pluginのインストール
git clone https://github.com/containers/dnsname.git
cd dnsname

make -j $(nproc) PREFIX=<Podmanのインストールディレクトリ>
make install PREFIX=<Podmanのインストールディレクトリ>

# netavarkおよびaardvark-dnsをパッケージ管理システムからインストール
sudo zypper install netavark aardvark-dns


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"



YAMLファイル

 version: '<Composeファイルのバージョン (docker-compose.ymlのバージョンと同じ)>'  # 例: '3'
 services:
    <コンテナ名 1 (任意の名前)>:                   # 例: sample1
       image: <イメージ (リポジトリ:タグ) を指定する>   # イメージからコンテナを生成する場合、imageを指定
       command:
          <コンテナ起動時に実行するコマンド>          #  例: --default-authentication-plugin=mysql_native_password>
       volumes:                               # ホストとコンテナでファイルを同期する場合等
          - <ホスト側のパス 1:コンテナのパス 1>      #   例: /tmp/mysql/mysql_data:/var/lib/mysql
          - <ホスト側のパス 2:コンテナのパス 2>
       ports:                                 # ポート転送 (ポートフォワーディング) を行う場合
          - <ホスト側のポート 1:コンテナのポート 1>    # 例: 63306:3306
          - <ホスト側のポート 2:コンテナのポート 2>
       environment:                           # 環境変数を指定する場合
          <環境変数名 1: 環境変数値>              # 例: MYSQL_ROOT_PASSWORD: password
          <環境変数名 2: 環境変数値>              # 例: MYSQL_PORT: 3306
 
    <コンテナ名 2 (任意の名前)  例: sample2)>:
       build: <Dockerfileのファイルパス>         # Dockerfileを使用する場合、buildを指定
       volumes:                              # ホストとコンテナでファイルを同期する場合等
          - <ホスト側のパス:コンテナのパス>
       ports:                                # ポート転送 (ポートフォワーディング) を行う場合
          - <ホスト側のポート:コンテナのポート>
       environment:                          # 環境変数を指定する場合
          <環境変数名 1: 環境変数値>
          <環境変数名 2: 環境変数値>
          <環境変数名 3: 環境変数値>
       depends_on:                           # 依存関係を設定する場合 (他のコンテナと連携する場合)
          - <コンテナ名>                        # 例: sample1



Composeコマンド

YAMLファイルを実行するには、podman-compose -dコマンドで実行する必要がある。

Composeコマンドは、YAMLファイルが存在するディレクトリで行う。

サービスイメージの確認

podman-compose images


サービスイメージの作成

サービスイメージのビルドを実行する。
YAMLファイルにimage:が記述されている場合、そのイメージ名がローカルに存在しなければ、リモートからプルする。
YAMLファイルに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


サービスの削除

YAMLファイルに記述されているサービスからコンテナを停止して、そのコンテナとネットワークを削除する。
--rmi allオプションを付加することにより、サービスイメージも削除することができる。

podman-compose down

# サービスイメージの停止および削除
podman-compose down --rmi all


サービスの強制削除

停止中のコンテナを削除する。

podman-compose rm


サービスの強制消去

サービスを強制停止する。

podman-compose kill


コマンドの実行

引数で指定したサービスのコンテナ内でコマンドを実行する。

podman-compose run <サービス名> <コマンド> <引数 1> <引数 2> <引数...>

# 例: docker-compose.yml内のdbを強制的にpullして、dbおよびwebを実行する
podman-compose run db web new . --force --database=mysql


サービスの設定の確認

YAMLファイルで記述されている設定を表示する。

podman-compose config


サービスログの確認

サービスのログを表示する。

podman-compose logs