如何在 Docker 容器中使用自定义端口运行自定义应用程序

DockerBeginner
立即练习

简介

Docker 是一个强大的平台,用于在容器化环境中构建、部署和运行应用程序。在本教程中,你将学习如何在 Docker 容器中运行自定义应用程序,并公开一个自定义端口以供外部访问。在本指南结束时,你将对如何利用 Docker 以更大的灵活性和控制力来部署应用程序有扎实的理解。

Docker 与容器简介

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

什么是 Docker?

Docker 是一个旨在通过使用容器来简化应用程序创建、部署和运行的工具。容器使开发者能够将应用程序与其所需的所有部件(如库和其他依赖项)打包在一起,并将其作为一个包全部交付。

使用 Docker 的好处

  1. 一致性:无论应用程序部署在何种环境中,容器都能确保其以相同的方式运行。
  2. 可扩展性:可以轻松地扩展或缩减容器以满足应用程序的需求。
  3. 可移植性:容器可以在任何安装了 Docker 的系统上运行,从而便于在不同环境之间迁移应用程序。
  4. 高效性:容器轻量级,比虚拟机使用的资源更少,运行起来更高效。

Docker 架构

Docker 使用客户端 - 服务器架构,其中 Docker 客户端与 Docker 守护进程通信,后者负责构建、运行和分发 Docker 容器。

graph LD
    subgraph Docker Architecture
        client((Docker Client))
        daemon((Docker Daemon))
        registry((Docker Registry))
        client --> daemon
        daemon --> registry
    end

Docker 容器

Docker 容器是 Docker 的基本构建块。容器是软件的标准单元,它将代码及其所有依赖项打包在一起,以便应用程序能够在不同的计算环境之间快速、可靠地运行。

graph LD
    subgraph Docker Container
        app((Application))
        runtime((Runtime))
        libs((Libraries))
        bin((Binaries))
    end

Docker 镜像

Docker 镜像是容器的基础。镜像是一个轻量级的、独立的、可执行的软件包,其中包含运行应用程序所需的一切:代码、运行时环境、库、环境变量和配置文件。

在 Docker 中运行自定义应用程序

构建自定义 Docker 镜像

要在 Docker 容器中运行自定义应用程序,首先需要为应用程序创建一个 Docker 镜像。这可以通过使用 Dockerfile 来完成,Dockerfile 是一个文本文件,其中包含用户在命令行上可以调用的所有命令,用于组装镜像。

以下是一个简单的 Flask 网络应用程序的 Dockerfile 示例:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt.
RUN pip install --no-cache-dir -r requirements.txt
COPY..
CMD ["python", "app.py"]

此 Dockerfile:

  1. 基于 python:3.9-slim 基础镜像
  2. 将工作目录设置为 /app
  3. 复制 requirements.txt 文件并安装所需的 Python 包
  4. 将应用程序代码复制到容器中
  5. 指定运行应用程序的命令 (python app.py)

构建并运行 Docker 镜像

有了 Dockerfile 之后,可以使用 docker build 命令来构建 Docker 镜像:

docker build -t my-flask-app.

这将创建一个标签为 my-flask-app 的新 Docker 镜像。

要在 Docker 容器中运行应用程序,请使用 docker run 命令:

docker run -p 5000:5000 my-flask-app

这将基于 my-flask-app 镜像启动一个新容器,并将主机上的端口 5000 映射到容器中的端口 5000。

验证应用程序

现在,你可以通过访问 http://localhost:5000 在网页浏览器中访问正在运行的应用程序。你应该会看到 Flask 应用程序的输出。

公开自定义端口

默认情况下,当你运行 Docker 容器时,它与主机系统及其网络是隔离的。如果你的应用程序在容器内部的特定端口上运行,你需要将该端口公开到主机系统,以便能够从容器外部访问该应用程序。

公开端口

要从 Docker 容器公开端口,可以在运行 docker run 命令时使用 -p--publish 标志。语法如下:

docker run -p <主机端口>:<容器端口> <镜像名称>

例如,如果你的应用程序在容器内部的端口 8000 上运行,你可以将其公开到主机系统的端口 80,如下所示:

docker run -p 80:8000 my-app

这会将主机系统上的端口 80 映射到容器内部的端口 8000。

验证公开的端口

你可以通过检查 docker run 命令的输出(其中应显示映射的端口)来验证端口是否已正确公开:

$ docker run -p 80:8000 my-app
 * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

或者,你可以使用 docker port 命令列出正在运行的容器的映射端口:

$ docker port <容器ID>
8000/tcp -> 0.0.0.0:80

这表明容器内部的端口 8000 已映射到主机系统上的端口 80。

现在,你可以通过在网页浏览器中访问 http://localhost(或主机系统的 IP 地址)来访问你的应用程序。

总结

在本教程中,你已经学习了如何在 Docker 容器中运行自定义应用程序,并公开一个自定义端口以供外部访问。通过将应用程序容器化,你可以确保部署的一致性和可靠性,以及更高效地扩展和管理应用程序的能力。Docker 的容器化技术为开发者提供了一个强大的平台,使他们能够以更简化、高效的方式构建、交付和运行应用程序。