制作纯净 Docker 镜像的完整流程|宝塔环境案例
标签: docker
- This topic has 0 个回复, 1 个参与人, and was last updated 1 天, 12 小时 前 by
追光.
- 作者帖子
- 2025年7月10日 - 上午9:56 #269
追光管理员以下是一个完整的 制作纯净 Docker 镜像的流程讲解,适合你将现有容器简化、清理、封装为干净、自动启动的镜像,并可跨平台分发使用。
🧱 制作纯净 Docker 镜像的完整流程
✅ 背景说明
有时你通过反复操作在容器中完成了系统或软件的完整部署(如 LNMP、面板等),但这个容器已含有历史操作、缓存、临时文件、不必要的日志,不适合直接发布或备份。
因此需要将其“脱壳”、清理为一个干净的 Docker 镜像,并注入自动启动逻辑,方便今后复用。
📦 第 1 步:导出现有容器(剥离运行历史)
docker export jisongbin-arm-lnmp > jisongbin-arm-panel.tar
docker export 会将容器内的整个文件系统导出为 tar 包。
注意:这个操作 不会包含容器的元数据(如环境变量、启动命令、端口映射等),也不会包含卷挂载等内容。
此时你得到的是一个“纯系统”状态的压缩包。
🔁 第 2 步:导入镜像(生成镜像快照)
docker import jisongbin-arm-panel.tar jisongbin-arm-panel
docker import 将刚才的系统 tar 包导入为 Docker 镜像。
此时你得到了一个干净的镜像,但是没有设置启动命令,直接运行会立即退出。
⚙️ 第 3 步:注入启动命令(添加默认入口)
目的:告诉 Docker 容器应该启动哪个程序,否则运行时无操作会直接退出。
1. 创建目录并进入:
mkdir docker-clean-build && cd docker-clean-build
2. 创建 Dockerfile:
# Dockerfile FROM jisongbin-arm-panel:latest CMD ["/bin/bash", "/bt.sh"]
FROM:指定你刚才导入的干净镜像。
CMD:定义容器启动时执行的默认命令,这里我们假设你有个 /bt.sh 启动脚本。
3. 构建新镜像:
docker build -t jisongbin-arm-panel .
这会生成一个新的镜像版本,其中已经内置了启动命令。
💾 第 4 步:保存镜像为可迁移版本
docker save jisongbin-arm-panel > jisongbin-arm-panel.tar
docker save 与 export 不同,它会包含镜像的全部元信息和层结构。
最终这个镜像文件可以直接跨设备、跨系统使用并带有自动启动行为。
🔄 第 5 步:加载镜像并运行
docker load -i jisongbin-arm-panel.tar
docker load 将完整镜像载入本地环境。
随后你可以像正常镜像一样使用:
docker run -it --name mypanel jisongbin-arm-panel
🧭 小结
阶段
命令
说明
1
docker export
清理运行历史,导出为干净文件系统
2
docker import
生成基础镜像(无启动命令)
3
docker build
注入启动命令(例如启动 nginx/php 面板)
4
docker save
生成可分发、可重用镜像
5
docker load
载入镜像并运行
🔒 安全建议
在 /bt.sh 中添加你服务的启动顺序(如 php-fpm, nginx, supervisord 等)。
注意设置合理的容器权限与卷挂载,不要将敏感文件写死在镜像中。
如需我帮你优化 bt.sh 启动脚本或进一步自动部署到主机,欢迎继续发我。
- 作者帖子
- 在下方一键注册,登录后就可以回复啦。