Docker实践(5) – 通过端口连接容器

Docker容器从一开始就设计用来运行服务。在大多数情况下,会是一种HTTP服务或其它。其中很大一部分是通过浏览器访问的Web服务。
这会导致一个问题。如果你有多个运行在它们内部环境的80端口上的Docker容器,它们不能都通过你机器上的80端口访问。下一次技术点将介绍如何通过从你的容器暴露和映射一个端口来处理这个常见的情景。

问题

你想通过你机器上的端口使你的容器能够得到访问。

方法

使用docker的-p参数来映射容器的端口到你的主机。

讨论

在这个示例中我们准备用tutum-wordpress镜像。假设你要在主机上运行两个容器来创建不同的博客。因为很多人想要这样做,有人已经准备好一个镜像让其他人能够获取和启动。你可以使用docker pull命令来得到外部位置的镜像。默认下,镜像会从docker hub去下载。

  1. $ docker pull tutum/wordpress

运行第一个博客,执行如下命令:

  1. $ docker run -d -p 10001:80 --name blog1 tutum/wordpress

docker run命令以守护进程(-d),参数-p运行容器。它标识要映射主机的10001端口到容器的80端口,并设置了一个容器名称用来识别它(–nameblog1tutum/wordpress)。
你可以用同样的方法创建第二个博客:

  1. $ docker run -d -p 10002:80 --name blog2 tutum/wordpress

如果你现在运行这个命令,

  1. $ docker ps -a | grep blog

你会看到两个博客窗口列出,有它们的端口映射,类似如下:
9afb95ad3617 tutum/wordpress:latest “/run.sh”
➥ 9 seconds ago Up 9 seconds
3306/tcp, 0.0.0.0:10001->80/tcp blog1 31ddc8a7a2fd tutum/wordpress:latest
➥ “/run.sh” 17 seconds ago Up 16 seconds 3306/tcp, 0.0.0.0:10002->80/tcp blog2
你可以在浏览器中通过http://localhost:10001和http://localhost:10002访问这两个博客容器。
完成后要删除这些容器(假设你不想保留):

  1. $ docker rm -f blog1 blog2

如果需要,你现在应该能够通过自己管理端口映射来运行多个相同的镜像来提供不同的服务了。

标签:容器Docker 发布于:2019-11-20 23:54:47