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.总结

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

目录
相关文章
|
4月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
4月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
459 0
|
4月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
236 8
|
4月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
270 8
|
4月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
635 5
|
5月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
379 2
|
5月前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
186 1
|
4月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
248 0
|
4月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
229 0
|
5月前
|
机器学习/深度学习 存储 算法
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
237 0