Docker 网络
Docker网络
Docker在启动Docker引擎时创建了一个网络。然而,这个网络存在许多限制和提供旧功能的不便之处。
为了解决上述问题,我们介绍了一种创建新网络的方法。
网络确认
执行docker network ls命令,可以查看已创建的网络列表。
下面的执行结果是在安装Docker Engine时创建的网络。
# docker network ls
NETWORK ID NAME DRIVER SCOPE
fad5fce49196 bridge bridge local
d3cb99258187 host host local
a4377bf7ffba none null local
问题的要点
如果在Docker上启动新容器(例如使用docker run等命令)时没有特别指定网络,它将默认属于桥接网络。
这将导致以下类似的问题。
-
- 同じネットワーク内にあるコンテナに接続するにはLinkオプションを使用しなければいけなく不便
- Linkオプションはレガシーな(古い)機能となっている
公式文件中写着这样一句话。
在默认的网络桥上,Docker 不支持自动服务发现。
如果想要在这个默认的桥接网络上使用容器名称进行通信,就需要使用旧版的 docker run –link 选项来连接容器之间的通讯。
服务发现:Docker内部DNS服务器具有对网络上其他容器进行适当名称解析的功能。
创建网络
为了解决上述问题,我们需要建立一个新的网络。
Docker有两种网络类型,分别是bridge和overlay。
※上述的桥接和启动Docker时存在的桥接是不同的。
単一のホスト上でのネットワーク作成overlay複数のホスト上で動くエンジンを横断
複数のホストを横断するネットワーク
在这里,我们将看一下构建桥接网络的方法。
建立桥接网络
要指定 bridge,请使用 -d 选项指定 bridge。
即使不指定 -d,也会默认属于 bridge 网络。
$ docker network create -d bridge <任意のネットワーク名>
关于桥接网络
如果创建了一个桥。
不支持链接功能。
然而,该网络上的容器端口是可以公开的。
当需要从外部网络使用桥接网络的一部分时,这将非常方便。
如果你想从外部访问,请公开端口。
在用户定义的网络中,Docker内部DNS服务器可以对网络中的其他容器进行适当的名称解析。如果container1和container2属于同一个网络,那么在container1内部,可以通过名称对container2进行ping。
デフォルトの bridge ネットワーク(ドッカーを起動した時に自動的に作られるネットワーク)を使う場合は、この名前解決機能を利用できない事に注意。
リンク機能
Docker ネットワーク機能より以前は、Docker リンク機能を使いコンテナの相互発見や、特定のコンテナから別のコンテナに安全に情報を送信できました。
Docker ネットワークを導入したら、自動的にコンテナを名前で発見できます。
しかし、デフォルトの docker0 ブリッジ・ネットワークとユーザ定義ネットワークには違いがあるため、まだリンク機能を使うこともできます。
より詳しい情報については、 古いリンク機能 のデフォルト bridge ネットワークのリンク機能をご覧ください。
ユーザ定義ネットワークでリンク機能を使うには ユーザ定義ネットワークでコンテナをリンク をご覧ください。
网络相关命令
ネットワーク作成docker network create -d bridge –subnet 172.25.0.0/16 <任意のネットワーク名>
立ち上げるコンテナにネットワークを指定するdocker run –net=<ネットワーク名>
ip固定バージョンdocker run –net=<ネットワーク名> –ip=172.25.3.3 -itd –name=container3 busyboxIPアドレスを指定することができる、これによりドッカーを再起動してもIPアドレスが固定されるネットワークの設定情報表示docker network inspect {ネットワーク名}ネットワークにどのコンテナが属しているか一覧が表示既に存在するコンテナを別のネットワークに所属させるdocker network connect <ネットワーク名> <コンテナ名>この時コンテナは2つのネットワークに所属することに注意コンテナのIP確認docker attach <コンテナ名>
相关链接
Docker网络功能概述
第一篇:多主机下Docker容器间通信,基于Docker网络的基础