Docker--Docker Image(镜像)

什么是Docker Image?

Docker镜像(Docker Image)是Docker容器技术的核心组件之一,它包含了运行应用程序所需的所有依赖、库、代码、运行时环境以及配置文件等。

简单来说,Docker镜像是一个轻量级、可执行的软件包,它封装了应用程序及其运行环境,使得应用程序可以在任何支持Docker的平台上以相同的方式运行。

关键特性:

  • 层次化结构:Docker镜像采用层次化结构,每个镜像都是基于一个或多个基础镜像(父镜像)构建的。通过添加新的层次(如文件、配置、依赖等),可以创建新的镜像。这种层次化结构使得镜像的共享和重用变得高效。
  • 只读性:Docker镜像在构建完成后是只读的。当运行一个容器时,Docker会在镜像的基础上创建一个可写的层(称为容器层),用于存储运行时的数据更改。这种设计保证了镜像的不可变性,使得镜像的分发和部署更加可靠和安全。
  • 构建与分发:Docker镜像可以通过Dockerfile文件来定义和构建。Dockerfile包含了一系列指令,用于指定镜像的构建步骤和依赖关系。构建完成后,镜像可以被推送到Docker镜像仓库(如Docker Hub)进行分发和共享。
  • 运行容器:Docker容器是Docker镜像的运行实例。通过运行Docker镜像,可以创建一个或多个容器,这些容器在隔离的环境中运行应用程序。容器之间以及容器与宿主机之间通过特定的机制进行通信和资源管理。
  • 版本控制:Docker镜像支持版本控制,可以通过标签(Tag)来标识不同的版本。例如,一个镜像可以有多个标签,如latest、1.0、2.0等,用于表示不同的版本或发布阶段。

Docker Image 常用命令

docker rmi

删除一个或多个在当前服务器的镜像;如果镜像有多个tag,带上tag可以对具体tag的镜像进行删除;

使用 docker rmi [OPTIONS] IMAGE [IMAGE...]

别名 docker image remove docker image rm
参数:

Option Description
-f, --force 强制对镜像进行删除
--no-prune 不删除未标记的父项

例子:

cpp 复制代码
docker images


由于该镜像ID被打上了多个标签,所以没有办法通过ID直接删除;

只能通过镜像名称[taged]来进行删除:

如果镜像有对应容器在运行,那么无论通过镜像ID还是名称[taged]的方式都是无法删除的,必须先删除已经存在的容器(无论是否正在运行的还是退出的):

cpp 复制代码
docker ps
docker rmi nginx:1.23.4
docker rmi a7be6198544f
cpp 复制代码
docker ps -a | grep nginx:1.23.4

逐个删除已经删除的容器:

cpp 复制代码
docker rmi nginx:1.23.4

最终删除掉镜像

docker save

将一个或多个镜像保存到tar文档中(默认为STDOUT);

用法 docker save [OPTIONS] IMAGE [IMAGE...]

别名 docker image save
参数 :

Option Description
-o, --output 写到一个文件中,替代标准输出流STDOUT

例子:

将镜像保存到归档文件中:

准备将busybox:latest 镜像保存到该目录下;

cpp 复制代码
docker save -o busybox0.1.tar busybox:latest

保存之后大小与原本镜像大小基本一致;

docker load

从tar文档中加载一个镜像

用法: docker image load [OPTIONS]

别名 docker image load
参数

Option Description
-i, --input 读取tar文档
-q, --quiet 抑制负载输出

例子:

cpp 复制代码
docker load -i busybox0.1.tar

docker image inspect

对镜像陈列具体的信息

用法:docker image inspect [OPTIONS] IMAGE [IMAGE...]
参数:

Option Description
-f, --format 根据具体格式输出:'json': Print in JSON 格式 ;

docker image history

展示镜像的历史情况

用法: docker image history [OPTIONS] IMAGE

别名 docker history
参数:

Option Description
-H, --human 以人可读格式打印大小和日期
--no-trunc 不截断输出
-q, --quiet 只展示镜像ID
--format 根据具体格式输出

例子:

cpp 复制代码
docker history nginx:1.24.0

docker import

从tar文档导入内容以创建镜像

用法 docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

别名 docker image import
参数:

Option Description
-c, --change 将 Dockerfile 指令应用于创建的镜像
-m, --message 为导入的镜像设置提交消息
--platform 如果服务器支持多平台,则设置 platform

例子:

cpp 复制代码
docker import busybox0.1.tar ahri/busybox:0.4

docker image prune

删除不使用的镜像

用法:docker image prune [OPTIONS]
参数:

Option Description
-a, --all 删除所有未使用的图像,而不仅仅是悬空的图像
--filter 提供筛选条件值(例如until=< timestamp >)
-f, --force 不提示确认

例子:

cpp 复制代码
docker image prune
相关推荐
时迁24729 分钟前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s
诡异森林。4 小时前
Docker--Docker网络原理
网络·docker·容器
ALex_zry4 小时前
Docker Macvlan网络配置实战:解决“network already exists“错误
网络·docker·php
IT小辉同学4 小时前
Docker如何更换镜像源提高拉取速度
spring cloud·docker·eureka
matrixlzp5 小时前
K8S Service 原理、案例
云原生·容器·kubernetes
GnixAij6 小时前
Docker SSH端口转发
docker·ssh
angushine6 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
玄明Hanko7 小时前
生产环境到底能用Docker部署MySQL吗?
后端·mysql·docker
玄明Hanko7 小时前
Quarkus+Docker最全面完整教程:手把手搞定Java云原生
后端·docker·云原生
SimonLiu0098 小时前
清理HiNas(海纳斯) Docker日志并限制日志大小
java·docker·容器