サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 72 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

Docker入門から(第7回:Dockerネットワークについて)

tin
tin
2023-03-11 / 0 コメント / 2 いいね! / 99 読み / 2,072 文字

背景

Docker コンテナ・ネットワークの理解(👇公式サイト)
https://docs.docker.jp/engine/userguide/networking/dockernetworks.html

公式サイトの説明はあるものの、自分の理解で簡単にまとめてみます。

1. Dockerネットワークとは

Dockerネットワークは、Dockerコンテナ間やコンテナとホストOS間のネットワーク接続を管理するための仕組みです。

2. Dockerネットワークの常用コマンド

Dockerネットワークを操作するためのコマンドは、以下のようになります。

[root@localhost myflie]# docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.

①docker network connect:指定されたコンテナをDockerネットワークに接続するためのコマンドです。
例えば、既存の nginx コンテナを my-network という名前のDockerネットワークに接続する場合は、以下のように実行します。
docker network connect my-network nginx

②docker network create:新しいDockerネットワークを作成するためのコマンドです。
③docker network disconnect:指定されたコンテナをDockerネットワークから切断するためのコマンドです。
④docker network inspect:指定されたDockerネットワークの詳細情報を表示するためのコマンドです。
⑤docker network ls:現在作成されているDockerネットワークの一覧を表示するためのコマンドです。

これらのコマンドを使用することで、Dockerネットワークを作成・管理することができます。

3. Dockerネットワークは何ができますか

Dockerネットワークを使用することで、以下のようなことができます。

3-1. 容器間の相互通信とポートマッピング

Dockerでは、複数のコンテナを同じ仮想ネットワーク内に配置し、それらのコンテナ間で通信することができます。これにより、マイクロサービスアーキテクチャなどの複雑なアプリケーションを構築する際に、各コンテナが必要な機能を担当することができます。また、コンテナごとに異なるポート番号を割り当てることで、各コンテナに直接アクセスできるようになります。

3-2. 容器のIPアドレスの変更に影響を受けない(サービス名によるネットワーク通信だから)

Dockerでは、コンテナのIPアドレスが変更されることがあります。しかし、Docker内部では、各コンテナに一意のサービス名が付与されます。このため、コンテナのIPアドレスが変更されても、サービス名を使用することで他のコンテナとのネットワーク通信を維持することができます。これにより、コンテナの移動や再起動などが発生しても、他のコンテナとの通信に影響を受けずにアプリケーションを実行することができます。これは便利ですね!(^^)

4. Dockerネットワークの種類

Dockerには、以下の3つのネットワークタイプがあります。

[root@localhost myflie]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
90f98361e6f9   bridge    bridge    local
84f80231780e   host      host      local
ca51e547a48d   none      null      local
[root@localhost myflie]# 

ネットワークタイプ(driver) 説明
ブリッジ(bridge) docker0という仮想ブリッジに接続、デフォルトモード。Dockerデーモンが自動的にコンテナにIPアドレスを割り当て、各コンテナを識別できるようにします。また、Dockerコンテナのネットワークは、外部から見えないため、セキュリティ上のリスクを減らすことができます。
ホスト(host) DockerコンテナがホストOSのネットワークスタックに直接接続することができるネットワークです。コンテナはホストOSと同じIPアドレスを持ち、ポートをバインドする必要がありません。高速なネットワーク通信が必要な場合に使用されます。
none(null) noneネットワークは、Dockerコンテナがネットワークに接続されていない状態を表します。一時的にネットワークから隔離したい場合に使用されます

5. デモ

実際の使用から、理解を深めます。

5-1. ブリッジネットワークの新規

⇒ デフォルトタイプはブリッジです

[root@localhost myflie]# docker network create lnmp
00d581caf44823b566e25dcb4da7e26b67e1f7066216affc87c9e964018e2c73
[root@localhost myflie]# 
[root@localhost myflie]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
90f98361e6f9   bridge    bridge    local
84f80231780e   host      host      local
00d581caf448   lnmp      bridge    local //新規したネットワーク
ca51e547a48d   none      null      local
[root@localhost myflie]# 

5-2. ブリッジネットワークの使用

次は「Linux+nginx+php」というLNP環境を構築する際、
新規した「lnmp」というネットワークを使って、コンテナ同士の通信を実現します。
ヒント:まさに、実践で「Dockerネットワークは何ができますか」に回答します。^ ^

①. 作業ディレクトリを準備

[root@localhost /]# mkdir -p /work/{www,/nginx/conf.d}
[root@localhost /]# mkdir -p /work/mysql/{data,conf.d}

②. nginxのconfigファイルを準備

⇒ fastcgi_pass php-fpm:9000; (ブリッジネットワークを使うため、ここはIPアドレスを意識しなくても良い)

vim /work/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;
    
    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }
    
    location ~ \.php(.*)$ {
        root             /var/www/html;      # php コンテナのワークディレクトリ      
        fastcgi_pass     php-fpm:9000;   # ブリッジネットワークを使うため、ここは固定のIPアドレスを記入することなく、相手先のサービス名(コンテナ名)で良い。  
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include          fastcgi_params;
    }

}

③. phpコンテナを起動(–net lnmpでブリッジネットワークを指定)

docker run -p 9000:9000 --name php-fpm \
-v /work/www:/var/www/html \
--net lnmp \
-d php:7.1-fpm

④. nginxコンテナを起動(–net lnmpでブリッジネットワークを指定)

docker run -p 80:80 --name nginx \
-v /work/www:/usr/share/nginx/html \
-v /work/nginx/conf.d:/etc/nginx/conf.d \
--net lnmp \
-e TZ=Asia/Tokyo \
--privileged=true \
-d nginx

⇒ nginxコンテナのネットワークを確認

[root@localhost /]# docker inspect nginx | tail -22
            "Networks": {
                "lnmp": {
                    "Gateway": "172.19.0.1",
                    "IPAddress": "172.19.0.3",
                    "IPPrefixLen": 16,
                    "MacAddress": "02:42:ac:13:00:02",
                    "DriverOpts": null

⑤疎通確認

  • テストケースを用意
echo "<?php phpinfo(); ?>" > /work/www/info.php
  • テスト結果
    ⇒ 疎通確認OK
    image-1678541644322

5-3. ブリッジネットワークを使用しない場合

👇ページをご参照ください
https://www.mina-isho.com/s/2303112221

5-4. 全体版のLNMP環境構築は次の記事へ

https://www.mina-isho.com/archives/2303120119

2
  • 2

コメント欄