📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の18版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
<code>podman compose</code>コマンドは、docker-composeやpodman-composeのような外部のComposeプロバイダの薄いラッパーである。<br>
<code>podman compose</code>コマンドは、docker-composeのような外部のComposeプロバイダの薄いラッパーである。<br>
つまり、<code>podman compose</code>はConpose機能を実装する別のツールを実行するが、Composeプロバイダがローカルの Podmanソケットと透過的に通信できるように環境を設定する。<br>
つまり、<code>podman compose</code>コマンドは、Compose機能を実装する別のツールを実行するが、ComposeプロバイダがローカルのPodmanソケットと透過的に通信できるように環境を設定する。<br>
<br>
<br>
指定したオプション、コマンド、引数は直接composeプロバイダに渡される。<br>
指定したオプション、コマンド、引数は直接composeプロバイダに渡される。<br>
9行目: 9行目:
なぜなら、docker-composeはCompose仕様のオリジナルの実装であり、サポートされているプラットフォーム (Linux、MacOS、Windows) で広く使用されているからである。<br>
なぜなら、docker-composeはCompose仕様のオリジナルの実装であり、サポートされているプラットフォーム (Linux、MacOS、Windows) で広く使用されているからである。<br>
<br>
<br>
デフォルトの挙動を変更する場合や、選択したプロバイダのカスタムインストールパスが必要な場合は、containers.confファイルの<code>compose_provider</code>フィールドを変更する必要がある。<br>
デフォルトの挙動を変更する場合や、選択したプロバイダのカスタムインストールパスが必要な場合は、~/.config/containers/containers.confファイルの<code>compose_provider</code>フィールドを変更する必要がある。<br>
また、環境変数<code>PODMAN_COMPOSE_PROVIDER</code>を設定して変更することもできる。<br>
また、環境変数<code>PODMAN_COMPOSE_PROVIDER</code>を設定して変更することもできる。<br>
<br><br>
== Composeファイル ==
デフォルトで読み込まれるファイル名を以下に示す。<br>
<br>
* podman-compose
*: docker-composeとの互換性のため、同じファイル名が使用される。
*# compose.yaml
*# compose.yml
*# docker-compose.yaml
*# docker-compose.yml
*: <br>
* docker-compose (Docker Compose V2含む)
*: 以下の順序で検索され、最初に見つかったファイルが使用される。
*# compose.yaml
*# compose.yml
*# docker-compose.yaml
*# docker-compose.yml
<br>
<u>※注意</u><br>
<u>podman-composeコマンドが古い場合、compose.yaml / compose.yml に対応していない場合がある。</u><br>
<u>複数のcomposeファイルが存在する場合は、明示的に <code>-f</code> オプションで指定することを推奨する。</u><br>
<br>
# 明示的にファイルを指定する場合
podman-compose -f my-compose.yml up -d
<br><br>
<br><br>


23行目: 48行目:
==== PyPIからインストール ====
==== PyPIからインストール ====
  # Python3のルートディレクトリにインストールする場合
  # Python3のルートディレクトリにインストールする場合
  pip3 install podman-compose python-dotenv PyYAML
  sudo pip3 install podman-compose python-dotenv PyYAML
   
   
  # Python3のユーザディレクトリにインストールする場合
  # Python3のユーザディレクトリにインストールする場合
  pip3 install --user podman-compose python-dotenv PyYAML
  pip3 install --user podman-compose python-dotenv PyYAML
   
   
  # GithubからPodman Composeを直接インストールする場合
  # GithubからPodman Composeをユーザディレクトリに直接インストールする場合
  pip3 install https://github.com/containers/podman-compose/archive/devel.tar.gz
  pip3 install --user https://github.com/containers/podman-compose/archive/devel.tar.gz
  pip3 install python-dotenv PyYAML
  pip3 install --user python-dotenv PyYAML
<br>
<br>
==== ソースコードからインストール ====
==== ソースコードからインストール ====
===== PyYAML / Python-DotEnvのインストール =====
まず、PyYAMLおよびPython-DotEnvをインストールする。<br>
まず、PyYAMLおよびPython-DotEnvをインストールする。<br>
パッケージ管理システムからPyYAMLおよびPython-DotEnvをインストールする場合、依存関係が多すぎるため、PyPIからインストールすることを推奨する。<br>
パッケージ管理システムからPyYAMLおよびPython-DotEnvをインストールする場合、依存関係が多すぎるため、PyPIからインストールすることを推奨する。<br>
  pip3 install --user python-dotenv PyYAML
  pip3 install --user python-dotenv PyYAML
