Docker 镜像与 Dockerfile

type
Post
status
Published
date
Feb 24, 2026
slug
summary
tags
docker
运维
开发
category
技术分享
icon
password

一、Docker 镜像

1. 镜像介绍

notion image
  • 分层文件系统:镜像由多个只读层组成,容器运行时在其上添加一个可写层。
  • 优势
    • 节省空间(层可复用)
    • 启动速度快
    • 便于共享和分发
  • 只读性:镜像本身不可修改,所有修改都在容器层进行。

2. 镜像核心技术

🔁 Copy On Write(COW)
  • 写时复制机制:只有在数据被修改时才会复制一份,提升效率和节省资源。
🔗 Union File System(联合文件系统)
  • 支持将多个目录(层)合并为一个视图。
  • 常用驱动:
    • overlay2(推荐,性能好)
    • device mapper

镜像命名格式:
仓库名称/镜像名称:TAG标记

二、Dockerfile 定制镜像

1. 使用流程

  1. 准备工作
    1. 编写 Dockerfile
      1. (可选)
    1. 构建镜像docker build -t 镜像名:标签 .
      1. page icon
        • t my-app:v1:指定镜像名称和标签
          • my-app:镜像名称
          • v1:标签(版本)
        • .:构建上下文路径(当前目录)
        构建过程输出示例
        高级构建选项
    1. 运行容器测试docker run -tid --name=容器名 镜像名:标签
      1. 检查镜像详情
        运行容器
        page icon
        • t:分配伪终端(tty)
        • i:保持 STDIN 打开(交互模式)
        • d:后台运行(detach 模式)
        • -name=my-container:指定容器名称
        • p 5000:5000:端口映射(主机端口:容器端口)
        • my-app:v1:使用的镜像
        查看运行状态
        访问应用
        进入容器调试
        查看容器日志
        完整示例演示

    2. 常用指令详解

    🏗️ FROM
    • 指定基础镜像,必须是第一条指令。
    • 示例:
      ⚙️ RUN
      • 执行命令,每一条 RUN 都会创建一个新层。
      • 推荐使用 && 连接多个命令以减少层数:
        🚀 CMD
        • 设置容器启动时默认执行的命令。
        • 注意事项
          • 应使用前台启动命令(如 httpd -D FOREGROUND
          • 若在 docker run 中指定命令,会覆盖 CMD
          • 一个 Dockerfile 中只能有一个 CMD
        • 示例:
          🎯 ENTRYPOINT
          • CMD 类似,但不会被 docker run 中的命令覆盖。
          • 示例:
            📂 COPY
            • 复制本地文件到镜像中。
            • 示例:
              📦 ADD
              • 功能类似 COPY,但支持:
                • URL 下载
                • 自动解压压缩包(如 .tar.gz
              • 示例:
                🔓 EXPOSE
                • 声明容器运行时监听的端口。
                • 示例:
                  💾 VOLUME
                  • 定义匿名卷,用于数据持久化。
                  • 示例:
                    🌐 ENV
                    • 设置环境变量。
                    • 示例:
                      📁 WORKDIR
                      • 设置工作目录,相当于 cd
                      • 示例:
                        👤 USER
                        • 指定运行容器的用户。
                        • 示例:

                          三、Dockerfile 应用示例

                          1. 定制 Nginx 镜像

                          2. 定制 Spring Boot 镜像


                          四、Jenkins 自动发布业务容器

                          1. 准备 Jenkins 环境

                          2. 安装插件

                          • Gitee
                          • Maven Integration
                          • Publish Over SSH

                          3. 配置工具

                          • Git:路径 /usr/bin/git
                          • Maven:自动安装 3.5 版本
                          • JDK:指定 JAVA_HOME 路径

                          4. 配置业务服务器 SSH 连接

                          5. 创建 Jenkins 任务

                          • 类型:自由风格或 Maven 项目
                          • 源码管理:Git + Gitee 仓库地址
                          • 构建触发器:Gitee Webhook 或定时构建
                          • 构建脚本:包含 Docker 镜像构建与运行命令

                          6. 发布脚本示例(Execute Shell 或 SSH 发送)


                          ✅ 注意事项与纠错提示

                          • CMDENTRYPOINT 区别:ENTRYPOINT 不会被 docker run 覆盖,适合固定入口。
                          • ADDCOPY:优先使用 COPY,除非需要自动解压或下载。
                          • 镜像层数优化:合并 RUN 命令,使用 .dockerignore 减少构建上下文。
                          • 容器端口暴露:EXPOSE 只是声明,实际映射需在 docker run 中使用 p

                          Loading...