Linux · 2 分钟阅读
03. 使用 Docker 镜像
拉取
# 完整语法
docker pull [options] [registry[:port]/]repo[:tag]
# 拉官方镜像
docker pull nginx:1.27
# 拉私有仓库
docker pull registry.example.com/team/app:1.0
不写 tag 默认 latest。生产环境永远写明版本。
启动容器
# 临时进 shell
docker run -it --rm ubuntu:24.04 bash
# 后台运行
docker run -d --name web -p 8080:80 nginx:1.27
| 参数 | 含义 |
|---|---|
-i |
保持 stdin |
-t |
分配 tty |
--rm |
退出后自动删容器 |
-d |
后台运行 |
--name |
容器名 |
-p |
端口映射 |
镜像管理
列表与过滤
docker image ls
docker image ls -a # 包含中间层
docker image ls -f since=nginx:1.27
docker image ls -f dangling=true # 虚悬镜像
docker image ls -f label=stage=build
体积
docker image ls 显示的是本地展开大小(各层之和),而 Docker Hub 上看到的是压缩体积。镜像之间的层可以复用,所以多镜像实际占盘远小于 du 加总。
docker system df # 总体占用
docker system df -v # 详细
清理
docker image prune # 清 dangling
docker image prune -a # 清未用
docker image rm <id>
格式化输出
# 简洁 ID + 仓库
docker image ls --format "{{.ID}}: {{.Repository}}:{{.Tag}}"
# 表格自定列
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"
删除镜像
# 三种指定方式
docker image rm 502ad9a3d65a # 短 ID
docker image rm nginx:1.27 # 仓库 + 标签
docker image rm nginx@sha256:b4f0e0b... # 摘要
当镜像被容器引用时,
rm失败。要么先docker rm容器,要么加-f。
删除行为
Untagged 只是移除标签;Deleted 才真正删除镜像层。只要还有任意标签或被某层引用,层就不会真删。
# 批量删某仓库
docker image rm $(docker image ls -q redis)
# 删所有 mongo:3.2 之前的
docker image rm $(docker image ls -q -f before=mongo:3.2)
一些经验
- 镜像 tag
latest不一定最新,是"默认 tag"——别迷信 - 镜像体积能小则小:多阶段构建、
--no-install-recommends、清理包缓存 - CI/CD 里的镜像
digest比tag更稳