はじめに
Docker composeで、パブリックネットワークとプライベートネットワークを持つコンテナを作成する方法を紹介する。インターネットアクセス可能なパブリックネットワークと、内部通信のみを行うプライベートネットワークを分けたい場合に有用。
方法
コンテナ内の1つのサービスに、インターネット接続のあるパブリックネットワークと、インターネット接続のないプライベートネットワークを同時に割り当てる。また、コンテナ内の別のサービスには、プライベートネットワークを割り当てる。インターネット接続は、ブリッジを通じてホストネットワークからインターネットへ接続させる。設定例を以下に示す。
項目 | 設定値 |
---|---|
プライベートIPアドレス範囲 | 192.168.10.0/24 |
パブリックIPアドレス範囲 | 192.168.20.0/24 |
インターネット接続用ゲートウェイ | 192.168.20.1 |
アプリケーションサーバ用パブリックIPアドレス | 192.168.20.2 |
アプリケーションサーバ用プライベートIPアドレス | 192.168.10.2 |
データベースサーバ用プライベートIPアドレス | 192.168.10.3 |
Docker composeファイルは以下のようにする。
- ポイント
- プライベートネットワーク
-
internal: true
を設定する -
gateway
を設定しない
-
- パブリックネットワーク
-
gateway
を設定する
-
- プライベートネットワーク
docker-compose.yml
version: "3"
services:
app:
image: ubuntu
command: ["/.app"] # 自身のアプリケーションに置き換える
networks:
internal_net:
ipv4_address: 192.168.10.2
external_net:
ipv4_address: 192.168.20.2
db:
image: postgres
networks:
internal_net:
ipv4_address: 192.168.10.3
networks:
internal_net:
driver: bridge
internal: true # プライベートネットワークの場合に設定
ipam:
driver: default
config:
- subnet: "192.168.10.0/24"
external_net:
driver: bridge
ipam:
driver: default
config:
- subnet: "192.168.20.0/24"
gateway: "192.168.20.1" # インターネット接続のために設定
まとめ
Docker composeで、パブリックネットワークとプライベートネットワークを持つコンテナを作成する方法を紹介した。インターネットアクセス可能なパブリックネットワークと、内部通信のみを行うプライベートネットワークを分けたい場合に有用。
参考