はじめに
お疲れ様です。yuki_inkです。
初心者がコンテナを触ってみるシリーズ3回目です。
前回はDockerイメージを操作するコマンドを扱いました。
今回はDockerコンテナを操作するコマンドを扱います。
やったこと
- Dockerコンテナのライフサイクル関連(生成・起動・停止・削除)
- Dockerネットワーク関連
Dockerコンテナのライフサイクル関連
この記事の通り!以上!(省エネ)
特に詰まったところもなし。
Dockerネットワーク関連
Dockerには3種類のネットワークドライバが用意されている。
- bridge
- host
- none
それに紐づく形で、デフォルトで3つのネットワークが用意されている。
docker network ls
コマンドで表示。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
706a948510db bridge bridge local
180bff57838b host host local
24188df29a51 none null local
それぞれのネットワークの概要は以下の記事が分かりやすかった。
docker network inspect
コマンドでそれぞれのネットワークの詳細を見てみると面白かった。
まずはbridge。
IPレンジとして"172.17.0.0/16"が割り当てられた仮想ネットワークであることがわかる。
Linux bridge 機能を使った、Linux 上に別ネットワークを使う方式。
Linux bridge で仮想インタフェースを作成し、そのインタフェースに対してveth でDocker コンテナと接続する方式で、Docker ホストが属するネットワークとは異なる、仮想bridge 上のネットワークにコンテナを作成し、NAT 形式で外部のノードと通信する形式です。
Docker のコンテナ作成時に--net
オプションを特に何も指定しない場合は、自動的にこれが選択されたものとしてDocker は振る舞います。
$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "706a948510db59c6d90f9cc0c76ba850f0289eed7883f48386117cb3ea7bdf5d",
"Created": "2023-07-16T19:36:48.2796361+09:00",
"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": {},
"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": {}
}
]
続いてhost。
bridgeと違ってIPレンジを指定したりしておらず、あくまでホストのネットワーク設定に依存する。
host ネットワークは、Docker ホストと同じネットワークにスタックするドライバで、Docker ホストマシンと同じネットワークインタフェース、IP アドレスを持つようになります。
$ docker network inspect host
[
{
"Name": "host",
"Id": "180bff57838b5475edffe03f6af5722163ffac917f19b561c6ee6c4c9321b35e",
"Created": "2023-06-17T16:22:57.476293321+09:00",
"Scope": "local",
"Driver": "host",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
最後にnone。
書いてある内容はhostとほぼ変わらず、Driverの値だけ違う。
none ネットワークはnull なネットワークドライバの実装です。
ネットワーク接続を必要としないコンテナを作成する場合に使用されます。
$ docker network inspect none
[
{
"Name": "none",
"Id": "24188df29a518750d082a267cd419f7159c0c31a8da14c85ab81bad218fe181e",
"Created": "2023-06-17T16:22:57.459513915+09:00",
"Scope": "local",
"Driver": "null",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
Dockerネットワーク操作系のコマンドは以下記事がまとめっていた。
終わりに
今回はDockerコンテナ、ネットワーク周りのコマンドを扱いました。
次回は満を持してDockerfileを触ってみようかなと思います。