新人也能做的Docker项目 (6) 容器间的通信

OK,能跟到这里实在不容易,我们已经胜利在望了。这讲我们要一起学习的是Docker 容器间的通信。
在那之前,我们先再学几个命令。

让我们先试试删除所有的容器

执行下列命令:

docker stop $(docker ps -aq)

如果大伙已经跟着我完成了前面的实践的话,应该可以猜到这条命令是先获取所有docker 容器并返回给docker stop作为传入参数,这条命令会停止所有的容器。

下面这条命令会删除所有的容器:

docker rm $(docker ps -aq)

删除custom nework

输入下列命令即可删除单一network

docker network rm [网络id]

或者可以用批量删除:

docker network prune

上面的这条语句会删除所有没被容器使用的custom neworks

下面就开始我们这讲的正式内容了

我们重新创建一个custom network

docker network create --driver=bridge --subnet=182.0.1.1/16 isolatedNetwork

创建一个新的容器

docker run -itd centos

是的,这讲我们会用centos来完成我们的实践,所以,在等待期间,你可以去泡杯咖啡,洗个澡,做个饭,然后再回来,因为国内下载速度可能真的可能挺慢的;) 或者用这个时间研究下怎么加快下载速度,有一些相关的博文实际上已经是数年前的经验,有些镜像源已不可用,或许这个探索过程也可以成为我们的第X个博文的内容:)

检验容器是否已运行

docker ps

运行容器,并让且被分配到我们的custom network

docker run -itd --name=test1 --net=isolatedNetwork centos

此时我们就有两个容器在运行了,而且它们分别运行在不同的网络。

我们可以运行下列命令检视两个容器的网络信息

docker inspect [容器 ID]

接下来我们要连接到test1容器

先执行下列命令:

docker ps

我们需要关注的是test1容器的COMMAND字段对应的值,容器版本不同,可能会导致这个值也不同,希望大家可以记住这个方法论,而不是当做八股文一样记Docker命令。也希望看到这里的大佬们日后不要在面试里问“请拼写Docker显示容器列表的命令”这种问题,因为版本变化后就可能变了,也许唯一意义是知道这个人背过八股文;)

输出可能是类似下面这样的:

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
b3b68a59559f   centos    "/bin/bash"   3 seconds ago    Up 1 second               test1
fc3cb93c767e   centos    "/bin/bash"   42 minutes ago   Up 42 minutes             inspiring_clarke

现在我们知道容器ID也知道COMMAND了,接下来我们就可以开始连接到一个容器:

docker exec -it [容器ID] [COMMAND]

例子如下:

docker exec -it fc /bin/bash

执行完以后我们就进入了与这个容器的交互模式

测试我们能否从一个容器里连接到另一个容器

连接上Docker后,这里比较简单的方法就是在容器的交互模式下使用Ping命令:

ping test1

然后我们应该会得到下列信息:

ping: test1: Name or service not known

如果你们居然Ping通了,那可能Docker网络机制变了,或者已经是无数年过去网络通信也来了场革命,感谢回来考古我这篇博文;)

接下来,我们输入在交互模式下输入下列命令,离开交互模式:

exit

所以我们要如何让两个容器互通呢

让它们处于同一个网络

执行下列命令,让test3之外的另一个容器加入到isolatedNetwork中:

docker network connect [网络名字] [容器名字]

举例:

docker network connect isolatedNetwork inspiring_clarke

然后再回到test1容器的交互模式

再执行一次ping 命令

ping test1

输出

PING test1 (182.0.0.2) 56(84) bytes of data.
64 bytes from test1.isolatedNetwork (182.0.0.2): icmp_seq=1 ttl=64 time=0.226 ms
64 bytes from test1.isolatedNetwork (182.0.0.2): icmp_seq=2 ttl=64 time=0.151 ms
64 bytes from test1.isolatedNetwork (182.0.0.2): icmp_seq=3 ttl=64 time=0.050 ms

这次我们就Ping通了。

总结

我们这讲又补充了一些命令的学习,以及如何实现Docker 容器间的通信。下一讲我们会提到Docker Volums,我们这个项目也接近尾声了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值