美文网首页
docker之容器互联

docker之容器互联

作者: 云师兄 | 来源:发表于2018-06-05 21:26 被阅读26次

    容器命令回顾

    • 容器的启动和结束
      docker start IMAGE_ID 启动容器
      docker stop IMAGE_ID 结束容器
    • 容器的运行和删除
      docker rm IMAGE_ID 删除容器,已经启动的容器要先结束后才能删除
      docker run

    容器之间互联

    在介绍容器之间互联过程中需要使用linux系统,为此引入介绍busybox。

    Busybox

    Busybox是一个集成一百多个常用Linux命令和工具的精简工具箱,只有几MB大小,被称为Linux系统的瑞士军刀。Busybox镜像从官方的仓库下载速度较慢,本例从网易云docker镜像仓库下载镜像,https://c.163yun.com/hub#/m/home/,搜索busybox,获取busybox的镜像地址并下载镜像:docker pull hub.c.163.com/library/busybox:latest

    首先创建容器busybox1:

    docker run -d --name busybox1 hub.c.163.com/library/busybox:latest /bin/sh -c "while true;do sleep 3600;done"
    

    运行一个名为busybox1的容器,-d表示在后台运行容器,并返回容器id,容器启动后会自动执行/bin/sh命令,-c 这个参数是/bin/sh命令的附加参数,表示/bin/sh会自动执行这个字符串的指令,此处使用了一个死循环,保证了容器启动后一直都在运行。
    接着创建容器busybox2:

    docker run -d -P --name busybox2 --link busybox1:busycon ub.c.163.com/library/busybox /bin/sh -c "while true;do sleep 3600;done"
    

    此时容器busybox2和容器busybox1就建立了互联关系。其中--link参数的格式为--link name:alias,name为要连接的容器名称,alias是这个连接的别名。
    Docker相当于在两个互联的容器之间创建了虚拟通道,而且不用映射它们的端口到宿主主机上。
    连接成功后,busybox2容器作为父容器,执行
    docker exec -it CONTAINER_ID
    表示在运行的容器中执行命令,-it指分配一个伪终端,这串指令意思是:在容器中开启一个交互模式的终端。
    进入容器后,查看/etc/hosts文件如下:

    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.2      busyconn 374453a45218 busybox1
    172.17.0.3      e084346345b4
    

    其中127.0.0.1为本地主机的ip地址,172.17.0.2就是容器busybox1映射到本地主机的地址,172.17.0.3是当前容器busybox2的地址(此处用镜像id来体现)。通过在busybox2容器内部去ping 容器busybox1也是通的:

    / # ping busybox1
    PING busybox1 (172.17.0.2): 56 data bytes
    64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.120 ms
    64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.144 ms
    64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.091 ms
    64 bytes from 172.17.0.2: seq=3 ttl=64 time=0.111 ms
    ^C
    --- busybox1 ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 0.091/0.116/0.144 ms
    

    由此证明两个容器的确是连接成功的。

    应用场景

    部署一个后台的应用时,往往还需要部署相关的数据库,当我们把应用部署在一个docker容器中时,其内部会去访问数据库所在的容器的IP地址,为此我们先部署数据库容器test1,然后再部署应用容器test2的时候,使用--link 命名,参数为数据库容器的名称test1,就可以使应用容器可以访问数据库容器。这样我们在应用容器test2的内部就可以ping通test1,并且除了使用ping test1的ip地址外,还可以使用ping test 1这种直接跟名称的形式就可以ping通。这样可以减少配置,不需要知道数据库容器的ip地址,使用起来更加方便。

    注意

    当启动容器test2的时候使用--link命令去连接test1容器的时候,实际上连接是单向的,只能test2去ping test1,而不能在test1容器内ping test2。

    相关文章

      网友评论

          本文标题:docker之容器互联

          本文链接:https://www.haomeiwen.com/subject/qtomsftx.html