使用docker部署python项目
这里默认已经安装好docker并进行了相关配置,只演示使用docker打包并部署一个简单的python项目。
更多docker基本操作参考:【docker】—— docker常用操作
下面是准备好的项目和程序:
- 项目结构:
项目:DOCKER_PYTHON_TESE
文件:main.ipynb
- 代码如下:
# main.ipynb代码import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
# 创建一个随机图
num_nodes =100# 节点数量
prob_edge =0.1# 边的生成概率
G = nx.erdos_renyi_graph(num_nodes, prob_edge)# 初始化节点状态:0表示未感染,1表示感染
node_states = np.zeros(num_nodes)# 随机选择一个感染节点
initial_infected = np.random.randint(num_nodes)
node_states[initial_infected]=1defpropagate_infection(G, node_states, infection_prob=0.3, steps=10):for _ inrange(steps):
new_states = node_states.copy()for node in G.nodes():if node_states[node]==1:# 如果该节点已感染# 检查相邻节点for neighbor in G.neighbors(node):if node_states[neighbor]==0:# 如果邻居未感染# 以一定概率感染邻居if np.random.rand()< infection_prob:
new_states[neighbor]=1
node_states = new_states
return node_states
# 模拟感染传播
final_states = propagate_infection(G, node_states)# 可视化结果
pos = nx.spring_layout(G)# 布局
colors =['red'if state ==1else'lightblue'for state in final_states]
nx.draw(G, pos, node_color=colors, with_labels=True, node_size=200)
plt.title("Random Diffusion Model")
plt.show()
一、 创建Dockerfile配置文件
Dockerfile是用来构建Docker镜像的文本文件(脚本文件),文本内容包含了一条条构建镜像所需的指令、参数和说明。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。相关的配置参数介绍可以参考:【docker】——docker常用操作
- 为项目创建一个Dockerfile的配置文件
# Dockerfile配置文件# 使用官方的 Python 3.10 运行时作为父镜像
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 复制当前目录内容到容器中的工作目录
COPY ..# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 指定容器启动时执行的命令
CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--allow-root", "--no-browser"]
- 参数介绍
- FROM:指定我们运行的环境为python3.10(基础镜像),我们根据项目的情况在Dockerhub搜索相关的基础镜像和版本,如下图:
Simple Tags下有不同的版本可以选择。
- WORKIR:设置项目目录
- COPY:把文件复制到容器
- RUN:安装项目运行的依赖库
- CMD:运行容器后要执行的命令
二、 生成requirements.txt
为了方便项目的部署,我们可以创建requirements.txt来说明项目需要的依赖库。
- 安装pipreqs库
pip install pipreqs
- 自动生成requirements.txt
pipreqs .
运行之后自动在项目目录下生成一个requirements.txt文件,如下图所示:
注:pipreqs是对于.py文件使用的,这里先把main.ipynb文件转成main.py然后自动生成,由于运行的是jupyter notebook文件,所以还要再requirements.txt中加上一个jupyter库,在实际操作过程中,大家可以根据实际情况来选择手动创建或自动生成。
三、 构建docker镜像
- 在终端运行下面命令来创建镜像
docker build -t my-python-app .
- 创建成功,查看镜像,输入下面命令
docker images
可以看到镜像my-python-app创建成功。
四、 运行docker容器
- 运行Docker容器
docker run -it --rm -p 8888:8888 my-python-app
参数解释:
- -it:以交互模式运行容器,允许与容器进行交互
- -p:端口映射
- –rm:容器运行结束之后立刻删除(不保存数据)
2. 点击带token的链接自动跳转jupyter notebook
成功进入,打开main.ipynb运行,运行结果如下:
正常运行,进入下一步。
五、 镜像导出
将制作好的镜像打包并导出
- 导出镜像
docker save -o my-python-app.tar my-python-app
六、 重新部署
将打包好的镜像文件导入到别的电脑测试,这里没有新的电脑,先将原容器删除,并创建新的文件夹模拟新电脑。
补充:经实测,这周在学校的机房使用相同的步骤导入了镜像,并启动容器,完美运行!
- 准备工作
- 删除旧的镜像
docker rmi my-python-app
- 准备新环境
项目:Docker_Python_Test——another_computer
镜像:my-python-app.tar
- 加载镜像
- 导入镜像
docker load -i my-python-app.tar
镜像已经导入
- 测试
- 运行容器
docker run -it --rm -p 8888:8888 my-python-app
可以看到jupyter已经成功跑起来了,并且main.ipynb文件可以正常运行。
七、总结
Docker 是一个开源平台,用于自动化应用程序的部署、扩展和管理。它通过容器技术实现轻量级、可移植的应用打包,确保在不同环境中应用的一致性。关键组件包括:
- 容器:运行应用的独立环境。
- 镜像:容器的只读模板,包含应用及其依赖项。
- Dockerfile:定义镜像构建过程的文本文件。
Docker 的优势在于快速部署、资源节省和环境隔离,广泛用于微服务架构、持续集成/持续部署(CI/CD)和开发环境搭建。使用简单的命令,可以轻松构建和管理应用容器。
版权归原作者 花间相见 所有, 如有侵权,请联系我们删除。