端口发布与暴露

端口发布与暴露

目录

  • 发布端口
  • 发布到临时端口
  • 发布所有端口
  • 试一试
    • 使用 Docker CLI
    • 使用 Docker Compose

如果你一直在跟随本指南,你应该理解容器为应用程序的每个组件提供了隔离的进程。每个组件 - 如 React 前端、Python API 和 Postgres 数据库 - 都运行在自己的沙箱环境中,与主机上的其他一切完全隔离。这种隔离对于安全和管理依赖性非常有利,但也意味着你不能直接访问它们。例如,你无法在浏览器中访问 web 应用程序。

这就是端口发布的作用。

发布端口

发布端口可以通过设置转发规则来打破一点点的网络隔离。举个例子,你可以指示主机的 8080 端口的请求应该转发到容器的 80 端口。发布端口是在创建容器时使用 docker run-p(或 --publish)标志来完成的。语法如下:

sh 复制代码
docker run -d -p 主机端口:容器端口 nginx
  • 主机端口:你希望在主机上接收流量的端口号
  • 容器端口:容器内监听连接的端口号

例如,将容器的 80 端口发布到主机的 8080 端口:

sh 复制代码
docker run -d -p 8080:80 nginx

现在,发送到主机 8080 端口的任何流量都会转发到容器内的 80 端口。

当端口被发布时,默认情况下它会发布到所有网络接口上。这意味着任何到达你机器的流量都可以访问发布的应用程序。注意不要发布数据库或任何敏感信息。了解更多关于发布端口的信息 这里.

发布到临时端口

有时,你可能只想发布端口但不在乎使用哪个主机端口。在这些情况下,你可以让 Docker 为你选择端口。为此,只需省略主机端口配置。

例如,以下命令会将容器的 80 端口发布到主机上的一个临时端口:

sh 复制代码
docker run -p 80 nginx

一旦容器运行起来,使用 docker ps 会显示选定的端口:

sh 复制代码
docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                    NAMES
a527355c9c53   nginx         "/docker-entrypoint...."   4 seconds ago    Up 3 seconds    0.0.0.0:54772->80/tcp    romantic_williamson

在这个例子中,应用程序在主机的 54772 端口上暴露。

发布所有端口

在创建容器镜像时,EXPOSE 指令用于指示打包的应用程序将使用指定端口。这些端口默认不会被发布。

使用 -P--publish-all 标志,你可以自动将所有暴露的端口发布到临时端口。这在开发或测试环境中避免端口冲突时非常有用。

例如,以下命令将发布镜像配置的所有暴露端口:

sh 复制代码
docker run -P nginx

试一试

在本动手指南中,你将学习如何使用 CLI 和 Docker Compose 发布容器端口来部署 web 应用程序。

使用 Docker CLI

在此步骤中,你将运行一个容器并使用 Docker CLI 发布其端口。

下载并安装 Docker Desktop。

在终端中运行以下命令启动新容器:

sh 复制代码
docker run -d -p 8080:80 docker/welcome-to-docker

第一个 8080 是指主机端口。这是本地机器上用于访问容器内运行的应用程序的端口。第二个 80 是指容器端口。这是容器内应用程序监听传入连接的端口。因此,该命令将主机的 8080 端口绑定到容器系统的 80 端口。

访问浏览器中的 http://localhost:8080 打开网站。

使用 Docker Compose

这个例子将使用 Docker Compose 启动相同的应用程序:

创建一个新目录,并在该目录中创建一个 compose.yaml 文件,内容如下:

yaml 复制代码
services:
  app:
    image: nginx
    ports:
      - 8080:80

端口配置接受几种不同形式的语法定义端口。在这种情况下,你使用与 docker run 命令中相同的 HOST_PORT:CONTAINER_PORT 语法。

打开终端并导航到你在上一步中创建的目录。

使用 docker compose up 命令启动应用程序。

打开浏览器访问 http://localhost:8080

相关推荐
m0_7482510834 分钟前
docker安装nginx,docker部署vue前端,以及docker部署java的jar部署
java·前端·docker
m0_748240251 小时前
docker--压缩镜像和加载镜像
java·docker·eureka
颜淡慕潇3 小时前
【K8S问题系列 | 20 】K8S如何删除异常对象(Pod、Namespace、PV、PVC)
后端·云原生·容器·kubernetes
lmxnsI3 小时前
docker使用笔记
笔记·docker·容器
木卫二号Coding3 小时前
Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde
linux·ubuntu·docker
木卫二号Coding4 小时前
宝塔-firefox(Docker应用)-构建自己的Web浏览器
linux·docker·开源
didiplus5 小时前
Kubernetes 镜像拉取策略全解析:如何根据需求选择最佳配置?
云原生·容器·kubernetes
玄德公笔记5 小时前
docker-compose搭建sfpt服务器
服务器·docker·容器·sftp·docker-compose
LYX36935 小时前
Docker 安装mysql ,redis,nacos
redis·mysql·docker
小钟不想敲代码7 小时前
Docker部署Sentinel
docker·容器·sentinel