跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / BashAI

Docker 制作镜像的两种方式

Docker 镜像制作主要有两种方法:基于容器提交和基于 Dockerfile 构建。docker commit 命令适用于快速测试或临时调试,直接从运行中的容器封装镜像,但无法追溯变更过程且不利于团队协作。Dockerfile 方式是推荐做法,通过编写构建指令文件,支持版本控制、可重复构建,更适合生产环境和 CI/CD 流程。对比了两种方式的步骤与优缺点,并提供了 Nginx 示例及 Dockerfile 优化建议。

人间过客发布于 2026/3/15更新于 2026/9/872 浏览
Docker 制作镜像的两种方式

Docker 简介

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖(如代码、运行时、系统工具、库、配置文件等)打包到一个轻量级、可移植的容器中,并在任何支持 Docker 的环境中一致地运行。

📌 核心思想:一次构建,到处运行(Build Once, Run Anywhere)

虚拟机(VM)vs 容器

特性容器虚拟机
隔离级别进程级隔离硬件级隔离(Hypervisor)
启动速度毫秒级(快)秒级~分钟级(慢)
资源占用低(共享宿主机内核)高(每个 VM 有完整 OS)
镜像大小几十 MB ~ 几百 MB几 GB 起
可移植性极高较低
典型代表Docker, containerdVMware, VirtualBox, Hyper-V

简单说:容器 = 轻量级、秒启、高效的应用沙箱

镜像制作的两种方式

  1. 使用 docker commit 命令基于容器创建镜像(适合快速测试,不推荐用于生产)
  2. 使用 Dockerfile 编写构建指令,通过 docker build 创建镜像(推荐方式,可复用、可版本控制)

方式一:使用 docker commit(从运行中的容器创建镜像)

⚠️ 注意:这种方式适合临时调试,但不符合'基础设施即代码'原则,不建议用于正式项目。虽然有诸多限制,但可用于紧急修复。

步骤 1:拉取基础镜像并启动容器

拉取一个 Ubuntu 镜像:

docker pull ubuntu:22.04

这里拉的是基础镜像,就是一个能跑 Ubuntu 的极简环境,也是因为极简环境所以有些驱动没有,跑一些复杂的软件可能会出现驱动丢失等错误。

启动一个交互式容器(-it 表示交互终端):

docker run -it --name my_container ubuntu:22.04 /bin/bash

目的:配置模型运行环境。

步骤 2:在容器内做修改(比如安装软件)

在容器内安装模型运行所需各种库。以 Nginx 举例:

更新包列表:

apt update

安装 Nginx(举例):

apt install -y nginx

验证是否安装成功:

nginx -v

如果是模型等原理是相同的,但是你需要做的是下载各种依赖库,然后通过 docker cp 的指令把需要的模型复制过去。然后使用指令让模型跑起来,并能看到自己想要的结果即可。

步骤 3:在主机上封装整个容器为新镜像

退出容器,退出容器指令 exit。

查看已停止的容器:

docker ps -a

将容器提交为新镜像:

docker commit my_container my_nginx_image:v1

my_container 是容器名,my_nginx_image:v1 是镜像名加版本号。

步骤 4:验证新镜像

以 Nginx 的镜像举例:

查看本地镜像:

docker images

启动新镜像测试:

docker run -it my_nginx_image:v1 /bin/bash

进入后可执行 nginx -v 验证是否保留了安装。

如果是模型或其他:

docker run -it --rm my_nginx_image:v1 /bin/bash

可以是这个指令用完就停止容器。

从上面可见这种方式无法追溯变更过程,也不便于团队协作。

方式二:使用 Dockerfile(推荐方式)

你选取一台与上线环境架构相同的线下机子,最好还能通网(方便下载各种需要的环境)。

步骤 1:下载需要的各种依赖

如果是通网的,直接用包管理器下就好了,apt install 或 yum install 有啥用啥,能下好就好,自己大多数情况下不用改全局了,都帮你自动配置。

步骤 2:跑起你需要跑的

确保该环境下你的东西能跑起来,拿我用包管理器下载的 Nginx 举例就是:

nginx start

只要能跑起来并能查到他的线程,你就事半功倍了。

步骤 3:写填写 Dockerfile

创建个文件夹在文件夹下:

nano Dockerfile

以包管理器的 Nginx 举例,它的 Dockerfile 如下:

