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 network inspect bridge" でbridgeネットワークの詳細を確認。
ただし、これまでは "--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"
念のため my-php1 のIPアドレスを "ip -a" で確認(172.17.0.3か?)
"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:→ "docker network inspect bridge" で確認した通り "172.17.0.3" であった。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学習
0 件のコメント:
コメントを投稿