通过编写dockerfile部署python项目

news2024/11/16 13:40:27

docker命令总览

在这里插入图片描述

docker通过dockerfile构建镜像常用命令

# 创建镜像(进入dockerfile所在的路径)
docker build -t my_image:1.0 .

# 查看镜像
docker images

# 创建容器
docker run -dit --restart=always -p 9700:9700 --name my_container my_image:1.0 

# 查看容器
docker ps -a

# 进入容器
docker exec -it my_container /bin/bash

# 退出容器
exit

# 暂停容器
docker stop my_container 

# 删除容器
docker rm my_container 

dockerfile编写

# 使用官方的Python运行时作为父镜像
FROM python:3.10
# 设置工作目录为/app
WORKDIR /app
# 将当前目录内容复制到位于 /app 的容器中
COPY . /app
# 安装任何需要的包
RUN pip install torch-2.0.0+cpu-cp310-cp310-linux_x86_64.whl
RUN pip install torchvision-0.15.1+cpu-cp310-cp310-linux_x86_64.whl
RUN pip install --no-cache-dir -r requirements_new.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 将/etc/localtime链接到上海时区文件
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 对外暴露的端口号
EXPOSE 9700
# 定义环境变量
ENV model = gpt-4-vision-preview
# 当容器启动时运行python app.py
CMD ["python", "app.py"]

dockerfile中COPY与ADD的区别

在 Dockerfile 中,COPY 和 ADD 指令都用于将文件或目录从构建上下文复制到镜像中,但它们之间有一些重要的区别:

1.基本功能:

  • COPY:将本地文件或目录复制到镜像中。
  • ADD:将本地文件、目录或远程文件 URL 的内容复制到镜像中。如果源文件是一个 URL,并且目标文件不存在,则 ADD 指令还会下载和解压 URL 指向的文件(如果它是压缩的)。

2.对压缩文件的处理:

  • COPY:不会处理压缩文件,如果源文件是一个 .tar、.gz 或其他压缩格式的文件,它将被复制到镜像中,但不会解压。
  • ADD:如果源文件是一个压缩文件(如 .tar、.tar.gz、.tgz、.bz2、.xz 等),则 ADD 指令会自动解压该文件到目标目录(如果指定了的话)。

3.构建缓存:

  • COPY 和 ADD 都会受益于 Docker 的构建缓存。但是,由于 ADD 会处理 URL 和解压文件,因此它可能更难以有效地使用缓存。如果远程文件的内容更改,或者压缩文件的内容更改,即使解压后的内容没有更改,ADD 也可能导致缓存失效。

4.最佳实践:

通常,推荐使用 COPY 指令,因为它更直观、更简单,并且更容易理解。当需要复制本地文件或目录到镜像时,COPY 是首选。
如果需要从远程 URL 下载文件,或者需要解压压缩文件到镜像中,可以使用 ADD 指令。但是,请注意 ADD 的一些潜在问题,如缓存失效和不必要的复杂性。

5.安全性:

  • 使用 ADD 从远程 URL 下载文件可能会引入安全风险,因为远程文件的内容可能不受控制。如果可能,最好从受信任的源下载文件,并使用 COPY 指令将文件复制到镜像中。

6.目标路径:

  • 对于 COPY 和 ADD,如果目标路径不存在,Docker 将尝试创建它。但是,如果目标路径是一个文件而不是目录,并且该文件已经存在,则操作将失败。

总结:在 Dockerfile 中,应优先考虑使用 COPY 指令来复制本地文件或目录到镜像中。只有在需要特定功能(如从远程 URL 下载文件或解压压缩文件)时,才使用 ADD 指令。

将容器转化为镜像和镜像压缩解压

# 将容器转化为镜像
docker commit my_container  my_image:1.2

# 将镜像转为压缩包
docker save -o my_package.tar my_image:1.2

# 删除原镜像
docker rmi my_image:1.2

# 将压缩包解压得到镜像
docker load –i my_package.tar

将镜像推送到私有仓库

# 标记镜像
docker tag logistics_park:base 10.82.27.215:10081/ai_platform/logistics_park:base

