以下是一个完整的 制作纯净 Docker 镜像的流程讲解,适合你将现有容器简化、清理、封装为干净、自动启动的镜像,并可跨平台分发使用。
🧱 制作纯净 Docker 镜像的完整流程
✅ 背景说明
有时你通过反复操作在容器中完成了系统或软件的完整部署(如 LNMP、面板等),但这个容器已含有历史操作、缓存、临时文件、不必要的日志,不适合直接发布或备份。
因此需要将其“脱壳”、清理为一个干净的 Docker 镜像,并注入自动启动逻辑,方便今后复用。
📦 第 1 步:导出现有容器(剥离运行历史)
docker export jisongbin-arm-lnmp > jisongbin-arm-panel.tar
此时你得到的是一个“纯系统”状态的压缩包。
🔁 第 2 步:导入镜像(生成镜像快照)
docker import jisongbin-arm-panel.tar jisongbin-arm-panel
⚙️ 第 3 步:注入启动命令(添加默认入口)
目的:告诉 Docker 容器应该启动哪个程序,否则运行时无操作会直接退出。
1. 创建目录并进入:
mkdir docker-clean-build && cd docker-clean-build
2. 创建 Dockerfile:
# Dockerfile
FROM jisongbin-arm-panel:latest
CMD ["/bin/bash", "/bt.sh"]
3. 构建新镜像:
docker build -t jisongbin-arm-panel .
💾 第 4 步:保存镜像为可迁移版本
docker save jisongbin-arm-panel > jisongbin-arm-panel.tar
🔄 第 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 启动脚本或进一步自动部署到主机,欢迎继续发我。