通过在 Docker 容器中转发端口实现应用程序访问

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将指导你完成在 Docker 容器中转发端口的过程,以便为你的应用程序提供外部访问。你将学习如何暴露端口、在容器和主机之间映射端口,以及在 Docker Compose 中配置端口转发。在本文结束时,你将对 Docker 端口转发有深入的理解,并能够将其应用到你自己的项目中。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-393010{{"通过在 Docker 容器中转发端口实现应用程序访问"}} docker/start -.-> lab-393010{{"通过在 Docker 容器中转发端口实现应用程序访问"}} docker/stop -.-> lab-393010{{"通过在 Docker 容器中转发端口实现应用程序访问"}} docker/create -.-> lab-393010{{"通过在 Docker 容器中转发端口实现应用程序访问"}} docker/port -.-> lab-393010{{"通过在 Docker 容器中转发端口实现应用程序访问"}} docker/network -.-> lab-393010{{"通过在 Docker 容器中转发端口实现应用程序访问"}} docker/build -.-> lab-393010{{"通过在 Docker 容器中转发端口实现应用程序访问"}} end

Docker 容器简介

Docker 是一个广受欢迎的开源平台,它使开发者能够在容器化环境中构建、部署和运行应用程序。容器是轻量级、独立且可执行的软件包,其中包含运行应用程序所需的一切,包括代码、运行时环境、系统工具和库。

Docker 容器提供了一种一致且可靠的方式来打包和分发应用程序,确保它们无论在何种底层基础设施上运行,方式都是相同的。这使得开发、测试和部署应用程序变得更加容易,同时也便于在生产环境中进行扩展和管理。

要开始使用 Docker,你需要在系统上安装 Docker 引擎。在 Ubuntu 22.04 上,你可以通过运行以下命令来完成:

sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

安装好 Docker 后,你可以使用 docker 命令行工具来创建和管理容器。例如,要基于官方 Ubuntu 镜像创建一个新容器,你可以运行:

docker run -it ubuntu:latest /bin/bash

这将基于最新的 Ubuntu 镜像启动一个新容器,并让你进入容器内的 bash shell。从这里,你可以安装其他软件、运行你的应用程序等等。

总的来说,Docker 容器为开发、部署和管理应用程序提供了一种强大且灵活的方式,使得在不同环境中确保应用程序行为的一致性和可靠性变得更加容易。

理解 Docker 中的端口映射

Docker 容器中的端口与网络

当你运行一个容器时,它与主机系统以及其他容器相互隔离,包括其自身的网络栈。这意味着容器内运行的应用程序所暴露的任何网络端口,仅在容器内部可访问。

要使应用程序能够从容器外部访问,你需要将容器的端口映射到主机系统上的相应端口。这个过程被称为“端口映射”或“端口转发”。

在 Docker 中暴露端口

要在 Docker 容器中暴露一个端口,你可以在运行 docker run 命令时使用 -p--publish 标志。例如,要在容器中暴露端口 80,并将其映射到主机上的端口 8080,你可以运行:

docker run -p 8080:80 nginx

这将启动一个 Nginx 网络服务器容器,并将容器内的端口 80 映射到主机系统上的端口 8080。

你也可以通过多次使用 -p 标志来指定多个端口映射:

docker run -p 8080:80 -p 8443:443 nginx

这将把容器内的端口 80 映射到主机上的端口 8080,把容器内的端口 443 映射到主机上的端口 8443。

访问映射的端口

一旦你将容器中的端口映射到主机上的端口,你就可以通过连接到主机上的相应端口来访问容器中运行的应用程序。例如,如果你将主机上的端口 8080 映射到容器中的端口 80,你可以通过在网页浏览器中访问 http://localhost:8080 来访问该应用程序。

总的来说,理解端口映射对于使基于 Docker 的应用程序能够从容器外部访问,以及实现容器与其他系统之间的通信至关重要。

为应用程序访问暴露端口

确定应用程序端口

为应用程序访问暴露端口的第一步是确定应用程序正在监听的端口。此信息通常在应用程序的文档中提供,或者可以通过检查应用程序的代码或配置来确定。

例如,如果你正在运行像 Nginx 这样的网络服务器,它可能正在监听端口 80(HTTP)和/或端口 443(HTTPS)。如果你正在运行数据库服务器,它可能正在监听特定端口,如 MySQL 的 3306 或 PostgreSQL 的 5432。

使用 docker run 命令暴露端口

一旦你确定了应用程序正在使用的端口,你可以在运行 docker run 命令时使用 -p--publish 标志将它们暴露给主机系统。这将把容器的端口映射到主机系统上的相应端口。

例如,要在容器中暴露端口 80 并将其映射到主机上的端口 8080,你可以运行:

docker run -p 8080:80 nginx

这将启动一个 Nginx 网络服务器容器,并将容器内的端口 80 映射到主机系统上的端口 8080。

暴露多个端口

