#author("2019-12-20T12:56:58+00:00","","") #mynavi(dockerメモ) #setlinebreak(on); * 概要 [#fbcf9482] * 目次 [#ue9f4bb8] #contents - 関連 -- [[dockerメモ]] -- [[dockerでサクッとNginx環境構築]] -- [[Nginx+uwsgi+Flaskをdockerで動かす]] -- [[LAMP環境のdockerイメージを作る]] * Dockerネットワークによる通信 [#a903cfc0] #html(<div class="pl10">) dockerネットワークを作成 #myterm2(){{ docker network create my-docker-network }} 作成した dockerネットワークを確認 #myterm2(){{ docker network inspect my-docker-network [ { "Name": "my-docker-network", "Id": "ef9813e65909c9b9cdf3bdba399b791a9c3be9240b591fc3d84c6fcf2cc28d73", "Created": "XXXX-XX-XXTXX:XX:XX.XXXXXXZ", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.22.0.0/16", "Gateway": "172.22.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ] }} 試しに2つのコンテナを用意して双方から通信してみる。 ** コンテナの作成 [#v728d265] #html(<div class="pl10">) 作業用ディレクトリの作成 #myterm2(){{ mkdir -p container_a/www mkdir -p container_b/www }} container_a/Dockerfile 及び container_b/Dockerfile (内容は同じ) #mycode2(){{ FROM nginx:latest # 通信確認用にcurlを入れておく RUN apt-get -y update RUN apt-get -y install curl CMD nginx -g "daemon off;" }} container_a/www/index.html #mycode2(){{ <!doctype html> <html> <h1>Container A!</h1> </html> }} container_b/www/index.html #mycode2(){{ <!doctype html> <html> <h1>Container B!</h1> </html> }} #html(</div>) ** コンテナのビルド/起動 [#g3eccecf] #html(<div class="pl10">) 以下、ビルドイメージ名は a と b で変えているが、Dockerfile の内容は同じなので別にイメージ名変える必要はない。 コンテナAのビルド 及び起動 #myterm2(){{ docker build -t nginx-a ./container_a docker run --rm --name container-a -v `pwd`/container_a/www:/usr/share/nginx/html --network my-docker-network -d nginx-a }} コンテナBのビルド 及び起動 #myterm2(){{ docker build -t nginx-b ./container_b docker run --rm --name container-b -v `pwd`/container_b/www:/usr/share/nginx/html --network my-docker-network -d nginx-b }} #html(</div>) ** コンテナに入って通信確認 [#o6fac846] #html(<div class="pl10">) コンテナAに入る。 #myterm2(){{ docker exec -it container-a /bin/bash }} 自身(コンテナA)にリクエストを飛ばしてみる。 #myterm2(){{ curl http://localhost <!doctype html> <html> <h1>Container A!</h1> </html> }} 自身(コンテナA)にコンテナ名でリクエストを飛ばしてみる。 #myterm2(){{ curl http://container-a <!doctype html> <html> <h1>Container A!</h1> </html> }} コンテナBにリクエストを飛ばしてみる。 #myterm2(){{ curl http://container-b <!doctype html> <html> <h1>Container B!</h1> </html> }} #html(</div>) #html(</div>) * docker-composeで行う場合 [#k9f5c099] #html(<div class="pl10">) #html(</div>)