04.Docker 镜像命令

发布于:2025-02-25 ⋅ 阅读:(14) ⋅ 点赞:(0)

Docker 镜像管理命令

镜像即创建容器的模版,含有启动容器所需要的文件系统及所需要的内容,因此镜像主要用于方便和快速的创建并启动容器。

镜像里面是一层层的文件系统,叫做 Union FS(联合文件系统),联合文件系统,可以将几层目录挂载到一起(就像千层饼,洋葱头,俄罗斯套娃一样),形成一个虚拟文件系统,虚拟文件系统的目录结构就 像普通 linux 的目录结构一样,镜像通过这些文件再加上宿主机的内核共同提供了一个 linux 的虚拟环 境,每一层文件系统叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读 (readonly)、读写(readwrite)和写出(whiteout-able),但是镜像中每一层文件系统都是只读的, 构建镜像的时候,从一个最基本的操作系统开始,每个构建提交的操作都相当于做一层的修改,增加了 一层文件系统,一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层 把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层,实际上也不需要知道里面有几层。

镜像直接调用宿主机的内核,镜像中只提供 rootfs,也就是只需要包括最基本的命令,配置文件和程序库等相关文件就可以了。

1. 搜索镜像

官方网站进行镜像的搜索:https://hub.docker.com/

2.镜像加速配置和优化

从国内下载官方的镜像站点有时候会很慢,因此可以更改 docker 配置文件添加一个加速器,可以通过加速器达到加速下载镜像的目的。

# docker 镜像加速配置
[root@Ubuntu2204 ~]#vim /etc/docker/daemon.json 

{
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.m.daocloud.io"
        ]
}

[root@Ubuntu2204 ~]#systemctl daemon-reload 

[root@Ubuntu2204 ~]#systemctl restart docker

3. 下载镜像

# 从 docker 仓库将镜像下载到本地,命令格式如下:
[root@Ubuntu2204 ~]#docker pull --help

用法: docker pull [选项] 名称[:标签|@摘要]
	 docker pull [OPTIONS] NAME[:TAG|@DIGEST]

选项:
  -a, --all-tags                下载存储库中的所有带标签的镜像
      --disable-content-trust   跳过镜像验证(默认为 true)
      --platform string         如果服务器支持多平台,设置平台
  -q, --quiet                   抑制详细输出

NAME: 是镜像名,一般的形式 仓库服务器:端口/项目名称/镜像名称
:TAG: 即版本号,如果不指定:TAG,则下载最新版镜像

# 拉取alpine镜像
[root@Ubuntu2204 ~]#docker pull alpine:latest

# 查看镜像分层历史
[root@Ubuntu2204 ~]#docker image history alpine:latest

# 查看镜像详细信息
[root@Ubuntu2204 ~]#docker inspect alpine:latest


# 镜像下载保存的路径:
/var/lib/docker/overlay2/镜像ID

4. 查看本地镜像

# docker images 可以查看下载至本地的镜像
[root@Ubuntu2204 ~]#docker images --help

用法: docker images [选项] [仓库[:标签]]
	 docker images [OPTIONS] [REPOSITORY[:TAG]]

列出镜像

选项:
  -a, --all             显示所有镜像(默认情况下隐藏中间镜像)
      --digests         显示摘要信息
  -f, --filter 过滤器    根据提供的条件过滤输出
      --format 字符串    使用 Go 模板格式化镜像输出
      --no-trunc        不截断输出
  -q, --quiet           仅显示镜像 ID

# 执行结果的显示信息说明: 
REPOSITORY      #镜像所属的仓库名称
TAG         	#镜像版本号(标识符),默认为latest
IMAGE ID       	#镜像唯一ID标识,如果ID相同,说明是同一个镜像有多个名称
CREATED       	#镜像在仓库中被创建时间
VIRTUAL SIZE    #镜像的大小


[root@Ubuntu2204 ~]#docker images

[root@Ubuntu2204 ~]#docker image ls

5. 镜像导出

利用 docker save 命令可以将从本地镜像导出为一个打包 tar 文件,然后复制到其他服务器进行导入使用。

[root@Ubuntu2204 ~]#docker save --help

用法: docker save [选项] 镜像 [镜像...]
	 docker save [OPTIONS] IMAGE [IMAGE...]

将一个或多个镜像保存到 tar 归档文件(默认情况下流式传输到 STDOUT)

选项:
  -o, --output 字符串   写入到文件,而不是标准输出(STDOUT)

#说明:
Docker save 使用IMAGE ID导出,在导入后的镜像没有REPOSITORY和TAG,显示为<none>

docker save -o /path/file.tar IMAGE1 IMAGE2 ...
docker save IMAGE1 IMAGE2 ... > /path/file.tar

[root@Ubuntu2204 ~]#docker save hello-world:latest alpine:latest -o images.tar

[root@Ubuntu2204 ~]#docker save hello-world:latest alpine:latest -o images2.tar

# 导出所有镜像到一个打包文件
# 使用image ID导出镜像,在导入后的镜像没有REPOSITORY和TAG,显示为<none>
[root@Ubuntu2204 ~]#docker save $(docker images -qa) -o all-images.tar

[root@Ubuntu2204 ~]#docker save $(docker images | awk 'NR>1 {print $1":"$2}') -o all-images2.tar

[root@Ubuntu2204 ~]#docker save $(docker image ls --format "{{.Repository}}:{{.Tag}}") -o all-images3.tar

[root@Ubuntu2204 ~]#scp images.tar images2.tar 10.0.0.110:

4.镜像导入

利用 docker load 命令可以将镜像导出的打包或压缩文件再导入。

[root@Ubuntu2204 ~]#docker load --help

用法: docker load [选项]
	 docker load [OPTIONS]tar 归档文件或标准输入(STDIN)加载镜像

选项:
  -i, --input 字符串   从 tar 归档文件读取,而不是标准输入(STDIN)
  -q, --quiet          抑制加载过程的输出

[root@Ubuntu2204 ~]#docker load < images.tar

[root@Ubuntu2204 ~]#docker load -i all-images2.tar

5. 删除镜像

[root@Ubuntu2204 ~]#docker rmi --help 

用法: docker rmi [选项] 镜像 [镜像...]
	 docker rmi [OPTIONS] IMAGE [IMAGE...]

删除一个或多个镜像

选项:
  -f, --force      强制删除镜像
      --no-prune   不删除未标记的父镜像
      
[root@Ubuntu2204 ~]#docker rmi 74cc54e27dc4

# 强制删除正在使用的镜像,也会删除对应的容器
[root@Ubuntu2204 ~]#docker rmi -f alpine:latest

# 删除所有镜像
[root@Ubuntu2204 ~]#docker rmi -f `docker images -qa`

6. 镜像打标签

docker tag 可以给镜像打标签,类似于起别名,但通常要遵守一定的命名规范,才可以上传到指定的仓库。

[root@Ubuntu2204 ~]#docker tag --help

用法: docker tag 源镜像[:标签] 目标镜像[:标签]
	 docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

创建一个指向源镜像的标签目标镜像


#TARGET_IMAGE[:TAG]格式一般形式
仓库主机FQDN或IP[:端口]/项目名(或用户名)/image名字:版本

[root@Ubuntu2204 ~]#docker tag hello-world:latest hello-world:0.0.1