当前位置: 首页 > news >正文

创建自己的Docker镜像,使用工具:GitHub(远程仓库)、GitHub Desktop(版本控制工具)、VSCode(代码编辑器)

前一篇博文:建自己的Python项目仓库,在此基础上,本文讨论
创建自己的Docker镜像的流程,核心是通过Dockerfile定义镜像配置,并通过工具协同管理相关文件。以下是具体步骤:

一、准备工作

  1. 确保已安装:
    • Docker Desktop(已启动,且能正常运行docker命令)
    • 已完成前面的Python项目仓库搭建(包含src/requirements.txt等核心文件)。

二、添加Docker相关文件(在VSCode中操作)

在项目根目录下新增2个关键文件,用于定义Docker镜像构建规则:

1. Dockerfile(核心配置文件)

在VSCode中新建文件Dockerfile(无后缀),内容如下(针对Python项目的通用模板):

# 基础镜像:选择Python官方镜像(版本与项目兼容,如3.9)
FROM python:3.9-slim# 设置工作目录(容器内的项目根目录)
WORKDIR /app# 复制依赖文件到容器(优先复制依赖文件,利用Docker缓存加速构建)
COPY requirements.txt .# 安装项目依赖(使用国内镜像源加速,可选)
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 复制项目所有文件到容器(.dockerignore中排除的文件不会被复制)
COPY . .# 可选:暴露端口(若项目是Web服务,如Flask/Django,需指定端口)
# EXPOSE 5000# 容器启动命令(根据项目类型修改,此处以运行示例脚本为例)
CMD ["python", "examples/demo.py"]
2. .dockerignore(排除无需打包的文件)

在VSCode中新建.dockerignore文件,避免将无关文件(如虚拟环境、编辑器配置)打包进镜像,减少镜像体积:

# 排除Git相关文件
.git
.github/# 排除虚拟环境和依赖缓存
venv/
.venv/
__pycache__/
*.py[cod]# 排除编辑器配置
.vscode/
.idea/# 排除测试和文档(按需保留,若镜像需要运行测试可删除此行)
tests/
docs/# 排除本地日志和临时文件
logs/
tmp/

三、提交Docker文件到仓库(用GitHub Desktop)

  1. 在VSCode中保存Dockerfile.dockerignore后,切换到GitHub Desktop。
  2. 此时会自动检测到这两个新增文件(标绿),在“Summary”中填写提交信息(如“添加Docker配置:支持镜像构建”)。
  3. 点击“Commit to main”提交到本地仓库,再点击“Push origin”推送到GitHub远程仓库(确保团队成员可共享Docker配置)。

四、构建并测试Docker镜像(在VSCode终端操作)

  1. 在VSCode中打开终端(Ctrl+``),进入项目根目录(已通过GitHub Desktop克隆的本地仓库路径)。

  2. 构建镜像:执行以下命令(my-python-app是自定义镜像名,:v1是版本标签):

    docker build -t my-python-app:v1 .
    
    • 过程说明:Docker会根据Dockerfile逐步执行命令(下载基础镜像→复制文件→安装依赖),首次构建可能需要几分钟。
    • 成功标志:终端最后显示“Successfully tagged my-python-app:v1”。
  3. 运行容器测试:执行以下命令启动基于镜像的容器,验证功能是否正常:

    docker run --rm my-python-app:v1
    
    • --rm:容器退出后自动删除,避免残留。
    • examples/demo.py中有print输出,终端会显示对应内容(如“数据清洗完成!”),说明镜像运行正常。

五、进阶:将镜像推送到Docker仓库(可选)

若需将镜像共享给他人(如团队成员或部署到服务器),可推送到Docker Hub或私有仓库:

  1. 登录Docker Hub(需提前注册账号):
    docker login
    
  2. 给镜像打标签(格式:仓库用户名/镜像名:版本):
    docker tag my-python-app:v1 你的Docker用户名/my-python-app:v1
    
  3. 推送镜像:
    docker push 你的Docker用户名/my-python-app:v1
    

六、工具协同

  1. VSCode:编辑Dockerfile.dockerignore,通过终端执行docker命令,可安装“Docker”扩展(微软官方)实时验证Dockerfile语法。
  2. GitHub Desktop:将Docker配置文件纳入版本控制,确保团队使用统一的镜像构建规则。
  3. GitHub:远程仓库存储Docker配置,配合GitHub Actions可实现“代码提交后自动构建镜像”(需在.github/workflows/中添加CI配置)。

