从零构建和管理Docker镜像只需三步:写好Dockerfile(注意FROM首行、COPY优于ADD、显式WORKDIR、CMD推荐)、用docker build打包并验证(检查日志与IMAGE ID,运行测试)、通过docker images/docker rmi等命令清理悬空镜像、未用镜像及旧版本。

从零构建和管理 Docker 镜像,核心就三件事:写好 Dockerfile、用 docker build 打包、再用 docker images 和 docker rmi 等命令管好本地镜像。不需要复杂工具,也不必依赖远程仓库,本地就能完成全流程。
写一个能跑起来的 Dockerfile
Dockerfile 是构建镜像的唯一蓝图,每行指令都影响最终结果。新手最容易出错的是路径、顺序和权限。
-
FROM 必须是第一行,选轻量且可信的基础镜像,比如
python:3.11-slim或alpine:latest;避免直接用latest标签,推荐明确版本如python:3.11.9-slim -
COPY 比 ADD 更安全,只复制本地文件;
COPY requirements.txt .再RUN pip install,比把整个代码目录一起复制后再装依赖更利于缓存复用 -
WORKDIR 要显式设置,否则后续 COPY、RUN 都可能因路径错误失败;比如
WORKDIR /app后,所有操作都在这个目录下进行 -
CMD 或 ENTRYPOINT 只能有一个生效,日常应用推荐用
CMD ["python", "app.py"],方便运行时覆盖;如果要做可执行封装,再考虑ENTRYPOINT
构建镜像并验证是否成功
构建不是“点一下就行”,关键要看输出日志有没有报错、最后有没有生成 IMAGE ID。
- 在 Dockerfile 所在目录执行:
docker build -t my-web-app:v1 .(注意末尾的英文句点) - 加
--no-cache参数可跳过缓存,适合调试依赖更新问题;加--progress=plain能看到详细构建步骤 - 构建完成后,用
docker images | grep my-web-app查看是否出现新镜像,确认 TAG 和 IMAGE ID - 立即验证:
docker run --rm -p 8000:8000 my-web-app:v1,然后 curl localhost:8000 或打开浏览器,看服务是否响应
日常镜像管理要盯住三类对象
本地镜像会越积越多,不清理容易占满磁盘。重点管好“没名字的”、“没容器用的”和“旧版本的”。
-
悬空镜像(dangling):没有标签、也没有容器引用的中间层,用
docker images -f "dangling=true" -q查 ID,再docker rmi $(docker images -f "dangling=true" -q)清理 -
未使用的镜像:确认没有容器在运行后,用
docker system prune -a(加-f可跳过确认),它会删掉所有未被引用的镜像、构建缓存和网络 -
多版本镜像:同一应用不同 tag(如
v1.0、v1.1、dev)共存时,定期用docker images my-web-app列出,手动docker rmi my-web-app:old-tag删除过期版本
进阶但实用的小技巧
不是必须,但能明显提升效率和安全性。
-
多阶段构建减体积:编译型语言(Go、Rust)或带前端构建的项目,用两个
FROM,前段装构建工具,后段只 COPY 编译产物,最终镜像可缩小 70% 以上 -
.dockerignore 防误传:跟 Dockerfile 同目录建这个文件,写入
node_modules/、__pycache__/、.git等,避免把开发垃圾打包进去 -
用 ARG 控制构建变量:比如
ARG BUILD_ENV=prod+RUN npm ci --production=$BUILD_ENV,一条命令适配不同环境


















