■ はじめに
図書館で借りたDockerの本を借りて勉強。 今回は、docker networkを学んだので、まとめる。
補足1:元ネタとなった図書館で借りた本
目次
【1】Docker Network 1)何のために使う? 【2】Docker Network の種類 1)bridge 2)host 3)none 4)overlay 【3】ネットワークの主なコマンド 1)docker network create 2)docker network ls 3)docker network inspect 4)docker network rm 5)docker network prune 【4】複数コンテナへの適用 使用例1:WordPress/MySQL 使用例2:Redmine/MariaDB
【1】Docker Network
1)何のために使う?
* 例えば、WordPressの場合、以下で構成できる ~~~~~~~ [1] WordPressコンテナ [2] DBコンテナ(今回の場合、「MySQLコンテナ」) ~~~~~~~ * 「[1] WordPressコンテナ」⇒「[2] DBコンテナ」へアクセスする必要があるのだが そのためには、仮想的なネットワークを作り、双方のコンテナを所属させることで コンテナ間の通信が可能になる => そのため、「docker network」が必要。
【2】Docker Network の種類
https://qiita.com/MetricFire/items/b731c84975bd9894748d
https://docs.docker.jp/engine/userguide/networking/dockernetworks.html
# | ネットワーク名 | 概要 |
---|---|---|
1 | bridge | コンテナ間、コンテナ外と通信できるネットワーク |
2 | host | Dockerホストのネットワークをそのまま使う |
3 | none | コンテナ間、コンテナ外とも通信できない |
4 | overlay | 複数ホストがある場合に使用 |
docker run コマンド例
docker run --network=host httpd:2.4-alpine
docker compose での例
version: '3' services: web: image: httpd:2.4-alpine expose: - "80" network_mode: host
1)bridge
* Dockerホストやコンテナは、 1つの仮想的なbridgeネットワークで接続され、IPアドレスが割り当てられる => その bridgeネットワークにあるコンテナに接続できる * コンテナに対するネットワークの隔離も提供するが、 同じbridgeネットワークに接続していないコンテナとは接続できない
https://docs.docker.jp/network/bridge.html
2)host
* 全Dockerコンテナで、 ホスト側のネットワーク名前空間を共有して使うことができる * ホストポートを使うので、-p 8080:8080 のようなマッピングができない
https://docs.docker.jp/network/host.html
3)none
* 外部ネットワークインターフェイスがないが、 ループバックインターフェイスを受信 * バッチ処理など、外部と通信させたくないコンテナを作成できる
4)overlay
* 複数ホスト(Docker Swarm/k8s etc)がある場合に使用
【3】ネットワークの主なコマンド
Command | Explanation |
---|---|
docker network create | Docker ネットワーク作成 |
docker network rm | Docker ネットワーク削除 |
docker network ls | Docker ネットワーク一覧表示 |
1)docker network create
# クライアントとデーモン API の両方が、少なくとも 1.21 が必要 docker network create hello-network # 「33b17...」的な文字列(ネットワークID)が表示されるはず
2)docker network ls
# 確認 docker network ls <Output> NETWORK ID NAME DRIVER SCOPE af5e..... bridge bridge local 964e...... host host local f304..... none null local
3)docker network inspect
* Networkの詳細を確認
https://docs.docker.jp/engine/reference/commandline/network_inspect.html
構文
# docker network inspect <ネットワーク名>
docker network inspect bridge
出力結果例
[ { "Name": "bridge", "Id": "af5....", "Created": "2024-10-23T21:25:51.299368105+09:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.XXX.XXX.XXX/16", "Gateway": "172.XXX.XXX.XXX" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {} } ]
4)docker network rm
# 作成失敗して削除したい場合 docker network rm hello-network
5)docker network prune
* 使用していないネットワークを全て削除
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/network_prune/
https://docs.docker.jp/engine/reference/commandline/network_prune.html
$ docker network prune WARNING! This will remove all custom networks not used by at least one container. Are you sure you want to continue? [y/N] y
【4】複数コンテナへの適用
* docker network で、仮想的なネットワークを作成したら、 次にそれをコンテナに適用する必要がある => docker container run の オプション「--net」として指定する
コマンド例
# --net <Network Name> docker container run --name hello-container --net hello-network ...
使用例1:WordPress/MySQL
* 以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2022/04/29/000000
使用例2:Redmine/MariaDB
Docker ~ Redmine ~
https://dk521123.hatenablog.com/entry/2023/01/09/000000
関連記事
Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2017/09/23/235818
Docker ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2018/04/10/234030
Docker ~ 基本編 / Data Volume ~
https://dk521123.hatenablog.com/entry/2018/09/08/222100
Docker ~ GO言語 ~
https://dk521123.hatenablog.com/entry/2022/01/14/102719
Docker ~ Webサーバ ~
https://dk521123.hatenablog.com/entry/2022/02/22/000000
Docker ~ WordPress ~
https://dk521123.hatenablog.com/entry/2022/04/29/000000
Docker ~ Redmine ~
https://dk521123.hatenablog.com/entry/2023/01/09/000000
Docker ~ Docker 環境をクリーンにする ~
https://dk521123.hatenablog.com/entry/2024/07/25/230911