2014-10-14 05:25:01 +00:00
|
|
|
|
## 容器互联
|
2017-11-23 02:42:43 +00:00
|
|
|
|
|
|
|
|
|
如果你之前有 `Docker` 使用经验,你可能已经习惯了使用 `--link` 参数来使容器互联。
|
|
|
|
|
|
|
|
|
|
随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器。
|
|
|
|
|
|
2014-09-15 14:30:23 +00:00
|
|
|
|
容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式。
|
|
|
|
|
|
|
|
|
|
该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息。
|
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
### 新建网络
|
2014-09-15 14:30:23 +00:00
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
下面先创建一个新的 Docker 网络。
|
2014-09-15 14:30:23 +00:00
|
|
|
|
|
2017-11-13 10:54:38 +00:00
|
|
|
|
```bash
|
2017-11-23 02:42:43 +00:00
|
|
|
|
$ docker network create -d bridge my-net
|
2014-09-05 07:50:42 +00:00
|
|
|
|
```
|
2014-09-15 14:30:23 +00:00
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
### 连接容器
|
2014-09-05 07:50:42 +00:00
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
创建一个容器并连接到新建的 `my-net` 网络
|
2014-09-18 07:55:24 +00:00
|
|
|
|
|
2017-11-13 10:54:38 +00:00
|
|
|
|
```bash
|
2017-11-23 02:42:43 +00:00
|
|
|
|
$ docker run -it --rm --name busybox1 --net my-net busybox sh
|
2014-09-05 07:50:42 +00:00
|
|
|
|
```
|
2017-11-23 02:42:43 +00:00
|
|
|
|
|
|
|
|
|
打开新的终端,再新建一个容器,加入 `my-net` 网络
|
|
|
|
|
|
2017-11-13 10:54:38 +00:00
|
|
|
|
```bash
|
2017-11-23 02:42:43 +00:00
|
|
|
|
$ docker run -it --rm --name busybox2 --net my-net busybox sh
|
2014-09-05 07:50:42 +00:00
|
|
|
|
```
|
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
再打开一个新的终端查看容器信息
|
2014-09-15 14:30:23 +00:00
|
|
|
|
|
2017-11-13 10:54:38 +00:00
|
|
|
|
```bash
|
2017-11-23 02:42:43 +00:00
|
|
|
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
|
|
|
|
b47060aca56b busybox "sh" 11 minutes ago Up 11 minutes busybox2
|
|
|
|
|
8720575823ec busybox "sh" 16 minutes ago Up 16 minutes busybox1
|
2014-09-15 14:30:23 +00:00
|
|
|
|
```
|
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
下面通过 `ping` 来证明 `busybox1` 容器和 `busybox2` 容器建立了互联关系。
|
2014-09-15 14:30:23 +00:00
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
在 `busybox1` 容器输入以下命令
|
2014-09-05 07:50:42 +00:00
|
|
|
|
|
2017-11-13 10:54:38 +00:00
|
|
|
|
```bash
|
2017-11-23 02:42:43 +00:00
|
|
|
|
/ # ping busybox2
|
|
|
|
|
PING busybox2 (172.19.0.3): 56 data bytes
|
|
|
|
|
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms
|
|
|
|
|
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms
|
2014-09-15 14:30:23 +00:00
|
|
|
|
```
|
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
用 ping 来测试连接 `busybox2` 容器,它会解析成 172.19.0.3。
|
|
|
|
|
|
|
|
|
|
同理在 `busybox2` 容器执行 `ping busybox1`,也会成功连接到。
|
|
|
|
|
|
2017-11-13 10:54:38 +00:00
|
|
|
|
```bash
|
2017-11-23 02:42:43 +00:00
|
|
|
|
/ # ping busybox1
|
|
|
|
|
PING busybox1 (172.19.0.2): 56 data bytes
|
|
|
|
|
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms
|
|
|
|
|
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.143 ms
|
2014-09-05 07:50:42 +00:00
|
|
|
|
```
|
2014-09-15 14:30:23 +00:00
|
|
|
|
|
2017-11-23 02:42:43 +00:00
|
|
|
|
这样,`busybox1` 容器和 `busybox2` 容器建立了互联关系。
|
2017-11-23 04:59:13 +00:00
|
|
|
|
|
|
|
|
|
### Docker Compose
|
|
|
|
|
|
|
|
|
|
如果你有多个容器之间需要互相连接,推荐使用 [Docker Compose](../compose)。
|