在 docker 中部署 python 工程

本文详细介绍如何通过Docker部署Python项目,包括Dockerfile配置、镜像与容器的创建及运行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装 docker

已经按照:docker 命令 教程,安装完成 docker,并创建了包含完整 requirement 的镜像:py_container_1

工程上传

首先将本地(线上)工程目录 zip 压缩,并上传到 linux 实体机,后解压缩,进入到工程目录:cd /home/q/www/python_project_1

Dockerfile 文件创建

在同级目录下创建 Dockerfile 文件(无扩展名): Dockerfile 的指令详解参考:http://www.ityouknow.com/docker/2018/03/15/docker-dockerfile-command-introduction.html

# 基于镜像基础
FROM py_container_1:3.6

# 设置代码文件夹工作目录
WORKDIR /home/q/www/python_project_1

# 复制当前代码文件(. 是指当前文件夹下的所有文件包括目录等)到容器指定目录中
ADD . /home/q/www/python_project_1

# Run servers.py when the container launches,这里的 servers.py 是工程的启动代码
CMD ["python", "servers.py"]
  • 其中 FROM 是指从哪个镜像创建(这里用的是已经安装好 requirement 的镜像,因此不需要增加 RUN pip install -r requirements.txt 的指令了)
  • WORKDIR 用于在容器内设置一个工作目录:设置后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都会在该目录下执行。
  • COPY <源路径>... <目标路径>,COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的<目标路径>位置,例子:COPY package.json /usr/src/app/
  • ADD <源路径>... <目标路径>:COPY 和 ADD 的用法一样,ADD 基础上增加了一些功能。比如 <源路径> 可以是一个 URL
  • CMD 与 RUN 指令的区别:RUN 在构建的时候执行,并生成一个新的镜像,CMD 在容器运行的时候执行,在构建时不进行任何操作:CMD ["executable","param1","param2"]
创建工程的镜像

然后执行:sudo docker build -t python_project_1 . (python_project_1 为创建的镜像名称,后面有个 . 表示当前目录)

创建工程的容器

然后执行:sudo docker run -it -p 1234:9002 --name project_test python_project_1,运行镜像,生成并启动一个叫 project_test 的容器,启动时的日志,和发布线上时的日志是一样的

在这里插入图片描述

调用

POST 请求时,使用的是 Linux 机器的 ip 或名字(也就是截图里的 2345 ),然后 +加上 Linux 的实际端口号(不是容器的端口号)

### 如何在无网络环境下使用 Docker Python 项目 #### 准备阶段 为了实现 Docker 环境下的离线部,需要提前准备好所有的依赖项以及镜像文件。这包括基础操作系统镜像、Python 运行时环境以及其他必要的库和工具。 - 基础操作系统的准备可以通过在线环境中构建并导出的方式完成。例如,在有网络连接的机器上创建所需的 Dockerfile 并构建镜像后,将其保存为 tar 文件以便传输到目标离线设备[^1]。 ```bash docker save -o my-python-app.tar my-python-app-image ``` 随后通过物理介质或其他方式将此 `.tar` 文件复制至目标服务器,并加载回 Docker 中: ```bash docker load < my-python-app.tar ``` #### 构建自定义镜像 对于 Python 应用程序而言,通常会基于官方发布的 Python 镜像作为起点。然而,在完全断开互联网的情况下,则需手动预先获取这些资源并将它们嵌入到最终使用的镜像里。 - 使用 `COPY` 指令把本地已下载好的包放入镜像内部指定位置,再利用 pip 安装命令来处理这些预存软件包。这里展示了一个例子,其中 `/tmp/` 被用来存储所有必需品[^5]: ```Dockerfile FROM python:3.9-slim-buster WORKDIR /app # 将需求列表拷贝进去 COPY requirements.txt . # 创建临时目录用于存放离线安装包 RUN mkdir -p /tmp/packages && \ chmod 755 /tmp/packages # 把之前收集好的 wheel 或者 source distribution 放置于此路径下 COPY packages/* /tmp/packages/ # 执行安装过程 RUN pip install --no-index --find-links=/tmp/packages -r requirements.txt # 添加源码进入工作区 COPY . . CMD ["python", "./your-application.py"] ``` 上述脚本中的关键部分在于如何正确设置 `--no-index` 参数配合 `-f|--find-links` 来指向包含所需二进制或源代码分发版的位置[^2]。 #### 启动服务与管理容器 一旦完成了定制化镜像制作之后就可以按照常规方法启动相应的服务了。如果遇到某些特殊情况比如忘记开启某个端口映射等问题也可以借助于命令行参数调整[^3]。 另外值得注意的是当重新激活停止状态的服务实例时候可以采用如下技巧批量恢复多个暂停下来的进程: ```bash docker start $(docker ps -aq) ``` 以上就是关于怎样在一个完全没有外部访问权限条件下运用 Docker 实现 Python 工程上线的一系列指导方针[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值