このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

コンテナのネットワーク①

Dockerのネットワークの概要

 コンテナのネットワークには、Dockerが提供するデフォルトのネットワークとユーザーが作成できるカスタムネットワークがあります。デフォルトのネットワークには、bridge、host、noneの3つがありますが、主にbridgeが使用されます。

 コンテナは通常、新しいコンテナを作成するときに自動的にbridgeネットワークに接続されます。必要に応じて、ユーザーは独自のネットワークを作成してコンテナを接続することができます。ネットワークの適切な管理とセキュリティ設定により、コンテナ間通信の隔離やセキュリティが確保されます。

 ここでは、前半でDockerのネットワークについて解説し、後半でDockerのネットワークを確認していきます。

仮想ネットワーク

 コンテナ間を繋ぐネットワークは必要です。例えば、WordPressコンテナは、MariaDBコンテナにデータを保存するためにネットワークが必要です。Dockerでは、コンテナが使う仮想ネットワークを提供しています。

Dockerのデフォルトネットワーク

Docker をインストールすると、自動的に3つのネットワークがデフォルトで作成されます。

種類説明
bridge(ブリッジ)これはデフォルトのネットワークで、新しいコンテナがこのネットワークに接続されます。コンテナを作成する際にネットワークの指定をしない場合、このネットワークに接続されます。
host(ホスト)このネットワークは、ホストマシンのネットワークと同じです。コンテナがこのネットワークに接続されると、ホストマシンと同じネットワークインターフェースを共有します。
none(無し)このネットワークは、コンテナがネットワークに接続されないことを示します。通常、このオプションはネットワークを使用しない場合や、カスタムネットワークを作成する際に使用されます。
Dockerのデフォルトネットワーク

ネットワーク管理コマンド

 「docker network ls」コマンドを使用すると、システムに存在するDockerネットワークを一覧表示できます。これにより、現在のネットワーク状態を把握し、適切なネットワークを選択してコンテナを作成できます。

・docker network ls コマンドの構文
docker network ls [OPTIONS]
オプション
  • –filter, -f: フィルタリング条件を指定してネットワークをフィルタリングします。たとえば、名前やドライバーなどの属性でネットワークをフィルタリングできます。
  • –format: 出力フォーマットを指定します。デフォルトではテーブル形式ですが、他のフォーマット(json、yamlなど)も指定できます。
  • –quiet, -q: コンテナIDのみを表示します。

主に使われるネットワーク

 Dockerでは、コンテナを作成する際にネットワークの指定をしない場合、デフォルトでbridgeネットワークに接続されます。これは、最も一般的に使用されるネットワークであり、新しいコンテナが他のコンテナと通信するための標準的な手段です。

その他のネットワーク

 Dockerでは、これらのデフォルトネットワーク以外にも、ユーザーが独自のネットワークを作成することができます。これにより、複数のコンテナを特定のネットワークにまとめたり、特定のネットワークに接続されたコンテナ間での通信を制御したりすることが可能です。

bridgeネットワークの特徴

 bridgeネットワークは、コンテナ間通信に使用されるデフォルトのネットワークです。このネットワークでは、Dockerデーモンがホスト上に仮想ブリッジを作成し、コンテナがそのブリッジに接続されます。ブリッジは、ホストの物理ネットワークと接続され、コンテナ間通信を仲介します。

ネットワークのカスタマイズ

 必要に応じて、ユーザーは「docker network create」コマンドを使用して独自のネットワークを作成し、そのネットワークにコンテナを接続することができます。これにより、異なる用途やセキュリティ要件に応じたネットワーク環境を構築できます。

 「docker network create」コマンドは、Dockerコンテナ間の通信を管理するためのDockerネットワークを作成するためのコマンドです。このコマンドを使用することで、複数のコンテナを作成し、それらのコンテナが互いに通信できるようにすることができます。

基本的な構文は以下の通りです。

docker network create [OPTIONS] NETWORK

 ここで、NETWORKは作成するネットワークの名前を指定します。OPTIONSには様々な設定が可能ですが、一般的なものは以下の通りです。

  • --driver:ネットワークのドライバを指定します。デフォルトは「bridge」ですが、他にも「overlay」や「macvlan」などがあります。
  • --subnet:ネットワークのCIDR形式のサブネットを指定します。
  • --gateway:ネットワークのゲートウェイIPアドレスを指定します。

 例えば、以下のコマンドを実行すると、名前が「my_network」というブリッジドライバを使用したDockerネットワークが作成されます。

docker network create --driver bridge my_network

 これで、このネットワークに接続されたコンテナ同士は互いに通信できるようになります。通常、このネットワークを使用してコンテナを起動する際には、「--network」オプションを使用して特定のネットワークに接続します。

ネットワークの管理とセキュリティ

 ネットワークはコンテナ化されたアプリケーションの重要な側面であり、適切な管理とセキュリティ設定が必要です。適切なネットワーク設計とセキュリティポリシーの適用により、コンテナ間通信の隔離、アクセス制御、トラフィックの監視などが実現できます。

Dockerネットワークの確認

Dockerのデフォルトで作られるネットワークを実際に操作をしながら、確認していきます。

不要なDockerオブジェクトの削除

まず、不要なDockerオブジェクトをすべて削除しておきます。

以下のコマンドを実行します。

・「docker system prune -a」コマンドを実行します。

Are you sure you want to continue? [y/N] の質問には「y」と入力します。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
6fb346f693d70c583a61e03e0a20e6ea4d1c3511dc72708c9ef217b86580d05c

Deleted Networks:
flask2_default

Deleted Images:
untagged: flask2-flaskweb2:latest
deleted: sha256:aeccc6e76ea4c5fee6b5026b34f21ed16dd063d2d14399df9dac74babd4429ca
deleted: sha256:266d283b273f22e59b1366cbf4fa2c7832e821c394341ad6201f52f2839f2026

Deleted build cache objects:
sdi715zwaisz1qd3nkh7e8wkf
gftpwm0ocybqvblqrkc9exwqq
sbp3cvt6ff7p6eh9ra193d7ri
yrd5e3hhv55rsk3xzhdmtu4mt
gucnghedzabui5iqdfjdsd13t
h9evpaps89fwrbexj5l7zr6h6
6exdgrn1iun9gaxoz1617yqsm
oh3bejiuapfnepwc3om5lejaa
jxyryki5z2zhp82yirqhr3t57
cviokvrgjjuw8qlv18wf9kj90
u5k0hebqnkmen4u6zw1o3rqdm
xm99nzinb33vi31u3l0qyalzn
lfdx3o94yc2pu1vgktaz1l39e

Total reclaimed space: 30.43MB

・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。

環境によって削除されずに残っているDockerオブジェクトは異なります。

Dockerネットークの確認

Dockerコンテナがない状態で、Dockerのネットワークを確認します。

・「docker network ls」コマンドを実行します。

PS C:\Users\joeac> docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
78a52a23e094   bridge    bridge    local
9cb62d828092   host      host      local
1bafb53e8f6c   none      null      local

 Dockerをインストール時に作成される bridge、host、noneの3つのネットワークがあることが確認できます。

関連コンテンツ