0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker composeで、パブリックネットワークとプライベートネットワークを持つコンテナを作成する方法

Last updated at Posted at 2024-11-21

はじめに

 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で、パブリックネットワークとプライベートネットワークを持つコンテナを作成する方法を紹介した。インターネットアクセス可能なパブリックネットワークと、内部通信のみを行うプライベートネットワークを分けたい場合に有用。

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?