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

如何使用 Dockerfile 创建自定义镜像

使用 Dockerfile 创建自定义镜像的过程非常清晰,通常包括定义基础镜像、安装依赖、复制代码、设置环境变量和启动命令等步骤。下面详细讲解从零创建自定义镜像的完整流程。


一、什么是 Dockerfile?

Dockerfile 是一个文本文件,定义了如何构建 Docker 镜像的指令脚本。每条指令都会创建镜像的一层。


二、自定义镜像的基本步骤

📁 示例项目结构:

myapp/
├── Dockerfile
├── app.py
├── requirements.txt

三、Dockerfile 示例(以 Python 项目为例)

# 1. 使用官方基础镜像
FROM python:3.11-slim# 2. 设置工作目录
WORKDIR /app# 3. 拷贝代码和依赖
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt# 4. 拷贝应用代码
COPY app.py ./# 5. 设置环境变量(可选)
ENV TZ=Asia/Shanghai# 6. 定义启动命令
CMD ["python", "app.py"]

四、构建镜像

在包含 Dockerfile 的目录下执行:

docker build -t my-python-app .

说明:

  • -t:指定镜像名称
  • .:当前目录为构建上下文(包含 Dockerfile)

五、运行自定义镜像

docker run -d -p 5000:5000 my-python-app

容器运行后可以访问服务(如 Flask):

http://localhost:5000

六、常用 Dockerfile 指令总结

指令作用
FROM指定基础镜像(必须第一行)
WORKDIR设置容器内工作目录
COPY拷贝文件到容器
RUN执行命令(如安装依赖)
ENV设置环境变量
EXPOSE声明端口(不映射,仅用于说明)
CMD容器启动时默认执行命令
ENTRYPOINT设置主执行命令(可与 CMD 结合)

七、优化建议(生产环境)

优化项示例或说明
✅ 使用 .dockerignore避免将 .git, venv, node_modules 等传入镜像上下文
✅ 使用多阶段构建(如 Java 项目)构建依赖在第一个阶段,运行用最小镜像
✅ 固定基础镜像版本避免使用 latest,例如:python:3.11.7
✅ 添加元信息使用 LABEL 记录镜像作者、版本等
✅ 适当清理缓存pip install --no-cache-dir 等防止镜像过大

八、示例:Java Spring Boot 项目 Dockerfile

FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
COPY target/myapp.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

九、构建并推送镜像到镜像仓库(如 Docker Hub)

docker build -t myname/myapp:v1.0 .
docker login
docker push myname/myapp:v1.0

十、总结一句话:

使用 Dockerfile 构建镜像是容器化的第一步,只需定义清晰的构建步骤,即可快速打造可部署、可复用的镜像,支持跨环境一致运行。


http://www.xdnf.cn/news/14592.html

相关文章:

  • 【LUT技术专题】采样间隔自适应3DLUT-AdaInt
  • 《思维力:高效的系统思维》
  • 《Kubernetes》Pod详解+Pod控制器
  • 计量经济学(复习/自用/未完)
  • OpenAI 公布《走向理解与预防失准泛化:由“角色特征”驱动的突现性失准》研究总结
  • Postman 的 Jenkins 管理 - 自动构建
  • Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)
  • 1 Studying《Performance Analysis and Tuning on Modern CPUs》1-6
  • 语音情感识别:CNN-LSTM 和注意力增强 CNN-LSTM 模型的比较分析
  • godot2D的经典小游戏demo
  • Kafka存储设计深度剖析:日志、索引与文件管理的底层奥秘
  • 微信小程序canvas实现抽奖动画
  • 【深度学习】条件随机场(CRF)深度解析:原理、应用与前沿
  • JS红宝书笔记 8.3 继承
  • 额度互动促进金融健康,蚂蚁消金创新智能实时交互式风控系统
  • 门锁开关;与我们生活中紧密联系!
  • IntersectionObserver API应用场景示例代码详解
  • b站视频如何下载到电脑上
  • Linux驱动学习day5
  • Linux系统移植⑨:uboot启动流程详解-bootz启动Linux过程
  • 如何在 MX Linux 上安装 Mint 的 Cinnamon 桌面 UI
  • C语言——枚举
  • STM32 GPIO 寄存器开发
  • Vue 二维码组件
  • 力扣-416.分割等和子集
  • shelve模块的使用
  • 数据结构--栈和队列
  • Cobbler批量安装流程及具体配置步骤
  • 鸿蒙开发:基于最新API,如何实现组件化运行
  • 如何用K8s+Istio进行云原生开发?