在 Docker 中开放网络服务

Docker 进阶

Mike Metzger

Data Engineering Consultant

网络服务

  • 网络服务会在指定端口上监听
  • 同一时间只能有一个程序监听同一 IP:端口 组合
    • 例如,10.1.2.3:80 表示在 10.1.2.3 的 80 端口上监听
  • 设想要调试多个监听 80 端口的 Web 服务器版本
    • 由于只监听该端口,一次只能运行一个副本
Docker 进阶

容器化服务

  • 将应用放入容器后,每个容器都有不同 IP,可各自监听同一端口
  • 可同时运行多个容器副本
  • 但主机如何连接到容器内的应用?
Docker 进阶

端口映射

  • 答案是使用端口映射(端口转发/转换)
  • 端口映射将对某 IP:端口 的连接自动转发到另一 IP:端口
  • 可将主机上的未用端口映射到容器的 80 端口
  • 配置后,Docker 引擎可自动处理

端口映射示例

Docker 进阶

启用端口映射

  • 为容器启用端口映射:使用 docker run 命令与 -p 标志
  • -p <host port>:<container port>
  • -p 5501:80
  • 可为不同端口使用多个 -p
repl@host:~$ docker run -p 5501:80 nginx

repl@host:~$ docker ps -a
CONTAINER ID IMAGE ... PORTS NAMES 84266724ff47 nginx ... 0.0.0.0:5501->80/tcp, :::5501->80/tcp coiled_elgamal
Docker 进阶

让我们练习!

Docker 进阶

Preparing Video For Download...