LoginSignup
3
3
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

⑧1日10分で理解するコンテナ技術入門 - Docker Composeのネットワークについて -

Posted at

Docker Composeでネットワークを扱う方法

Docker Composeでネットワークを扱うには、docker-compose.yamlの最上位レイヤーでnetworkセクションを追加して、ネットワークについて記述する必要があります。ここで指定するネットワークは、既存のものであっても、新たに定義するものであってもかまいません。

既存のネットワークを使う場合

既存のネットワークが、docker network create my-external-networkコマンドで作成されたとすると、docker-compose.yamlは以下のようになります。

version: '3'

services:
  web:
    image: nginx
    networks:
      - my-external-network

networks:
  my-external-network:
    external: true

networks.my-external-network.externaltrueにすることで、既存のネットワークを指定できます。

新たに定義する場合

docker-compose.yaml内で新しいネットワークを定義する場合、docker-compose.yamlは以下のようになります。

version: '3'

services:
  web:
    image: nginx
    networks:
      - my-internal-network

networks:
  my-internal-network:
    driver: bridge

ボリュームの時と同様、driverを指定する必要があります。driverには以下のようなものが指定できます。

  • bridge
  • host
  • overlay
  • ipvlan
  • macvlan
  • none

他にも、サードパーティ製のネットワークプラグインをインストールして利用することもできます。

bridge

デフォルトのL3ネットワークドライバです。同じブリッジネットワークに接続しているコンテナとIPアドレスを使って通信できます(--linkオプションを使わない場合)。このドライバで通信できるのは、同じDockerデーモンホスト上で動作するコンテナです。異なるDockerデーモン(例えば違うホスト上のコンテナ)と通信する場合には、OSレベルでルーティングを管理するか、overlayを使います。

ブリッジネットワークはデフォルトで用意されていますが、ユーザー定義も行えます。ユーザー定義とデフォルトにはいくつかの違いがあります。

  • ユーザー定義の場合、コンテナ間のDNS名前解決を自動で提供
  • ユーザー定義の場合、コンテナの接続・切断をコンテナを停止させずに行える
  • デフォルトの場合、環境変数を共有する

また、ブリッジネットワークを使用する場合、外部にトラフィックを流すにはポートフォワーディングが必要になります。

host

ホスト側のネットワーク機能を直接使う場合に使用する。コンテナは自身に対してIPアドレスを割り当てないので、コンテナがポート80をバインドしてhostネットワークを使うと、ホストIPアドレス上のポート80で利用可能になります(ポートフォワーディングは不要)。

overlay

オーバーレイネットワークは複数のDockerデーモンと同時に接続します。主にDocker Swarmを使う際に用いますが、今回はコンテナオーケストレーションツールとしてKubernetesを説明するため、省略します。

ipvlan

IPvlanネットワークは、IPv4とIPv6の両IPアドレス割り当てを、ユーザーがまとめてコントロール可能にします。

macvlan

macvlanネットワークは、コンテナに対してMACアドレスを割り当て可能にし、ネットワーク上の物理デバイスとして見えるようにするL2ネットワークです。DockerデーモンはコンテナのMacアドレスに従って、トラフィックをコンテナに対して転送します。MACアドレスを用いた通信を行いたい場合に使用します。

none

全てのネットワーク機能を無効化します。このドライバを指定すると、コンテナ内では、ループバックデバイスのみが作成されます。

まとめ

今回は、docker composeでネットワークを扱う方法を説明しました。driverは様々な種類がありますが、とりあえずbridgeだけ使えるようにしておけばよいかと思います。次回は、docker composeを使ったサービスのスケーリングについて説明します。

3
3
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
3
3