通过添加Dockerfile.dockerignore,并结合VSCode编辑、GitHub Desktop版本控制、Docker命令构建,即可为Python项目创建标准化镜像。核心价值在于:确保项目在任何安装Docker的环境中都能以相同方式运行,解决“本地能跑,部署崩了”的环境一致性问题。

附:Dockerfile示例

# 基础镜像:选择Python官方镜像(版本与项目兼容,如3.9)
FROM python:3.9-slim# 设置工作目录(容器内的项目根目录)
WORKDIR /app# 复制依赖文件到容器(优先复制依赖文件,利用Docker缓存加速构建)
COPY requirements.txt .# 安装项目依赖(使用国内镜像源加速,可选)
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 复制项目所有文件到容器(.dockerignore中排除的文件不会被复制)
COPY . .# 可选:暴露端口(若项目是Web服务,如Flask/Django,需指定端口)
# EXPOSE 5000# 容器启动命令(根据项目类型修改,此处以运行示例脚本为例)
CMD ["python", "examples/demo.py"]

文章转载自:

http://AY4RLzf8.kmpmx.cn
http://l8op86dP.kmpmx.cn
http://IHlFqfyX.kmpmx.cn
http://eLQjmUvD.kmpmx.cn
http://D0cp2v4G.kmpmx.cn
http://F4ekTxxy.kmpmx.cn
http://SxSJQOms.kmpmx.cn
http://Z0GgBmpP.kmpmx.cn
http://UdLVyGl0.kmpmx.cn
http://nWm8gayp.kmpmx.cn
http://12AhHj9S.kmpmx.cn
http://1RqORUA4.kmpmx.cn
http://p6SfaP5E.kmpmx.cn
http://Lfumk1Gh.kmpmx.cn
http://SNjVOWKl.kmpmx.cn
http://HmkeOUZx.kmpmx.cn
http://Bd87ABXy.kmpmx.cn
http://XvdtnyB8.kmpmx.cn
http://3r6HuvGG.kmpmx.cn
http://yf7m09gN.kmpmx.cn
http://5PETMyXl.kmpmx.cn
http://8yoN2lL4.kmpmx.cn
http://pmJyXde9.kmpmx.cn
http://FwQrP2oT.kmpmx.cn
http://xKMDxG9e.kmpmx.cn
http://LJozk2Ew.kmpmx.cn
http://VIoTces9.kmpmx.cn
http://unSA9KM5.kmpmx.cn
http://zmLgEGDq.kmpmx.cn
http://KZcrtzeK.kmpmx.cn
http://www.dtcms.com/a/380932.html

相关文章:

  • Windows11安装Docker Desktop
  • FastJson解析对象后验签失败问题分析
  • 【Vue2手录12】单文件组件SFC
  • Pinia
  • MySQL按时间Range分区
  • python发送请求SSL验证设置
  • 关于栈和队列的OJ练习
  • WebGIS包括哪些技术栈?怎么学习?
  • 15、优化算法工程实践 - 从数学理论到AI训练的核心引擎
  • VS2019 Community 社区版下载链接
  • 高低压隔离器的技术演进与行业赋能
  • 氚燃料增殖里程碑:MIT新型BABY包层技术实验验证
  • 【案例教程】基于R语言的物种气候生态位动态量化与分布特征模拟实践技术应用
  • 《WINDOWS 环境下32位汇编语言程序设计》第16章 WinSock接口和网络编程(1)
  • 实习总结——关于联调解决的因CRC校验导致协议交互失败的调试经验总结
  • 【从零开始的大模型原理与实践教程】--第三章:预训练语言模型
  • GitHub Copilot支持 GPT-5 和 GPT-5 mini!
  • Day01 Geant4学习
  • 11. 网络同步模型 - 状态同步A
  • Mem0 + Milvus:为人工智能构建持久化长时记忆
  • 力学矢量三角形“无脑”求解指南:基于极角代数的系统化方法
  • 算法第四题移动零(双指针或简便设计),链路聚合(两个交换机配置)以及常用命令
  • 背包问题从入门到入土
  • 远程连接--向日葵
  • 植物灯电源芯片选型指南:如何实现高效与智能?
  • Python读取视频-硬解和软解
  • FFmpeg vs 去水印软件:哪种方式更适合你?
  • Java垃圾回收机制理论算法及使用
  • 【Vue2 ✨】Vue2 入门之旅 · 进阶篇(六):keep-alive 与缓存机制
  • IDA pro 生成idapro.hexlic