本文章翻译自Docker的官方教程,有兴趣的同学可以上Docker官网进行play-with-docker学习。Docker的安装教程请参考这里(未定义)
本文翻译自Docker官方教程Doing More With Docker Images,并作出一定的修改及删减以加快上手速度。
Docker教程(三) - Docker 网络(上)- 桥接 Bridge
网络驱动程序
网络驱动程序 | 说明 |
---|---|
bridge | 默认的网络驱动程序。通常用于当你的应用程序运行在一个需要通信的,独立容器(standalone container)中。 |
host | 对于独立容器,删除容器和 Docker host 之间的隔离,并直接使用主机的网络 |
overlay | 叠加网络可以将多个 Docker 的守护进程连接在一起,并使用群服务来与他们通信 |
macvlan | 允许你将MAC地址分配给容器,使其显示为网络上的物理设备。这样 Docker 守护进程可以通过MAC地址将流量路由到容器。一些比较老的应用程序,希望可以直接连接到物理网络,而不是通过 Docker host 来路由,这时,通常使用这种驱动。 |
none | 关闭容器的所有网络,通常用于需要使用自定义网络驱动的时候。 |
桥接网络(bridge)的使用
可以通过自动设置
或自定义
设置的方式来使用桥接网络。但是,如果是用在产品上的话,建议使用自定义
设置的方式。
使用默认的 bridge 网络
在这个例子中,我们使用两个不同的debian
容器来演示他们是怎样通过网络进行通信的。
-
启动一个终端,使用
docker network ls
指令来列出现在所有的网络。如果你未曾增加过其他网络,你会看到如下信息。
docker 可能需要 sudo 权限
这里你可以看见3个网络
bridge
、host
和none
。其中host
和none
并不是完整的网络,这个会在后面的文章解释。在这个例子中,我们将会将两个容器连接到这里列出的bridge
网络。 -
创建两个容器。注意创建容器的时候 ,使用
-dit
选项
*-d
,分离模式,后台运行
*-i
,交互模式
*-t
,使用TTY$ docker run -dit --name debian1 debian bash $ docker run -dit --name debian2 debian bash
然后查看一下新建的两个容器:
-
监视一下
bridge
这个网络,看看现在有哪些容器连接到这个网络上
可以看到debian1
和debian2
都连接到这个bridge
网络中,他们的 ip 地址分别为172.17.0.2
和172.17.0.3
。 -
现在试一下通信功能。先进入容器
debian1
:$ docker attach debian1
查看一下网络配置
这里可以看到eth0
的 ip 地址就是刚才的172.17.0.2
。然后尝试 ping 一下百度,成功表示容器能够正常连上网络。
$ ping -c 2 表示尝试 ping 2次
再 ping 一下
debian2
的 ip 地址。成功说明两个容器debian1
和debian2
可以通过网络进行通信,因为它们都桥接到 Docker 主机上。 -
测试完成,关闭创建的两个容器。
$ docker container stop debian1 debian2 $ docker container rm debian1 debian2
使用自定义 bridge 网络
在这个例子中,我们会创建一个自定义网络,并创建3个容器,容器的连接情况如下:
容器 | 默认bridge网络 | 自定义debian-net网络 |
---|---|---|
debian1 | - | Y |
debian2 | - | Y |
debian3 | Y | - |
-
首先,创建自定义网络
debian-net
, 然后在查看以下当前 docker 的网络。$ docker network create --driver bridge debian-net $ docker network ls
如图可见,网络debian-net
创建成功。 -
按照上面的容器网络连接表, 分别连接3个容器
$ docker run -dit --name debian1 --network debian-net debian bash $ docker run -dit --name debian2 --network debian-net debian bash $ docker run -dit --name debian3 --network bridge debian bash
-
查看一下网络
bridge
和debian-net
的连接情况$ docker network inspect bridge $ docker network inspect debian-network
从上图可见容器
debian3
已经连接到网络bridge
而容器debian1
和debian2
则连接到网络debian-net
。 -
进入容器
debian1
并测试连接情况
$ docker attach debian1 # 进入容器 debian1
References:
- “Networking with standalone containers”. Docker docs. Docker, Inc.