Python【算法中心 04】Docker镜像制作的两种方式代码内置与代码挂载(部署简单和避免修改Docker内文件的权衡)

简介: Python【算法中心 04】Docker镜像制作的两种方式代码内置与代码挂载(部署简单和避免修改Docker内文件的权衡)

1.原因说明

代码内置的方式部署时只有一个镜像,不需要额外的文件,但是如果出现代码问题,修改就比较麻烦了,所以需要进行代码的外挂。这里还是以Django项目Docker的部署举例。

2.代码内置

2.1 镜像制作

Docker 的 Python Official Image 使用指南

FROM python:3
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
COPY . .
EXPOSE 8086
CMD python manage.py runserver 0.0.0.0:8086

使用更小的运行环境python:3.7-slim-stretch98MB

FROM python:3.7-slim-stretch
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
COPY . .
EXPOSE 8086
CMD python manage.py runserver 0.0.0.0:8086
# 1.构建镜像 -f ./DockerFile
docker build -t algorithm .

2.2 镜像的保存

# 1.查看当前镜像
docker images
[root@tcloud ~]# docker images
REPOSITORY   TAG                IMAGE ID       CREATED         SIZE
algorithm    latest             c54e5d681dd3   14 hours ago    230MB
python       3.7-slim-stretch   80b07211911e   19 months ago   98MB
# 2.导出指定版本的镜像
docker save algorithm:latest -o algorithm.tar
[root@tcloud ~]# docker save algorithm:latest -o algorithm.tar
# 3.查看保存的镜像文件
[root@tcloud ~]# ll
total 237196
-rw------- 1 root root 242887680 Mar  9 08:30 algorithm.tar

2.2 镜像的使用

# 1.停止所有容器并删除容器和镜像
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
# 2.验证
[root@tcloud ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
# 3.镜像使用
docker load -i algorithm.tar
[root@tcloud ~]# docker load -i algorithm.tar
c0a294e617df: Loading layer [==================================================>]  58.51MB/58.51MB
62856a9a6856: Loading layer [==================================================>]  6.814MB/6.814MB
454d5f8832aa: Loading layer [==================================================>]  27.58MB/27.58MB
67b6ca5ec6cb: Loading layer [==================================================>]  4.608kB/4.608kB
0e3d2a7a5b02: Loading layer [==================================================>]   10.1MB/10.1MB
38961ae8e0f1: Loading layer [==================================================>]  2.048kB/2.048kB
a0d122052f56: Loading layer [==================================================>]   2.56kB/2.56kB
983c81d925e2: Loading layer [==================================================>]  139.8MB/139.8MB
Loaded image: algorithm:latest
# 4.镜像验证
[root@tcloud ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
algorithm    latest    c54e5d681dd3   14 hours ago   230MB
# 5.启动测试
docker run -di --name ac -p 8086:8086 algorithm
# 6.查看运行日志
docker logs -f --tail=100 ac

3.代码挂载

Dockerfile文件内容,这里少了COPY . .,镜像内的启动命令修改为CMD python /home/ac/manage.py runserver 0.0.0.0:8086不将文件放到镜像内。

FROM python:3.7-slim-stretch
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
EXPOSE 8086
# 执行的文件是在外边的(需要镜像挂载)
CMD python /home/ac/manage.py runserver 0.0.0.0:8086

代码文件放置:

镜像的制作和代码内置是一样的,这里不再赘述,只有运行镜像时是不同的,添加了-v进行文件的挂载:

docker run -di -v /home/algorithm:/home/ac --name ac -p 8086:8086 algorithmcenter

4.总结

两种方式没有好坏之分,方式一适合稳定的代码不需要临时调整,此时部署简单,方式二适合需要进行调试的代码,修改方便。

目录
相关文章
|
20天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
13天前
|
消息中间件 Kafka 流计算
docker环境安装kafka/Flink/clickhouse镜像
通过上述步骤和示例,您可以系统地了解如何使用Docker Compose安装和配置Kafka、Flink和ClickHouse,并进行基本的验证操作。希望这些内容对您的学习和工作有所帮助。
93 28
|
26天前
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
122 26
|
1月前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
58 20
|
1月前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
1月前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
4天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
79 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
9天前
|
算法
基于遗传优化算法的风力机位置布局matlab仿真
本项目基于遗传优化算法(GA)进行风力机位置布局的MATLAB仿真,旨在最大化风场发电效率。使用MATLAB2022A版本运行,核心代码通过迭代选择、交叉、变异等操作优化风力机布局。输出包括优化收敛曲线和最佳布局图。遗传算法模拟生物进化机制,通过初始化、选择、交叉、变异和精英保留等步骤,在复杂约束条件下找到最优布局方案,提升风场整体能源产出效率。
|
9天前
|
算法 安全 机器人
基于包围盒的机械臂防碰撞算法matlab仿真
基于包围盒的机械臂防碰撞算法通过构建包围盒来近似表示机械臂及其环境中各实体的空间占用,检测包围盒是否相交以预判并规避潜在碰撞风险。该算法适用于复杂结构对象,通过细分目标对象并逐级检测,确保操作安全。系统采用MATLAB2022a开发,仿真结果显示其有效性。此技术广泛应用于机器人运动规划与控制领域,确保机器人在复杂环境中的安全作业。
|
9天前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。