Docker 管理端口

Docker 是一套平台即服务 (PaaS) 产品,它使用操作系统级虚拟化技术,以软件包(称为容器)的形式交付软件。这些容器可能需要相互通信,或者与 Docker 外部的服务通信。为此,我们不仅需要运行镜像,还需要公开容器的端口,使其能够被不同网络上的其他服务或容器访问。

注意: 如果您需要以 root 用户身份运行 docker,请记住在命令前面 加上 sudo

现在让我们看看如何在 Docker 中管理端口。

从 Docker Hub 拉取镜像:

Docker Hub 是 Docker 提供的托管仓库服务,用于查找和共享容器镜像。您可以在 Docker Hub 上托管自己的镜像,但我们将使用官方 Nginx 仓库来拉取 Nginx 的镜像,Nginx 是一个开源反向代理服务器。Docker 上的官方镜像都有一个官方镜像标签。

Docker 官方镜像

这个仓库包含有关 Nginx 镜像及其使用方法的所有信息。在右上角,我们看到一个 docker pull 命令,它指定了如何将镜像拉取到我们的电脑上。

Docker Pull 命令

步骤1.使用命令拉取Nginx镜像。

$docker pull nginx

输出:

Ngnix 镜像

从拉取的镜像运行容器:

当我们使用docker run命令运行容器时,它不会向外界发布任何端口。要将容器端口暴露给 Docker 外部的服务,或暴露给与容器不在同一网络的容器,请使用 –publish 或 -p 标志。

–publish 标志的典型示例:

$ docker run -p 8080:80 --name webhost -d nginx

让我们分解这个命令以便更好地理解:

  1. Docker run Nginx: 将从 Nginx 镜像启动容器。

  2. -p 8080:80:容器中的 TCP 端口 80 映射到 Docker 主机上的端口 8080

  3. –name webhost: 将我们的容器命名为 webhost,如果没有指定,docker 将为其指定一个随机名称。

  4. -d:标志将以分离模式(即在后台)运行 docker。

端口映射

如何知道哪个端口是暴露的?

剩下的一个问题是,_我们如何知道应该将计算机端口映射到容器中的哪个端口?_通常,此详细信息在镜像存储库中提供,或者使用inspect命令提供。

  • 转到 docker hub 上的 Nginx 存储库并尝试找到公开端口部分:

图像存储库

  • 使用 docker inspect 命令:
$docker inspect nginx

这将列出 Nginx 镜像的所有配置,从中我们可以找到 ExposedPort 属性。

Docker 检查 Nginx

第 2 步:  可以使用--format 标志过滤掉这些数据:

$ docker inspect --format="{{.ContainerConfig.ExposedPorts}}" nginx

Docker 检查 Nginx 格式

步骤3: 现在我们确定Nginx在容器虚拟网络内的TCP端口80上运行。我们可以使用docker run命令。

$ docker run -p 8080:80 --name webhost -d nginx

Docker 运行镜像

步骤 4:验证 Nginx 是否在端口 8080 上运行:

欢迎使用 Nginx

在本地主机上 ping Nginx

创建并公开本地容器:

好吧,这很简单,让我们为 React 应用程序创建一个本地 docker 镜像并发布其端口:

步骤1:为此,我使用了一个简单的React应用程序。让我们首先初始化React应用程序:

$ npx create-react-app gfg

创建 React 应用

如果您没有安装 NodeJs,您可以从 GitHub 克隆一个 React App 项目。

步骤 2: 在项目根目录中创建一个 Dockerfile 文件。在项目根目录中创建一个名为 file 的Dockerfile文件,并粘贴以下内容:


# pull official base image
FROM node:13.12.0-alpine

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent

# add app
COPY . ./

# can be skipped
EXPOSE 3000

# start app
CMD ["npm", "start"]

步骤3.构建镜像。

$ docker build -t basic-react-app .

Docker 构建镜像

步骤 4.运行镜像:$ docker inspect –format=”{{.ContainerConfig.ExposedPorts}}” basic-react-app

$ docker run -p 3000:3000 -d basic-react-app

这一步需要稍微解释一下。我们的 React 应用在容器内的 3000 端口上运行 -p 3000:3000 将此端口映射到主机端口。

步骤 5.在浏览器中验证

本地主机

这些都是关于管理 Docker 中的端口。

Leave a Comment