返回博客

使用 Docker 容器化 Python 应用

使用 Docker 容器化 Python 应用

Docker 是一个免费且开源的解决方案,用于在轻量级、操作系统级虚拟化中开发、部署和管理应用程序。在本指南中,我们将演示如何在一个 Docker 容器中创建一个 Python 应用程序。

前提条件

要执行本指南中演示的步骤,您将需要以下组件:

Docker 容器

在同一个环境中运行各种程序时,事情可能会(而且确实会)出错。添加的程序越多,系统就越不稳定。对于普通人来说,这可能没什么大不了的。然而,当涉及到关键任务应用程序时,可能会产生严重的后果。

系统中引入的应用程序越多,攻击面就越大。单个受损的应用程序很容易导致整个系统的崩溃。

为了解决这些问题,我们可以使用 Docker 容器进行软件级别的沙箱隔离:

  • 容器内的应用程序对文件的访问权限将受到限制。

  • 容器化的应用程序无法看到系统中运行的其他进程。

  • 可以为容器分配特定数量的硬件资源。

  • 容器的网络端口不会暴露到外部。

  • 在本地/生产环境中对几乎所有内容进行一致的打包。

为了进行演示,我们将在 Docker 容器中构建一个简单的 Python 服务器,将该容器转换为镜像,并在一个虚拟的生产环境中部署该镜像。

步骤 1 – 文件系统配置

为了托管该项目,首先,我们将创建一个专用目录:

在该目录下,创建一个子目录 src 来存储我们的代码:

步骤 2 – 构建 Python 服务器

在这一步中,我们将用 Python 创建一个简单的 HTTP 服务器。创建文件 server.py:

在文本编辑器中打开它:

输入以下 Python 代码:

在这里,

  • 我们正在使用 HTTPServer 类,并从标准 Python 库中请求一个处理程序,以保持程序的简单性。

  • 函数 run 实例化了一个 HTTPserver.

  • 正如 server_address 的参数所暗示的那样,服务器将监听端口 8080 上的任何传入连接。

现在,我们将验证服务器是否按预期工作。启动服务器:

在新的终端中,我们可以使用 curl 向服务器发送请求:

或者,您可以在 Web 浏览器中访问该链接:

步骤 3 – 创建 Dockerfile

一个 Dockerfile  包含生成 Docker 镜像所需的指令。文件中的指令是按顺序执行的。 了解更多关于 Dockerfile.

为我们的项目创建一个新的 Dockerfile 用于我们的项目:

现在,我们将在其中引入必要的代码。在文本编辑器中打开它:

输入以下代码:

这里,

  • 任何 Dockerfile 必须以 FROM 指令开始。在我们的例子中,我们声明 Python 作为 Docker 镜像的基础。

  • ENV SRC_DIR 指令指定了容器目录的位置。

  • COPY 指令从 src 目录复制文件,该目录当前托管着 Python 服务器。

  • 变量 PYTHONBUFFERED=1 指定 Python 将直接把输出打印并记录到 STDOUT。否则,日志将不会发送到任何缓冲区。

  • CMD 指令指定了执行容器时运行的默认命令。在这种情况下,我们使用该指令来启动我们的 Python 服务器。

步骤 4 – 生成 Docker 镜像

Dockerfile 准备就绪后,我们现在可以构建镜像了。运行以下 Docker 命令来启动该过程:

这里,

  • -t 标志用于将我们的 Docker 镜像标记为 python_server.

  • Docker 将下载所有必要的组件并将其合并为一个镜像。

步骤 5 – 执行镜像

镜像已准备好进行部署。我们可以使用以下命令执行它:

这里,我们使用 -p 标志将本地机器的 8080 端口转发到 Docker 镜像。

我们可以使用 轻松验证服务器是否已启动并运行curl:

步骤 6 – 终止服务器

在终端中,按 “Ctrl + C” 终止 Docker 进程:

步骤 7 – 导出和导入 Docker 镜像

我们现在拥有一个托管 Python 服务器的功能性 Docker 镜像。借助 Docker 的导出和导入功能,我们可以将其迁移到任何其他系统。

首先,检查当前系统中的 Docker 镜像列表:

我们的目标是我们刚刚创建的 python_server Docker 镜像。以下命令将其导出为 TAR 归档文件:

python_server.tar 文件传输到目标机器后,使用以下命令导入 Docker 镜像:

结语

在本指南中,我们演示了如何从 Python 应用程序构建 Docker 镜像。我们创建了一个简单的 Python Web 服务器,并以此构建了一个 Docker 镜像。该 Docker 镜像现在可以部署在任何环境中,并期望获得一致的行为。

有兴趣了解更多关于 Docker 的信息吗?请查看以下指南:

祝您计算愉快!

author

Preslav Dobrev

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。