# 使用官方 Ubuntu 22.04 作为基础镜像
FROM ubuntu:22.04

# 设置环境变量,避免 apt 弹出交互提示
ENV DEBIAN_FRONTEND=noninteractive

# 更新系统并安装 nginx
RUN apt update && \
    apt install -y nginx && \
    rm -rf /var/lib/apt/lists/*

# 暴露 80 端口(文档说明用途,实际运行需配合 -p)
EXPOSE 80

# 启动 nginx(前台运行,否则容器会退出)
CMD ["nginx", "-g", "daemon off;"]

步骤 4:构建镜像

在 Dockerfile 所在目录执行:

docker build -t my_nginx_image_from_dockerfile:v1 .

该指定为打包镜像 my_nginx_image_from_dockerfile:v1,这个是镜像名称加版本号。注意后面还有一点哦别漏下:

  • -t:指定镜像名和标签
  • .:表示当前目录为构建上下文(context)

步骤 5:运行镜像

以 Nginx 举例:

# 后台运行,并映射 8080 主机端口到容器 80 端口
docker run -d -p 8080:80 --name my_web my_nginx_image_from_dockerfile:v1

然后在宿主机浏览器访问:http://localhost:8080,应该能看到 Welcome to Nginx! 页面。

到此 Dockerfile 优势一目了然,可版本控制、可重复构建、清晰透明、适合 CI/CD。

步骤 6:优化建议

  • 优化 Dockerfile(多阶段构建、减小体积等)
  • 使用 .dockerignore 忽略无关文件
  • 合并 RUN 命令减少层数
  • 使用更小的基础镜像(如 alpine)
  • 多阶段构建(适用于编译型语言如 Go、Java)

目录

  1. Docker 简介
  2. 镜像制作的两种方式
  3. 方式一:使用 docker commit(从运行中的容器创建镜像)
  4. 步骤 1:拉取基础镜像并启动容器
  5. 步骤 2:在容器内做修改(比如安装软件)
  6. 步骤 3:在主机上封装整个容器为新镜像
  7. 步骤 4:验证新镜像
  8. 方式二:使用 Dockerfile(推荐方式)
  9. 步骤 1:下载需要的各种依赖
  10. 步骤 2:跑起你需要跑的
  11. 步骤 3:写填写 Dockerfile
  12. 使用官方 Ubuntu 22.04 作为基础镜像
  13. 设置环境变量,避免 apt 弹出交互提示
  14. 更新系统并安装 nginx
  15. 暴露 80 端口(文档说明用途,实际运行需配合 -p)
  16. 启动 nginx(前台运行,否则容器会退出)
  17. 步骤 4:构建镜像
  18. 步骤 5:运行镜像
  19. 后台运行,并映射 8080 主机端口到容器 80 端口
  20. 步骤 6:优化建议

更多推荐文章

查看全部
  • Docker 与 Ollama 本地部署 DeepSeek 大模型实战
  • 计算机专业女生的职业发展现状与经验探讨
  • C++ 继承进阶:友元、静态成员与菱形继承
  • Visual C++ 运行库安装与 DLL 缺失问题修复指南
  • 技术副业变现路径:Python 爬虫开发实战指南
  • 无人机低空智能巡飞巡检平台架构与核心能力解析
  • C++ STL 关联容器实战:set、map 与 multiset 详解
  • Vue 基础入门:核心设计思想深度拆解
  • Android 集成 WebRTC 与 VAD 的 AI 辅助开发实战:从选型到性能优化
  • AI 数据标注平台的选型与实践:效率提升背后的技术逻辑
  • AI 辅助 Python 毕业设计:选题评估与原型构建
  • AIGC视频生成成本优化:20秒与30秒模型选型与价格对比
  • 2025 年 11 月 TIOBE 排行榜:C# 能否首次超越 Java?
  • Linux 下 C++ 线程池实现与并发安全详解
  • 现代 C++ 新特性 constexpr:从 C++11 到 C++20 的演进
  • Rust 异步测试与调试实战指南
  • Pi0 机器人 VLA 大模型在昇腾 A2 平台上的测评
  • Agent Skills Marketplace 完全指南:AI 编程助手技能开发与应用
  • 如何在 GitHub Copilot 中使用 MCP 服务
  • N46Whisper 智能日语语音转字幕工具

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online