在Docker使用部分我们接触到了通过网络端口来连接运行在Docker容器内的服务。这是同Docker容器内服务和应用互动的方法之一。在这一节中,我们将带你复习一下通过网络端口连接到Docker容器并给你介绍容器连接的概念。
网络端口映射刷新在Docker的使用部分中,我们创建了一个运行Python Flask应用的容器。
$ sudo docker run -d -P training/webapp python app.py
注意:容器有一个内部网络和IP地址(还记得在使用Docker部分中我们曾使用docker的监控命令查看容器的IP地址)。Docker可以有各种不同的网络配置。你可以在这里看到Docker网络的更多相关信息。
当我们创建容器时,我们使用-P标志来自动映射任意网络端口到我们Docker主机上介于49000到49900之间的随机高位端口。随后,当我们运行docker ps时,我们会看到5000端口绑定到了49155端口上了。
$ sudo docker ps nostalgic_morse
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse
我们同样看到了怎样使用-P标志将一个容器端口绑定到一个指定端口。
$ sudo docker run -d -p 5000:5000 training/webapp python app.py
另外,我们发现这并不是一个好办法,因为它约束我们一个特定端口只能有一个容器.
还有一些其他的使用 -p 的方法。 默认的情况下 -p 会把container的Port绑到宿主机上的所有ip的该端口号上。 (译者:如果你的宿主机有多个IP, 每个IP的那个端口都会被绑到container的那个port上) 我们可以通过指定接口, 例如下面的例子, 端口就只绑定到了 localhost 上。
$ sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py这会吧container内部的5000端口绑定到宿主机的 127.0.0.1 的5000端口上去.
如果只指定了网络接口而没有指定端口号, 则container的端口会绑到这个网络接口上的一个随机端口上.
$ sudo docker run -d -p 127.0.0.1::5000 training/webapp python app.py我们还可以使用UDP
$ sudo docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py使用 docker port 可以查看当前的container的端口的绑定情况, 和特殊的端口的配置。 例如, 如果我们吧container的端口绑到了宿主机的 localhost, 我们输入 docker port 的时候输出会是:
$ docker port nostalgic_morse 127.0.0.1:49155注 -p 可以被多次使用用来吧多个container里的port绑定到宿主机上
Docker 容器链接映射网络端口不是吧container彼此连接起来的唯一方法。Docker的linking系统允许你吧多个 container连接起来, 让他们彼此交互信息。Docker的linking会创建一种父子级别的关系。 父container可以看到他的子container提供的信息。
开源项目Docker,Red Hat新的虚拟化选择
容器命名Docker的linking系统依赖于container的名字。我们已经注意到了每个container都会被自动的 分配一个名字, 在本教程里大家可能已经熟悉了 nostalgic_morse 这个名字(译者:docker 自动分配的名字都是确实存在的词, 有些名字比较有意思 例如我的一个container就叫做tender einstein 温柔的爱因斯坦, 对于大多数情况, 这些名字绝对是考验你英语单词量的机会, 比如 backstabbing nobel, stoic carson). 我们可以自己对container命名. 命名有两个用处:
好记 比如命名一个承载web服务的container为web
container 之间可以互相引用, 例如一个 web container 使用一个 db container
通过 --name 可以给container命名, 例如:
$ sudo docker run -d -P --name web training/webapp python app.py