ユーザ用ツール

サイト用ツール


サイドバー

プログレス合同会社

広告

server:fedora-coreos:containers:podman

01 Podman実行環境

Fedora CoreOSではコンテナエンジンがDockerからPodmanに変更になっています。
別途インストールすればDockerも使用できるのですが、PodmanはDockerコマンドも一部を除き互換性がありますのでそのまま使用します。

コンテナ間通信

Podmanのコンテナ間通信はlocalhost(127.0.0.1)のポートを介して行われますが、このlocalhostには実行空間の概念があり、コンテナがリッスンしているのはコンテナ空間のlocalhostになります。
そのため、コンテナ起動時にポートマッピングしてやらないとコンテナの外とは通信できません

例えば、nginxとphp-fpmを別コンテナにしてnginxからproxyでphp-fpmに接続するとします。

   :
fastcgi_pass 127.0.0.1:9000;
   :
   :
listen = 127.0.0.1:9000
   :

nginxとphp-fpmの両コンテナともに

   :
ExecStart = /usr/bin/podman run -p 9000:9000 ~
   :

として起動しないとnginxとphp-fpmは9000ポートで接続することはできません。

しかし、これだとコンテナホストのポートとマッピングされてしまうため、コンテナホストの外部(インターネット空間)にポートを開けてしまうことになります。
ファイアウォール等で制御することも可能ですが、コンテナのIPアドレスが動的に変化したり等で結構面倒なことになります。

そこで、コンテナホストとコンテナの間にもう一つPodというものを入れることによって、コンテナホストの外には出さずに他のコンテナとポートマッピングすることが可能になります。

Podの作成と開始

まず、Podを作成します。

sudo podman pod create \
  -p 80:80 -p 443:443 \
  -p 25:25 -p 465:465 -p 587:587 -p 993:993 -p 995:995 \
  -p 221:221 -p 222:222 \
  -n container-pod

2行目
HTTP, HTTPSポートを外部とポートマッピングします。
3行目
メール用のポートを外部とポートマッピングします。
4行目
gitlab, gitea用のSSHポートを外部とポートマッピングします。

次に、作成したPodを起動します。

sudo podman pod start container-pod

Podとコンテナの接続

コンテナの起動時にPodと接続させます。

   :
ExecStart = /usr/bin/podman run --pod=container-pod ~
   :

Podと接続することによりlocalhostがコンテナ空間ではなくPod空間で動作するようになります。
そのため、各コンテナはポートマッピングしなくてもそれぞれのポートで通信ができます。

server/fedora-coreos/containers/podman.txt · 最終更新: 2020/07/04 by プログレス合同会社