Docker镜像操作详解

发表于
更新于
4 1.8~2.3 分钟 804

Docker镜像管理详解

Docker 镜像是容器的只读模板,包含应用及其运行环境。本文涵盖常用镜像操作命令、示例和最佳实践。

一、获取镜像

1. docker pull – 拉取镜像

docker pull [选项] 镜像名[:标签]
  • 默认标签为 latest
  • 示例:
    docker pull ubuntu:20.04
    docker pull nginx:1.25

2. docker push – 推送镜像

docker push 用户名/镜像名:标签
  • 需先登录仓库(docker login)并为镜像打上正确标签
  • 示例:docker push myrepo/hello:v1

二、管理本地镜像

3. docker images (或 docker image ls) – 列出镜像

docker images [选项]
  • -a:显示中间层镜像
  • -q:仅显示镜像 ID
  • --digests:显示摘要

4. docker rmi – 删除镜像

docker rmi [选项] 镜像名[:标签|镜像ID]
  • -f:强制删除(有容器依赖时)
  • 清理悬挂镜像:docker image prune

5. docker tag – 打标签

docker tag 源镜像[:标签] 目标镜像[:标签]
  • 为镜像添加新名称/仓库路径,不复制内容
  • 示例:docker tag nginx:latest myregistry.com/mynginx:v1

三、构建镜像

6. docker build – 通过 Dockerfile 构建

docker build [选项] 路径
  • -t 镜像名:标签:指定名称
  • -f Dockerfile:指定文件(默认当前目录下 Dockerfile)
  • --no-cache:忽略缓存
  • 示例:docker build -t myapp:v1 .

7. docker commit – 从容器创建镜像(临时调试,不推荐生产)

docker commit 容器名 新镜像名:标签

四、镜像导入/导出与文件系统转换

8. docker save – 保存镜像为 tar 文件(保留层历史)

docker save -o 文件名.tar 镜像名:标签

示例:docker save -o ubuntu.tar ubuntu:20.04

9. docker load – 从 tar 文件加载镜像

docker load -i 文件名.tar

10. docker export / docker import – 容器快照转为镜像

  • docker export 容器名 > container.tar:导出容器文件系统(丢失历史层)
  • docker import container.tar 新镜像名:标签:导入为镜像(单层)

    save/load 保留完整分层结构,export/import 生成扁平镜像,体积更小但无法追溯构建历史。

五、查看镜像详情

11. docker inspect – 显示镜像元数据(JSON)

docker inspect 镜像名:标签

包含架构、环境变量、开放端口、入口点等。

12. docker history – 查看镜像构建历史层

docker history 镜像名:标签

每层的创建命令与大小,有助于优化镜像。

六、清理与空间回收

13. docker image prune – 删除未使用的镜像

  • -a:删除所有不被容器引用的镜像
  • -f:跳过确认
    示例:docker image prune -a

14. docker system df – 查看磁盘占用(镜像、容器、卷)

典型工作流示例

# 拉取基础镜像
docker pull node:18-alpine

# 构建自定义镜像
docker build -t mynodeapp:1.0 .

# 标记以便推送到仓库
docker tag mynodeapp:1.0 mydockerhub/mynodeapp:1.0

# 登录并推送
docker login
docker push mydockerhub/mynodeapp:1.0

# 另一台机器拉取并运行
docker pull mydockerhub/mynodeapp:1.0

# 导出离线包
docker save -o app.tar mynodeapp:1.0
# 加载离线包
docker load -i app.tar

安全与最佳实践

  • 避免使用 latest 标签,指定具体版本号
  • 删除镜像前确认没有依赖容器(包括停止的容器),必要时加 -f
  • 生产环境推荐使用 Dockerfile + docker build,而非 docker commit
  • 定期运行 docker image prune 清理无用镜像

0
上一篇 Docker数据持久化详解
下一篇 Docker容器生命周期管理详解