■ Docker学習 #25:Docker コンテナ間通信

前回からの続き…
Docker #24 Docker Compose


コンテナについて、以下サイトを参考に学習する。
Docker入門(第五回)〜コンテナ間通信〜 | さくらのナレッジ


環境


Windows 10 1909 (18363.959)
Docker Toolbox : Docker version 19.03.1
コンテナ CentOS:8.2.2004
Apache 2.4.37
PHP 7.2.24


概要


これまで3つのコンテナを作成し --link を使って通信を行っていたが、この昨日はレガシー機能であり、将来的に削除される可能性があるとのこと。
Dockerには "Dockerネットワーク" を作成してコンテナ名で通信できる機能があるっぽいので、これを使って通信するように変更してみる。

※ 公式DOC Docker コンテナ・ネットワークの理解


準備

これまで作成したコンテナをすべて削除
$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                      PORTS                    NAMES
fe84faa00bc1        my-php                  "/startup.sh"            17 hours ago        Exited (0) 46 minutes ago                            test_my-php_1
8136f4602d50        phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   17 hours ago        Exited (0) 10 hours ago                              test_my-phpmyadmin_1
c8a702c53782        mariadb:latest          "docker-entrypoint.s…"   17 hours ago        Up 50 minutes               0.0.0.0:3306->3306/tcp   test_my-mariadb_1
f7bb0d75ad2e        phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   18 hours ago        Exited (0) 18 hours ago                              my-phpmyadmin1
7ae0096c85d7        my-php                  "/startup.sh"            18 hours ago        Exited (137) 18 hours ago                            my-php1

Dockerネットワーク動作確認


1) 既存のDockerネットワークを確認
Dockerネットワークを確認するには "docker network ls" コマンドを使用する。
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
71a3a76fceec        bridge              bridge              local
126de15f15d2        host                host                local
4c6b80365629        none                null                local

2) MariaDBコンテナ起動
$ docker run -it -d --rm -p 3306:3306 \
> -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=docker \
> -e MYSQL_USER=docker -e MYSQL_PASSWORD=docker \
> --name my-mariadb1 mariadb:latest

既定でコンテナは bride ネットワークに接続される。
"docker network inspect bridge" でbridgeネットワークの詳細を確認。
$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "71a3a76fceecef58d4695bbe2c5af93dbd6c3805d505e5eaea692bf6c7285f64",
        "Created": "2020-07-28T19:26:36.021723092Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "c276d05f9e83ee2008c05aac16a5cf819a79db50124605c58ff1156780499266": {
                "Name": "my-mariadb1",
                "EndpointID": "89f49fda16d88ccd51c5201bd89aebc0e66b0cbad8ae3c90d62e36ebd8dc61d7",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
 :省略
"Containers"欄に "my-mariadb1" が172.17.0.2 で接続されていることが確認できる。

3) Apache+PHPコンテナ起動
作成済みのmy-phpイメージを使いApache+PHPコンテナを起動
ただし、これまでは "--link my-mariadb1" パラメータでMariaDBとの接続を行っていたが、このパラメータは使用しない。
docker run -it -d -p 80:80 \
-v //c/Users/user/php/public-html/:/var/www/html/ \
--name my-php1 my-php

"docker network inspect bridge" でbridgeネットワークの詳細を確認。
 :省略
  "Containers": {
    "c276d05f9e83ee2008c05aac16a5cf819a79db50124605c58ff1156780499266": {
        "Name": "my-mariadb1",
        "EndpointID": "89f49fda16d88ccd51c5201bd89aebc0e66b0cbad8ae3c90d62e36ebd8dc61d7",
        "MacAddress": "02:42:ac:11:00:02",
        "IPv4Address": "172.17.0.2/16",
        "IPv6Address": ""
    },
    "f0dc2914a263aa06e24c550e9e945d1a9e1a1be48717cb7765d5d498ac073a8f": {
        "Name": "my-php1",
        "EndpointID": "beec980140400724cdcaaaeb06bf245fabfeae5366a67dc4969a802aa6abb8db",
        "MacAddress": "02:42:ac:11:00:03",
        "IPv4Address": "172.17.0.3/16",
        "IPv6Address": ""
    }
  },
  :省略
bridgeネットワークに "my-php1" が 172.17.0.3 で接続された。

4) 疎通確認
my-php1 にbash接続し、my-mariadb1 のコンテナにpingが通るか確認。
"docker exec -it my-php1 /bin/bash"
"ping 172.17.0.2"
$ docker exec -it my-php1 /bin/bash
[root@f0dc2914a263 /]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.112 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.113 ms
→ 正常に通信できる。

念のため my-php1 のIPアドレスを "ip -a" で確認(172.17.0.3か?)
[root@f0dc2914a263 /]# ip  a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
        valid_lft forever preferred_lft forever
2: sit0@NONE:  mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
113: eth0@if114:  mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
        valid_lft forever preferred_lft forever
→ "docker network inspect bridge" で確認した通り "172.17.0.3" であった。

続く・・・


Docker学習

0 件のコメント:

その他の記事