你可以通过多次使用 -p 标志来暴露多个端口。例如,要在容器中暴露端口 80 和 443,并将它们映射到主机上的端口 8080 和 8443,你可以运行:

docker run -p 8080:80 -p 8443:443 nginx

这将把容器内的端口 80 映射到主机上的端口 8080,把容器内的端口 443 映射到主机上的端口 8443。

通过暴露适当的端口,你可以确保基于 Docker 的应用程序能够从容器外部访问,从而允许用户和其他系统与你的应用程序进行交互。

在容器与主机之间映射端口

理解端口映射语法

在 Docker 中暴露端口时,你使用以下语法将容器端口映射到主机端口:

-p <主机端口>:<容器端口>

例如,要将主机上的端口 8080 映射到容器中的端口 80,你可以使用:

docker run -p 8080:80 nginx

这将容器中的端口 80 映射到主机系统上的端口 8080。

动态映射端口

你也可以不指定特定的主机端口,而是让 Docker 在主机系统上选择一个可用端口,方法是省略主机端口:

docker run -p 80 nginx

这会将主机系统上的一个可用端口映射到容器中的端口 80。你可以通过运行 docker port <容器名称> 或检查容器的网络设置来找到映射的端口。

映射多个端口

你可以通过多次指定 -p 标志来映射多个端口:

docker run -p 8080:80 -p 8443:443 nginx

这会将容器中的端口 80 映射到主机上的端口 8080,将容器中的端口 443 映射到主机上的端口 8443。

查看映射的端口

你可以使用 docker port 命令查看正在运行的容器的映射端口:

docker port <容器名称>

这会显示容器端口与主机端口之间的映射关系。

通过了解如何在容器与主机系统之间映射端口,你可以确保基于 Docker 的应用程序能够从容器外部访问,从而允许用户和其他系统与你的应用程序进行交互。

在 Docker Compose 中配置端口转发

介绍 Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许你在一个 YAML 文件中定义应用程序的服务、网络和卷,从而更轻松地管理和部署应用程序。

在 Docker Compose 中配置端口转发

在 Docker Compose 文件中,你可以使用 ports 指令来配置端口转发。其语法与 docker run 命令类似:

version: "3"
services:
  web:
    image: nginx
    ports:
      - 8080:80

在此示例中,web 服务正在运行 Nginx 网络服务器,容器中的端口 80 被映射到主机系统上的端口 8080。

你也可以通过多次指定 ports 指令来映射多个端口:

version: "3"
services:
  web:
    image: nginx
    ports:
      - 8080:80
      - 8443:443

这会将容器中的端口 80 映射到主机上的端口 8080,将容器中的端口 443 映射到主机上的端口 8443。

动态端口映射

docker run 命令类似,你也可以在 Docker Compose 中通过省略主机端口来使用动态端口映射:

version: "3"
services:
  web:
    image: nginx
    ports:
      - 80

这会将主机系统上的一个可用端口映射到容器中的端口 80。你可以通过运行 docker-compose port web 80 来找到映射的端口。

通过在 Docker Compose 文件中配置端口转发,你可以确保多容器应用程序能够从 Docker 环境外部访问,从而允许用户和其他系统与你的应用程序进行交互。

端口转发的最佳实践

使用特定的主机端口

尽可能使用特定的主机端口,而不是依赖动态端口映射。这样更容易记住和访问你的应用程序,还能简化可能需要的任何防火墙或网络配置。

避免端口冲突

确保你选择的主机端口不会与主机系统上运行的任何其他服务或应用程序冲突。这可以防止端口冲突,并确保你的基于 Docker 的应用程序能够顺利访问。

记录端口映射

在你的代码以及任何部署或配置文档中,清楚地记录基于 Docker 的应用程序所使用的端口映射。这将使其他开发人员或运维团队更容易理解和使用你的应用程序。

使用环境变量进行端口配置

考虑使用环境变量来配置基于 Docker 的应用程序的端口映射。这样可以更轻松地更改端口配置,而无需修改应用程序代码或 Docker 配置文件。

version: "3"
services:
  web:
    image: nginx
    ports:
      - ${WEB_PORT}:80

在此示例中,WEB_PORT 环境变量用于配置 Nginx 网络服务器所映射到的主机端口。

监控和管理端口使用情况

定期监控主机系统上的端口使用情况,以确保基于 Docker 的应用程序不会耗尽可用端口。考虑实施自动化工具或脚本来帮助管理和优化端口使用。

通过遵循这些最佳实践,你可以确保基于 Docker 的应用程序可访问、安全且易于管理,从而更轻松地在容器化环境中开发、部署和维护你的应用程序。

总结

在本全面指南中,你已经学习了 Docker 容器中端口转发的要点。你现在知道如何暴露端口、在容器与主机之间进行映射,以及在 Docker Compose 中配置端口转发。通过应用这些技术,你可以确保基于 Docker 的应用程序能够从外部访问,实现无缝集成和部署。记住遵循端口转发的最佳实践,以维护一个安全高效的 Docker 环境。