Docker 镜像核心知识:概念、作用与常用命令全解

文章目录

    • [一、Docker Image(镜像)](#一、Docker Image(镜像))
    • 二、镜像的作用
    • 三、镜像命令详解
      • [3.1 镜像命令清单](#3.1 镜像命令清单)
      • [3.2 具体命令说明](#3.2 具体命令说明)
        • [3.2.1. docker images](#3.2.1. docker images)
        • [3.2.2. docker tag](#3.2.2. docker tag)
        • [3.2.3. docker rmi](#3.2.3. docker rmi)
        • [3.2.4. docker save](#3.2.4. docker save)
        • [3.2.5. docker load](#3.2.5. docker load)
        • [3.2.6. docker image inspect](#3.2.6. docker image inspect)
        • [3.2.7. docker history](#3.2.7. docker history)
        • [3.2.8. docker import](#3.2.8. docker import)
        • [3.2.9. docker image prune](#3.2.9. docker image prune)
        • [3.2.10. docker build](#3.2.10. docker build)

一、Docker Image(镜像)

Docker image 本质上是一个 read-only 只读文件,包含文件系统、源码、库文件、依赖、工具等运行 application 所必须的文件。

可以把 Docker image 理解成一个模板,通过这个模板能实例化出多个容器。

  • image 内部是一层层文件系统 Union FS(联合文件系统),可将几层目录挂载成一个虚拟文件系统。每一层文件系统称为一层 layer,联合文件系统可为每一层设置只读(readonly)、读写(readwrite)和写出(whiteout-able)三种权限,但 docker 镜像中每一层文件系统均为只读。

  • 构建镜像时,从最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统,一层层往上叠加。上层的修改会覆盖底层该位置的可见性,使用时只会看到一个完全的整体,不会知道里面有几层,也不清楚每一层所做的修改是什么。

镜像生活案例:

镜像相当于 Java 或者 C++ 中的类,是一个模板,能方便地构建出不同的对象。


二、镜像的作用

  1. 解决环境一致性问题:手工或脚本部署应用时,易出现云端与本地环境不一致的情况。Docker 镜像可制作成与本地和测试环境一致的完整操作系统文件及目录结构,如同压缩包,能解决 PaaS 时代云端和本地环境一致性问题。
  2. 简化打包流程:用户为每个应用打包时,需进行复杂的配置和修改操作,十分繁琐。Docker 镜像简化了这一过程,实现"一次封装,到处运行"。
  3. 高效利用存储:Docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。
  4. 便捷共享与部署:Docker 镜像提供了打包应用程序和预配置服务器环境的便捷方式,方便个人使用或与其他 Docker 用户公开共享,部署过程简单高效。

三、镜像命令详解

3.1 镜像命令清单

命令 别名 功能 备注
docker images docker image ls/docker image list 列出本地镜像 必须掌握
docker tag docker image tag 给镜像打标签,可用于推送镜像仓库 必须掌握
docker pull docker image pull 从镜像仓库拉取镜像 和镜像仓库命令相同,也可归类为镜像操作命令,必须掌握,参考镜像仓库命令此处不赘述
docker push docker image push 推送镜像到仓库 和镜像仓库命令相同,也可归类为镜像操作命令,必须掌握,参考镜像仓库命令此处不赘述
docker rmi docker image rm/ docker image remove 删除本地镜像 必须掌握
docker build docker image build 通过 dockerfile 制作镜像 必须掌握
docker save docker image save 将指定镜像保存成 tar 归档文件 必须掌握
docker load docker image load 导入使用 docker save 命令导出的镜像 必须掌握
docker image inspect - 查看镜像详细信息 必须掌握
docker history docker image history 查看镜像历史 -
docker import docker image import 从归档文件中创建镜像 -
docker image prune - 删除不使用的镜像 -

3.2 具体命令说明

3.2.1. docker images
  • 功能:列出本地镜像。
  • 语法
bash 复制代码
docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 别名
bash 复制代码
docker image ls、docker image list
  • 关键参数
    • -a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
    • --digests:显示镜像的摘要信息;
    • -f:显示满足条件的镜像;
    • --format:指定返回值的模板文件;
    • --no-trunc:显示完整的镜像信息;
    • -q:只显示镜像 ID。
  • 样例
bash 复制代码
# 列出本地全部镜像
docker images
# 列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表
docker images ubuntu
3.2.2. docker tag
  • 功能:标记本地镜像,将其归入某一仓库。
  • 语法
bash 复制代码
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 样例
bash 复制代码
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
3.2.3. docker rmi
  • 功能:删除镜像。
  • 语法
bash 复制代码
docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 别名
bash 复制代码
docker image rm、docker image remove
  • 关键参数
    • -f:强制删除;
    • --no-prune:不移除该镜像的过程镜像,默认移除。
  • 样例
bash 复制代码
docker rmi maxhou/mybusybox:v0.1
3.2.4. docker save
  • 功能:将指定镜像保存成 tar 归档文件。
  • 语法
bash 复制代码
docker save [OPTIONS] IMAGE [IMAGE...]
  • 别名
bash 复制代码
docker image save
  • 关键参数
    • -o:输出到的文件。
  • 样例
bash 复制代码
docker save -o mynginx_1.22.1.tar nginx:1.22.1
3.2.5. docker load
  • 功能:导入使用 docker save 命令导出的镜像。
  • 语法
bash 复制代码
docker load [OPTIONS]
  • 别名
bash 复制代码
docker image load
  • 关键参数
    • --input, -i:指定导入的文件,代替 STDIN;
    • --quiet, -q:精简输出信息。
  • 样例
bash 复制代码
docker load -i mynginx_1.22.1.tar
3.2.6. docker image inspect
  • 功能:查看镜像详细信息。
  • 语法
bash 复制代码
docker image inspect [OPTIONS] IMAGE [IMAGE...]
  • 注意事项:docker inspect 会自动检查是镜像还是容器然后显示详细信息。
  • 样例
bash 复制代码
docker image inspect nginx:1.23.3
3.2.7. docker history
  • 功能:显示镜像历史。
  • 语法
bash 复制代码
docker history [OPTIONS] IMAGE
  • 别名
bash 复制代码
docker image history
  • 关键参数
    • -H, --human:大小和日期采用人容易读的格式展现;
    • --no-trunc:显示全部信息,不要隔断;
    • -q, --quiet:只显示镜像 id 信息。
  • 样例
bash 复制代码
docker history nginx:1.21.1
3.2.8. docker import
  • 功能:从归档文件中创建镜像。
  • 语法
bash 复制代码
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
  • 别名
bash 复制代码
docker image import
  • 关键参数
    • -c:应用 docker 指令创建镜像;
    • -m:提交时的说明文字。
  • 样例
bash 复制代码
docker import my_ubuntu_v3.tar maxhou/ubuntu:v4
3.2.9. docker image prune
  • 功能:删除不使用的镜像。
  • 语法
bash 复制代码
docker image prune [OPTIONS]
  • 关键参数
    • -a, --all:删除全部不使用的镜像;
    • --filter filter:指定过滤条件;
    • -f, --force:不提示是否删除。
  • 样例
bash 复制代码
docker image prune
3.2.10. docker build
  • 功能:使用 Dockerfile 创建镜像。
  • 语法
bash 复制代码
docker build [OPTIONS] PATH | URL | -
  • 关键参数
    • --build-arg=[]:设置镜像创建时的变量;
    • -f:指定要使用的 Dockerfile 路径;
    • --label=[]:设置镜像使用的元数据;
    • --no-cache:创建镜像的过程不使用缓存;
    • --pull:尝试去更新镜像的新版本;
    • --quiet, -q:安静模式,成功后只输出镜像 ID;
    • --tag, -t:镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签;
    • --network:默认 default,在构建期间设置 RUN 指令的网络模式。
  • 样例
bash 复制代码
docker build -t mynginx:v1 .
相关推荐
人鱼传说15 小时前
docker desktop是一个好东西
运维·docker·容器
忆~遂愿16 小时前
CANN metadef 核心解析:计算图原型定义、算子元数据抽象与异构系统互操作机制
docker·容器
说实话起个名字真难啊17 小时前
用docker来安装openclaw
docker·ai·容器
恬静的小魔龙18 小时前
【群晖Nas】群晖Nas中实现SVN Server功能、Docker/ContainerManager等
docker·svn·容器
Zfox_18 小时前
CANN Catlass 算子模板库深度解析:高性能 GEMM 融合计算、Cube Unit Tiling 机制与编程范式实践
docker·云原生·容器·eureka
春日见19 小时前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
DARLING Zero two♡19 小时前
告别 Docker 命令行!Portainer+cpolar 让容器管理从局域网走向公网
运维·docker·容器
liu****20 小时前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
logocode_li21 小时前
OCI/CRI 双标准下:从 dockerd 到 containerd 的 K8s 运行时迭代史
docker·云原生·容器·k8s
_运维那些事儿1 天前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算