# 将镜像推送到私有仓库
docker push 10.82.27.215:10081/ai_platform/logistics_park:base

根据基础镜像创建docker容器

docker pull python:3.10
# 创建容器不进入
docker run -dit --name=p1 python:3.10
# 进入容器
docker exec -it p1 bash
# 创建文件夹
mkdir app
# 推出容器
exit
# 将需要的依赖拷贝到镜像指定目录
docker cp torchvision-0.15.1+cpu-cp310-cp310-linux_x86_64.whl p1:app/
# 升级pip
pip3 install --upgrade pip

# 安装需要的依赖(加上镜像源)
pip install -r requirements_new.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 退出容器
exit
# 将容器打包为镜像(确保容器正在运行)
docker commit p1 logistics_park:base
# 标记镜像
docker tag logistics_park:base 10.82.27.215:10081/ai_platform/logistics_park:base
# 将镜像推送到私有仓库
docker push 10.82.27.215:10081/ai_platform/logistics_park:base
# 构建镜像
docker build -t logistics_park:v1.0 .
# 容器运行命令:
docker run -dit --restart=always -p 9700:9700 --name logistics_park logistics_park:v1.0

通过基础镜像创建容器的dockefile

# 使用官方的Python运行时作为父镜像
FROM 10.82.27.215:10081/ai_platform/logistics_park:base
# 设置工作目录为/app
WORKDIR /app
# 将当前目录内容复制到位于 /app 的容器中
COPY . /app
# 将/etc/localtime链接到上海时区文件
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 验证时区
RUN date
# 对外暴露的端口号
EXPOSE 9700
# 定义环境变量
# ENV model = gpt-4-vision-preview
# 当容器启动时运行python app.py
CMD ["python", "app.py"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1656394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跟随Facebook的足迹:社交媒体背后的探索之旅

在当今数字化时代,社交媒体已经成为了人们日常生活中不可或缺的一部分。而在这庞大的社交媒体网络中,Facebook作为其中的巨头,一直在引领着潮流。从创立之初的一个大学社交网络到如今的全球性平台,Facebook的发展历程承载了无数故…

【LeetCode】链表oj专题

前言 经过前面的学习,咋们已经学完了链表相关知识,这时候不妨来几道链表算法题来巩固一下吧! 如果有不懂的可翻阅之前文章哦! 个人主页:小八哥向前冲~-CSDN博客 数据结构专栏:数据结构【c语言版】_小八哥…

初学者必知:ARM与单片机的区别

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「ARM的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!ARM和单片机之间有许多区别&#…

使用Processing和PixelFlow库创建交互式流体太极动画

使用Processing和PixelFlow库创建交互式流体太极动画 引言准备工作效果展示代码结构代码解析第一部分:导入库和设置基本参数第二部分:流体类定义MyFluidDataConfig 类详解MyFluidData 类详解my_update 方法详解流体类定义完整代码 第三部分:太…

信创基础软件之中间件

信创基础软件之中间件 中间件概述 中间件是一种应用于分布式系统的基础软件,位于应用与操作系统、数据库之间,主要用于解决分布式环境下数据传输、数据访问、应用调度、系统构建和系统集成、流程管理等问题,是分布式环境下支撑应用开发、运…

深圳CPDA|如何利用数据分析改进业务流程,提高效率?

在当今数字化时代,数据已经成为企业决策和优化的关键资源。通过有效地收集、分析和应用数据,企业可以深入了解其业务流程中的瓶颈和问题,从而改进流程,提高效率。本文将探讨如何利用数据分析改进业务流程,并提高效率。…

FebHost:什么是.ME域名?

.ME域名是一个独一无二且被广泛接受的顶级域名(TLD),在近年来逐渐受到了大众的喜爱。最初,它被设定为黑山的国家/地区代码顶级域名(ccTLD)。但现在,.ME已经发展成为一个全球公认的顶级域名&…

Python应用:让生活更智能

随着科技的进步,Python已成为一种非常受欢迎的编程语言,它在数据分析、人工智能、Web开发等领域有着广泛的应用。今天,我们将探讨一个Python应用的例子,这个应用将帮助我们更智能地管理日常生活。 应用名称:智能生活助…

鸿蒙开发接口Ability框架:【@ohos.application.StartOptions (StartOptions)】

StartOptions StartOptions模块对系统的基本通信组件进行查询和设置的能力。 说明: 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下使用。 开发前请熟悉鸿蒙开发指导文档…

CentOS 重启网络失败service network restart

命令 service network restart 提示 Job for network.service failed because the control process exited with error code. See “systemctl status network.service” and “journalctl -xe” for details. 原因分析 使用journalctl -xe命令查看日志后的具体错误 -- Un…

STM32单片机实战开发笔记-PWM波输出频率及占空比配置【wulianjishu666】

单片机物联网开发资料: 链接:https://pan.baidu.com/s/1XzodQuML7CqZ4ZKinDGKkg?pwdbgep 提取码:bgep PWM模块测试 功能描述 脉冲宽度调制模式: PWM边沿对齐模式: 向上计数配置 当TIMX_CR1寄存器中的DIR为低的时…

AD3552/AD3551驱动开发

开发环境:Vivado2021.2 ; Windows with Cygwin HDL版本:hdl_2021_r2 GitHub - analogdevicesinc/hdl at hdl_2021_r2 no-OS版本:no_OS-2021_R2 GitHub - analogdevicesinc/no-OS at 2021_R2 1.创建hdl 详细步骤参见参考链接1&#xf…

基于PHP高考志愿填报系统搭建私有化部署源码

金秋志愿高考志愿填报系统是一款为高中毕业生提供志愿填报服务的在线平台。该系统旨在帮助学生更加科学、合理地选择自己的大学专业和学校,从而为未来的职业发展打下坚实的基础。 该系统的主要功能包括:报考信息查询、志愿填报数据指导、专业信息查询、院校信息查询…

Allegro如何输出器件坐标文件

如何输出器件坐标文件 1、选择菜单栏File(文件)→Placement…(放置) 2、跳出下面的对话框,选择原点位置在Body Center(几何中心),然后选择Export(导出)&…

教练预约管理小程序开发源码现成案例(小程序、APP、H5圆源码搭建)

随着人们对身体健康越来越重视,对强身健体、健康个性化生活的需求日益增加,健身已成为时尚生活的标志。 然而,没有时间去健身房却成了很多上班族的痛点。健身房作为一项既能缓解工作压力又能缓解学业压力的运动,正好满足了当代人…

数据分析——业务数据描述

业务数据描述 前言一、数据收集数据信息来源企业内部数据源市场调查数据源公共数据源和第三方数据源 二、公司内部数据客户资料数据销售明细数据营销活动数据 三、市场调查数据观察法提问法实验法 四、公共数据五、第三方数据六、数据预处理七、数据清洗丢弃部分数据补全缺失的…

前端双语实现方案(VUE版)

一、封装一个lib包 结构如下 en.js use strict;exports.__esModule true; exports.default {sp: {input: {amountError: Incorrect amount format},table: {total: Total:,selected: Selected:,tableNoData: No data,tableNoDataSubtext: Tip: Suggest to recheck your fil…

浅析安全用电监控系统在工厂的研究与应用论述

摘 要:随着社会时代的发展,人们的安全意识越来越强烈,在人们生活和工作中离不开各种用电设备,用电设备的安全使用是保障人们生命安全的重要内容。工厂因自身厂内工作环境的特殊性,用电设备的种类多且复杂,如…

云原生测试实战-云计算大数据云原生架构容器技术Kubernetes计算机软件工程软件开发

系列文章目录 送书第一期 《用户画像:平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 …

AC/DC电源模块在通信与网络设备中的应用研究

BOSHIDA AC/DC电源模块在通信与网络设备中的应用研究 随着通信与网络技术的不断发展,通信与网络设备的使用不断增加。电源作为通信与网络设备的重要组成部分之一,在其稳定工作中起到至关重要的作用。AC/DC电源模块作为一种常用的电源转换器,…