Docker 是一种免费的开源解决方案,用于在轻量级、操作系统级虚拟化环境中开发、部署和管理应用。在本指南中,我们将演示如何在 Docker 容器中创建一个 Python 应用。
先决条件
要执行本指南中演示的步骤,你需要以下组件:
一台 Linux 系统。查看在 CloudSigma 上配置你自己的 Ubuntu VPS。
已安装并配置最新版 Docker。了解更多关于在 Ubuntu 上安装 Docker 的信息。
Docker 容器
当在同一环境中运行各种程序时,问题可能会(并且确实会)发生。添加的程序越多,环境就越不稳定。对普通用户来说这可能不是什么大问题;但对于关键任务应用,后果可能非常严重。
系统中引入的应用越多,攻击面就越大。一个被攻破的应用很容易导致整个系统崩溃。
为了解决这些问题,我们可以使用 Docker 容器进行软件级沙箱隔离:
容器内的应用对文件的访问会受到限制。
容器化应用无法看到系统中运行的其他进程。
可以为容器分配特定数量的硬件资源。
容器的网络端口不会暴露到外部。
几乎任何内容都能在本地/生产环境之间保持一致的打包方式。
为了演示,我们将构建一个位于 Docker 容器中的简单 Python 服务器,将该容器转换为镜像,并在一个模拟生产环境中部署该镜像。
步骤 1 – 文件系统配置
为了托管项目,首先创建一个专用目录:
mkdir -pv python-server-container/
cd !$
在该目录中创建一个子目录 src,用于存放代码:
mkdir -pv src/

步骤 2 – 构建 Python 服务器
在此步骤中,我们将用 Python 创建一个简单的 HTTP 服务器。创建文件 server.py:
touch server.py
在文本编辑器中打开它:
nano server.py

输入以下 Python 代码:
from http.server import HTTPServer, SimpleHTTPRequestHandler
def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
"""server entrypoint"""
server_address = ("0.0.0.0", 8080)
httpd = server_class(server_address, handler_class)
print("starting server...")
httpd.serve_forever()
if __name__ == "__main__":
run()
这里:
我们使用 HTTPServer 类,并从 Python 标准库请求处理器,从而保持程序简单。
函数 run 会初始化一个 HTTPserver 实例。
正如 server_address 参数所示,服务器会在端口 8080 上监听任何传入连接。
现在,我们验证服务器是否按预期工作。启动服务器:
python3 server.py
![]()
在新的终端中,我们可以使用 curl 向服务器发送请求:
curl -iv localhost:8080

或者,你也可以在 Web 浏览器中访问该链接:
http://localhost:8080

步骤 3 – 创建 Dockerfile
Dockerfile 包含生成 Docker 镜像所需的指令。文件中的指令会按顺序执行。了解更多关于 Dockerfile 的信息。
为我们的项目创建一个新的 Dockerfile:
touch Dockerfile
现在,将必要代码写入其中。在文本编辑器中打开它:
nano Dockerfile
输入以下代码:
FROM python:latest
ENV SRC_DIR /usr/bin/src/test_server/src
COPY src/* ${SRC_DIR}/
WORKDIR ${SRC_DIR}
ENV PYTHONUNBUFFERED=1
CMD ["python", "server.py"]这里:
任何 Dockerfile 都必须以 FROM 指令开头。在本例中,我们声明 Python 作为 Docker 镜像的基础。
ENV SRC_DIR 指令指定容器目录的位置。
COPY 指令会从当前托管 Python 服务器的 src 目录复制文件。
变量 PYTHONBUFFERED=1 指定 Python 会将打印和日志输出直接发送到 STDOUT。否则,日志不会被发送到任何缓冲区。
CMD 指令指定执行容器时默认运行的命令。在本例中,我们使用该指令启动 Python 服务器。
步骤 4 – 生成 Docker 镜像
Dockerfile 准备就绪后,我们现在可以构建镜像。运行以下 Docker 命令启动该过程:
docker build . -t python_server

这里:
-t 标志用于将我们的 Docker 镜像标记为 python_server。
Docker 会下载所有必要组件,并将它们组合成一个镜像。
步骤 5 – 执行镜像
镜像已准备好部署。我们可以使用以下命令执行它:
docker run -p 8080:8080 python_server

这里,我们使用 -p 标志将本地机器的 8080 端口转发到 Docker 镜像。
我们可以使用 curl 轻松验证服务器是否已启动并运行:
curl -iv localhost:8080


步骤 6 – 终止服务器
在终端中按下 “Ctrl + C” 终止 Docker 进程:

步骤 7 – 导出和导入 Docker 镜像
现在,我们已经拥有一个托管 Python 服务器的可用 Docker 镜像。借助 Docker 的导出和导入功能,我们可以将其迁移到任何其他系统。
首先,查看当前系统中的 Docker 镜像列表:
docker images

我们的目标是刚刚创建的 python_server Docker 镜像。以下命令会将其导出为 TAR 归档:
docker save python_server:latest > python_server.tar

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

总结
在本指南中,我们演示了如何基于 Python 应用构建 Docker 镜像。我们创建了一个简单的 Python Web 服务器,并从中构建了 Docker 镜像。该 Docker 镜像现在可以部署到任何环境中,并获得一致的行为表现。
想了解更多关于 Docker 的内容?请查看以下指南:
祝你计算愉快!

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