04.Docker 镜像命令

Docker 镜像管理命令

  • [Docker 镜像管理命令](#Docker 镜像管理命令)
    • [1. 搜索镜像](#1. 搜索镜像)
    • 2.镜像加速配置和优化
    • [3. 下载镜像](#3. 下载镜像)
    • [4. 查看本地镜像](#4. 查看本地镜像)
    • [5. 镜像导出](#5. 镜像导出)
    • 4.镜像导入
    • [5. 删除镜像](#5. 删除镜像)
    • [6. 镜像打标签](#6. 镜像打标签)

Docker 镜像管理命令

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

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

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

1. 搜索镜像

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

2.镜像加速配置和优化

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

bash 复制代码
# 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. 下载镜像

bash 复制代码
# 从 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. 查看本地镜像

bash 复制代码
# 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 文件,然后复制到其他服务器进行导入使用。

bash 复制代码
[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 命令可以将镜像导出的打包或压缩文件再导入。

bash 复制代码
[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. 删除镜像

bash 复制代码
[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 可以给镜像打标签,类似于起别名,但通常要遵守一定的命名规范,才可以上传到指定的仓库。

bash 复制代码
[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
相关推荐
两点王爷1 小时前
docker 运行自定义化的服务-后端
运维·docker·容器
弧襪3 小时前
K8S-证书过期更新
云原生·容器·kubernetes
东风微鸣5 小时前
Grafana将弃用AngularJS-我们该如何迁移
docker·云原生·kubernetes·可观察性
亚林瓜子7 小时前
docker compose方式安装ClickHouse数据库
数据库·clickhouse·docker·mac·m1
开发小能手-roy7 小时前
在Ubuntu服务器上安装Docker(支持Ubuntu 20.04/22.04等版本):
linux·ubuntu·docker
细心的莽夫8 小时前
Docker学习笔记
运维·笔记·后端·学习·docker·容器
诗句藏于尽头9 小时前
BT面板docker搭建excalidraw遇到的问题
运维·docker·容器
弧襪9 小时前
解决 Docker Swarm 集群节点故障:从问题剖析到修复实战
docker·容器
laimaxgg13 小时前
Docker命令
linux·运维·服务器·ubuntu·docker
HEX9CF14 小时前
【Docker】快速部署 Certbot 并为 Nginx 服务器配置 SSL/TLS 证书
服务器·nginx·docker