容器有自己的内部网络和 ip 地址(容器互联)

本文介绍了Docker的link机制及其与网络新特性的对比。通过link,容器可以拥有内部网络和IP,实现互联,但网络新特性引入后,link的部分功能被替代。现在推荐使用自定义网络进行容器互联,提供基于DNS的名称解析和更安全的隔离环境。
摘要由CSDN通过智能技术生成

容器有自己的内部网络和 ip 地址

[root@centos4 ~]# docker inspect d6 | grep 172

            "Gateway": "172.17.0.1",
            "IPAddress": "172.17.0.2",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2"
,
[root@centos4 ~]# docker inspect 3d | grep 172
            " Gateway": "172.17.0.1",
            "IPAddress": "172.17.0.3",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",

[root@centos4 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
3d54b583cfbc        6fe18247a725        "/bin/bash"              18 minutes ago      Up 18 minutes       0.0.0.0:8000->80/tcp     django
d6bb2b0cf809        registry            "/entrypoint.sh /etc/"   9 days ago          Up About an hour    0.0.0.0:5000->5000/tcp   registry
[root@centos4 ~]#

容器互联:
如果你之前有 Docker 使用经验,你可能已经习惯了使用 --link 参数来使容器互联。
随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,
而不是使用 --link 参数。
新建网络
下面先创建一个新的 Docker 网络。
$ docker network create -d bridge my-net
-d 参数指定 Docker 网络类型,有 bridge overlay 。其中 overlay 网络类型用于
Swarm mode,在本小节中你可以忽略它。
连接容器
运行一个容器并连接到新建的 my-net 网络
$ docker run -it --rm --name busybox1 --network my-net busybox sh
打开新的终端,再运行一个容器并加入到 my-net 网络
$ docker run -it --rm --name busybox2 --network my-net busybox sh
再打开一个新的终端查看容器信息
$ docker container ls
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
下面通过 ping 来证明 busybox1 容器和 busybox2 容器建立了互联关系。

在 busybox1 容器输入以下命令

/ # 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
用 ping 来测试连接 busybox2 容器,它会解析成 172.19.0.3 。

同理在 busybox2 容器执行 ping busybox1 ,也会成功连接到。

/ # 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

这样, busybox1 容器和 busybox2 容器建立了互联关系。




通过link方式互联

什么是docker的link机制

同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来通信,也可以通过宿主机的ip加上容器暴露出的端口号来通信,前者会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip,后者的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信。通过docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。其使用方式如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值