# SLE / openSUSEの場合
pip3.6 install --user python-dotenv PyYAML
<br>
===== aardvark-dnsおよびnetavarkのインストール (推奨) =====
* パッケージ管理システムからインストールする場合
*# netavarkおよびaardvark-dnsをパッケージ管理システムからインストールする。
*#: <code>sudo zypper install netavark aardvark-dns</code>
*: <br>
* ソースコードからインストール
*# [https://github.com/containers/aardvark-dns/ aardvark-dnsのGithub]から、ソースコードをダウンロードする。<br>
*# ダウンロードしたファイルを解凍する。
*#: <code>tar xf aardvark-dns-<バージョン>.tar.gz</code>
*#: <code>cd aardvark-dns-<バージョン></code>
*#: <br>
*# aardvark-dnsをビルドおよびインストールする。
*#: <code>make PREFIX=<Podmanのインストールディレクトリ> -j $(nproc)</code>
*#: <code>make PREFIX=<Podmanのインストールディレクトリ> install</code>
*#: <br>
*# netavarkをインストールする。<br>netavarkを手動でインストールする場合は、[[インストール - Podman#最新のnetavarkが必要な場合|インストール - Podman#ソースコードからインストール#最新のnetavarkが必要な場合]]のページを参照すること。
<br>
<br>
===== Podman DNSname Pluginのインストール (非推奨) =====
もし、CNIネットワークを使用する場合は、Podman DNSname Pluginをインストールする。<br>
もし、CNIネットワークを使用する場合は、Podman DNSname Pluginをインストールする。<br>
ただし、2023年以降、Podman DNSname Pluginの開発は止まっているため、[https://github.com/containers/netavark/ netavark]と[https://github.com/containers/aardvark-dns/ aardvark-dns]を使用することを推奨する。<br>
ただし、2023年以降、Podman DNSname Pluginの開発は止まっているため、[https://github.com/containers/netavark/ netavark]と[https://github.com/containers/aardvark-dns/ aardvark-dns]を使用することを推奨する。<br>
45行目: 94行目:
  make -j $(nproc) PREFIX=<Podmanのインストールディレクトリ>
  make -j $(nproc) PREFIX=<Podmanのインストールディレクトリ>
  make install PREFIX=<Podmanのインストールディレクトリ>
  make install PREFIX=<Podmanのインストールディレクトリ>
# netavarkおよびaardvark-dnsをパッケージ管理システムからインストール
sudo zypper install netavark aardvark-dns
<br>
<br>
Podman ComposeのGithubから、ソースコードをダウンロードする。<br>
===== Podman Composeのインストール =====
[https://github.com/containers/podman-compose Podman ComposeのGithub]から、ソースコードをダウンロードする。<br>
  git clone https://github.com/containers/podman-compose.git -b stable
  git clone https://github.com/containers/podman-compose.git -b stable
<br>
<br>
65行目: 112行目:


== container-compose.ymlファイル ==
== container-compose.ymlファイル ==
==== ボリューム ====
<code>:Z</code>オプションは、SELinuxを有効にしている場合において、ボリュームの共有時にセキュリティコンテキストを設定するためのものである。<br>
SELinuxが無効の場合は、このオプションは無視される。<br>
<br>
container-compose.ymlファイルにおいて、<code>volumes</code>セクションを使用してボリュームを定義する場合、<br>
SELinuxを有効にしている場合は、ホストとコンテナ間で適切なセキュリティコンテキストが設定される。<br>
<syntaxhighlight lang="yaml">
services:
    <コンテナ名>:
      # ...略
      volumes:
          - /<ホスト側のパス>/:/<コンテナ内のパス>/:Z
</syntaxhighlight>
<br>
==== container-compose.ymlファイルの例 ====
  <syntaxhighlight lang="yaml">
  <syntaxhighlight lang="yaml">
  version: '<Composeファイルのバージョン (docker-compose.ymlのバージョンと同じ)>'  # 例: '3'
  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:
  services:
     <コンテナ名 1 (任意の名前)>:                   # 例: sample1
     <コンテナ名 1 (任意の名前) 例: sample1)>:
       image: <イメージ (リポジトリ:タグ) を指定する>   # イメージからコンテナを生成する場合、imageを指定
      # イメージからコンテナを生成する場合、imageを指定
       image: <イメージ (リポジトリ:タグ) を指定する>
       command:
       command:
           <コンテナ起動時に実行するコマンド>          # 例: --default-authentication-plugin=mysql_native_password>
           <コンテナ起動時に実行するコマンド  例: --default-authentication-plugin=mysql_native_password>>
       volumes:                               # ホストとコンテナでファイルを同期する場合等
      # ホストとコンテナでファイルを同期する場合等
           - <ホスト側のパス 1:コンテナのパス 1>      #   例: /tmp/mysql/mysql_data:/var/lib/mysql
       volumes:
           # 例: /tmp/mysql/mysql_data:/var/lib/mysql
          - <ホスト側のパス 1:コンテナのパス 1>
           - <ホスト側のパス 2:コンテナのパス 2>
           - <ホスト側のパス 2:コンテナのパス 2>
       ports:                                # ポート転送 (ポートフォワーディング) を行う場合
       # ポート転送 (ポートフォワーディング) を行う場合
           - <ホスト側のポート 1:コンテナのポート 1>   # 例: 63306:3306
      # 例: 63306:3306
      ports:
           - <ホスト側のポート 1:コンテナのポート 1>
           - <ホスト側のポート 2:コンテナのポート 2>
           - <ホスト側のポート 2:コンテナのポート 2>
       environment:                           # 環境変数を指定する場合
      # 環境変数を指定する場合
           <環境変数名 1: 環境変数値>             # 例: MYSQL_ROOT_PASSWORD: password
      # 例1: MYSQL_ROOT_PASSWORD: password
           <環境変数名 2: 環境変数値>             # 例: MYSQL_PORT: 3306
      # 例2: MYSQL_PORT: 3306
       environment:
           <環境変数名 1: 環境変数値>
           <環境変数名 2: 環境変数値>
      security_opt:
          # AppArmorプロファイルを適用する場合
          # /etc/apparmor.dディレクトリにプロファイルを配置して、apparmor_parserコマンドでプロファイルを読み込む必要がある
          - apparmor=<AppArmorプロファイル名>
   
   
     <コンテナ名 2 (任意の名前)  例: sample2)>:
     <コンテナ名 2 (任意の名前)  例: sample2)>:
       build: <Containerfileのファイルパス>     # Containerfileを使用する場合、buildを指定
       build:
       volumes:                             # ホストとコンテナでファイルを同期する場合等
          # Containerfileが存在するディレクトリ
          context: .
          # Containerfileのファイル名
          containerfile: Containerfile
      # または、以下に示す記述方法でもよい
      # Containerfileのファイルパス
      #build: <Containerfileのファイルパス>
      # 任意のコンテナ名を付けることもできる
       container_name: <任意のコンテナ名>
      # ホストとコンテナでファイルを同期する場合等
      volumes:
           - <ホスト側のパス:コンテナのパス>
           - <ホスト側のパス:コンテナのパス>
       ports:                                # ポート転送 (ポートフォワーディング) を行う場合
       # ポート転送 (ポートフォワーディング) を行う場合
      ports:
           - <ホスト側のポート:コンテナのポート>
           - <ホスト側のポート:コンテナのポート>
       environment:                         # 環境変数を指定する場合
      # 環境変数を指定する場合
       environment:
           <環境変数名 1: 環境変数値>
           <環境変数名 1: 環境変数値>
           <環境変数名 2: 環境変数値>
           <環境変数名 2: 環境変数値>
           <環境変数名 3: 環境変数値>
           <環境変数名 3: 環境変数値>
       depends_on:                          # 依存関係を設定する場合 (他のコンテナと連携する場合)
       # 依存関係を設定する場合 (他のコンテナと連携する場合)
           - <コンテナ名>                        # 例: sample1
      # この項目で指定されたコンテナが先に起動する
      depends_on:
           - <依存するコンテナ名  例: sample1>
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== ファイルの確認 ==
==== シンタックスの検証 ====
docker-compose.ymlファイルと同様、ファイルの検証は<code>podman-compose -f <container-compose.ymlファイルのパス> config</code>コマンドを実行する。<br>
container-compose.ymlファイルと同階層のディレクトリで実行する場合、または、環境変数<code>COMPOSE_FILE</code>がcontainer-compose.ymlファイルを指している場合は、<br>
<code>-f <container-compose.ymlファイル></code>の部分を省略することができる。<br>
podman-compose -f <container-compose.ymlファイルのパス> config
# または
podman-compose config  # コマンドを実行しているカレントディレクトリと同階層のディレクトリにcontainer-compose.ymlファイルが存在する場合
<br>
==== 検証エラー : networks ====
以下に示すようなエラーが出力される場合がある。<br>
RuntimeError: missing networks: <ネットワーク名>
<br>
Podman Composeでは、ネットワークの定義をサービスの前に配置する必要がある。<br>
このエラーは、networksセクションがサービスの前に配置されているために発生している。<br>
<br><br>
<br><br>


153行目: 281行目:
<code>--rmi all</code>オプションを付加することにより、サービスイメージも削除することができる。<br>
<code>--rmi all</code>オプションを付加することにより、サービスイメージも削除することができる。<br>
  podman-compose down
  podman-compose down
# ボリュームも含めて削除する場合
podman-compose down -v
   
   
  # サービスイメージの停止および削除
  # サービスイメージの停止および削除
185行目: 316行目:
  podman-compose up -d
  podman-compose up -d
  # または
  # または
  podman-compose up -d -f Container-compose.yml
  podman-compose up -d -f <Container-compose.ymlファイルのパス>
<br>
<br>
Kubernetes YAMLファイルへ変換する。<br>
Kubernetes YAMLファイルへ変換する。<br>
193行目: 324行目:


__FORCETOC__
__FORCETOC__
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:Web]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:Web]][[カテゴリ:コンテナ]]