简介
Docker 是一个强大的平台,用于在容器化环境中构建、部署和运行应用程序。在本教程中,你将学习如何在 Docker 容器中运行自定义应用程序,并公开一个自定义端口以供外部访问。在本指南结束时,你将对如何利用 Docker 以更大的灵活性和控制力来部署应用程序有扎实的理解。
Docker 与容器简介
Docker 是一个广受欢迎的开源平台,它能够使用容器来进行应用程序的开发、部署和管理。容器是轻量级的、独立的、可执行的软件包,其中包含应用程序运行所需的一切,包括代码、运行时环境、系统工具和库。
什么是 Docker?
Docker 是一个旨在通过使用容器来简化应用程序创建、部署和运行的工具。容器使开发者能够将应用程序与其所需的所有部件(如库和其他依赖项)打包在一起,并将其作为一个包全部交付。
使用 Docker 的好处
- 一致性:无论应用程序部署在何种环境中,容器都能确保其以相同的方式运行。
- 可扩展性:可以轻松地扩展或缩减容器以满足应用程序的需求。
- 可移植性:容器可以在任何安装了 Docker 的系统上运行,从而便于在不同环境之间迁移应用程序。
- 高效性:容器轻量级,比虚拟机使用的资源更少,运行起来更高效。
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:
- 基于
python:3.9-slim基础镜像 - 将工作目录设置为
/app - 复制
requirements.txt文件并安装所需的 Python 包 - 将应用程序代码复制到容器中
- 指定运行应用程序的命令 (
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 的容器化技术为开发者提供了一个强大的平台,使他们能够以更简化、高效的方式构建、交付和运行应用程序。



