在Docker链接中了解源容器和目标容器

我刚刚阅读Docker文档的链接,在这里,并遇到以下命令:

$ docker run -d -P --name web --link db:db training/webapp python app.py 

在上面的命令中,正在创build一个新的容器IE web ,它正在被链接到一个现有的容器IE db ,现在在文档中用于解释上述命令的术语是source容器和target容器。

这个术语在我给予的命令的背景下真的意味着什么? 这将是source ,哪个将是target容器? 我很难理解这个,有人可以解释吗?

谢谢。

亚历克斯-Z。

在这个文档中,他们给出了一个例子,其中链接别名与容器链接到的名称相同的事实令人不安。

docker run文档中,我们可以find不太令人不安的用法示例。

 --link="" : Add link to another container (<name or id>:alias or <name or id>) 

如果您已经有一个名为db的容器运行数据库服务,那么您可以启动以下名为foo容器:

 docker run -d --name foo --link db:potato somedockerimage 

foo容器中,您将使用以下configurationstring连接到数据库:

 mysql://potato:3306/somedb 

我们以这个例子为例,假设我们有两个容器:

 -A -B 

A的状态是“不运行”;
B的状态是“运行”;

我想链接A到B,命令是:

 # linking without alias docker run --name A --link B ubuntu:latest # linking with alias docker run --name A --link B:B_alias ubuntu:latest 

“graphics”的情况是:

 B-------A 

源容器是B,它已经存在并且已经在运行;
我创build并运行的TARGET容器是A;
这个术语可以更容易区分A和B.

如果你检查每个容器的/ etc / hosts文件,你会注意到:
B – 主机文件:A的IP地址有别名;
A – hosts文件:B的IP地址有一个别名;

A的主机文件的一个例子可能是:

 #/etc/hosts ... 127.0.0.1 localhost ... ... 172.17.0.4 B 

A和B之间的通信是双向的。 你可以ping B到A,从A到B,让我们用主机上的这个命令来validation它:

 # ping from B to A docker exec -t B ping A # ping from A to B docker exec -t A ping B 

最后,从docker文档 :
“Docker在容器之间创build一个安全隧道,不需要在容器外部暴露任何端口;”
理解链接的重要部分是容器的任何信息都不需要由链接容器公开显示

资料来源:个人经验和文件研究