本文章翻译自Docker的官方教程,有兴趣的同学可以上Docker官网进行play-with-docker学习。Docker的安装教程请参考这里(未定义)
本文翻译自Docker官方教程Doing More With Docker Images,并作出一定的修改及删减以加快上手速度。
Docker教程(三) - Docker 网络(上)- 桥接 Bridge
- 网络驱动程序
- 桥接网络(bridge)的使用
- 使用默认的 bridge 网络
- 使用自定义 bridge 网络
网络驱动程序
网络驱动程序 | 说明 |
| 默认的网络驱动程序。通常用于当你的应用程序运行在一个需要通信的,独立容器(standalone container)中。 |
| 对于独立容器,删除容器和 Docker host 之间的隔离,并直接使用主机的网络 |
| 叠加网络可以将多个 Docker 的守护进程连接在一起,并使用群服务来与他们通信 |
| 允许你将MAC地址分配给容器,使其显示为网络上的物理设备。这样 Docker 守护进程可以通过MAC地址将流量路由到容器。一些比较老的应用程序,希望可以直接连接到物理网络,而不是通过 Docker host 来路由,这时,通常使用这种驱动。 |
| 关闭容器的所有网络,通常用于需要使用自定义网络驱动的时候。 |
桥接网络(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.