目录
[一、Docker Registry(镜像仓库)](#一、Docker Registry(镜像仓库))
[1、docker login](#1、docker login)
[2、docker pull](#2、docker pull)
[3、docker push](#3、docker push)
[4、docker search](#4、docker search)
[5、docker logout](#5、docker logout)
[1、docker images](#1、docker images)
[2、docker images inspect](#2、docker images inspect)
[3、docker tag](#3、docker tag)
[4、docker rmi](#4、docker rmi)
[5、docker save](#5、docker save)
[6、docker load](#6、docker load)
[7、docker image inspect](#7、docker image inspect)
[8、docker history](#8、docker history)
[9、docker import](#9、docker import)
[10、docker image prune](#10、docker image prune)
[11、docker build](#11、docker build)
[1、服务器 1 上镜像保存为 tar 文件,如操作系统为 ubuntu](#1、服务器 1 上镜像保存为 tar 文件,如操作系统为 ubuntu)
[2、scp 或者使用可视化工具拷贝镜像到第二台服务器上](#2、scp 或者使用可视化工具拷贝镜像到第二台服务器上)
[4、 执行 docker run 检查镜像是否可以正常运行](#4、 执行 docker run 检查镜像是否可以正常运行)
一、Docker Registry(镜像仓库)
镜像仓库(DockerRegistry)负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。镜像仓库管理多个Repository,Repository通过命名来区分。每个Repository包含一
个或多个镜像,镜像通过镜像名称和标签(Tag)来区分。

图解:①镜像仓库(Registry):要从哪一个镜像仓库拉取镜像,通常通过DNS或IP地址来确定一个镜像仓库,如 hub.docker.com;
一个Registry中可以存在多个Repository。
Repository可分为"顶层仓库"和"用户仓库";
用户仓库名称格式为"用户名/仓库名"。
每个仓库可以包含多个Tag(标签),每个标签对应一个镜像
②Repository:由某特定的docker镜像的所有迭代版本组成的镜像仓库
③镜像名称(name)+标签(tag):如 nginx:latest
④认证能力:提供用户注册,登录、登出能力
⑤索引:提供镜像的索引信息,方便检索
⑥一个容器镜像包含了两个部分,一个是元数据,其实就是由dockerfile构建出来的描
述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的
checksum这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面,
就是在一个一个的blob里面,真正占有空间的就是这些blob。
二、镜像仓库工作机制
1、使用流程
通过docker login登陆仓库
docker pull拉去需要的镜像
通过dockerfile或者commit等方式制作镜像,再docker push上传到仓库
2、实际应用
Docker Registry中的镜像通常由开发人员制作,而后推送至"公共"或"私有"Registry上保存,供其他人员使用,例如"部署"到生产环境;启动容器时,dockerdaemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从Registry中下载该镜像并保存到本地;

三、镜像仓库命令
1、docker login
登录到一个docker镜像仓库地址,如果未指定镜像仓库地址,默认为官方仓库dockerhub。要想登录到腾讯云和阿里云镜像仓库要输入对应的地址。
使用场景,是在需要推送镜像时要先登录才能推送;在要从私有仓库下拉取下来。
语法样例:
bash
docker login -u 用户名 -p 密码
2、docker pull
(别名:docker image pull)
从镜像仓库中拉取或者更新指定的镜像。
语法样例:
bash
docker pull nginx:1.23.3
3、docker push
(别名:docker image push)
将本地的镜像上传到镜像仓库。要先登录到镜像仓库。还要给镜像打标签。
bash
docker push 用户名/仓库名/镜像名
4、docker search
从docker hub查找镜像
语法样例:
bash
#从 Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于 10 的镜像
docker search -f stars=10 nginx
5、docker logout
登出一个Docker镜像仓库
四、镜像命令
1、docker images
(别名:docker images ls,docker images list)
列出本地的镜像
关键参数:
-a:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
-digests:显示镜像的摘要信息;
-f:显示满足条件的镜像;
--format:指定返回值的模板文件;
-no-trunc:显示完整的镜像信息;
-q:只显示镜像ID。
语法样例:
bash
#列出本地全部镜像
docker images
#列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。
docker images ubuntu
2、docker images inspect
查看镜像详细信息
语法样例:
bash
#查看镜像详细信息
docker images inspect nginx:1.23.3
3、docker tag
(别名:docker image tag)
标记本地仓库,将其归入某一仓库,docker的目标之一就是把它推动到镜像仓库里面
语法样例:
bash
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
4、docker rmi
(别名:docker image rm, docker image remove)
删除镜像
关键参数:
-f :强制删除;
--no-prune :不移除该镜像的过程镜像,默认移除;
语法样例:
bash
docker rmi [OPTIONS] IMAGE [IMAGE...]
docker rmi maxhou/mybusybox:v0.1
5、docker save
别名(docker image save)
将指定镜像保存成 tar 归档文件。
关键参数:
-o 输出到文件
语法样例:
bash
docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o mynginx_1.22.1.tar nginx:1.22.1
6、docker load
(别名:docker image load)
导入使用 docker save 命令导出的镜像。
关键参数:
--input , -i : 指定导入的文件,代替 STDIN。
--quiet , -q : 精简输出信息。
语法样例:
bash
docker load -i mynginx_1.22.1.tar
7、docker image inspect
查看镜像详细信息,docker inspect 会自动检查是镜像还是容器然后显示详细信息
语法样例:
bash
docker image inspect [OPTIONS] IMAGE [IMAGE...]
docker images inspect nginx:1.23.3
8、docker history
(别名:docker iamges history)
显示历史镜像
关键参数:
-H , --human :大小和日期采用人容易读的格式展现
--no-trunc :显示全部信息,不要隔断;
-q, --quiet: 只显示镜像 id 信息;
语法样例:
bash
docker history [OPTIONS] IMAGE
docker history nginx:1.21.1
9、docker import
(别名:docker image import)
从归档文件中创建镜像
关键参数:
-c :应用 docker 指令创建镜像
-m :提交时的说明文字
语法样例:
bash
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
docker import my_ubuntu_v3.tar maxhou/ubuntu:v4
10、docker image prune
删除不使用的镜像
关键参数:
-a , --all : 删除全部不使用的镜像;
--filter filter:指定过滤条件;
-f, --force :不提示是否删除;
语法样例:
bash
docker image prune [OPTIONS]
docker image prune
11、docker build
docker build用于使用dockerfile创建文件
关键参数:
--build-arg=[] :设置镜像创建时的变量;
-f :指定要使用的 Dockerfile 路径;
--label=[] :设置镜像使用的元数据;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置 RUN 指令的网络模式
语法样例:
bash
docker build [OPTIONS] PATH | URL | -
docker build -t mynginx:v1 .
五、镜像操作案例
1、查找镜像
bash
docker search busybox
2、拉取镜像到本地
bash
docker pull busybox:1.36.0
3、查看镜像详情
bash
docker image inspect busybox:1.36.0
4、查看镜像分层
bash
docker history busybox:1.36.0
5、打标签
bash
docker tag busybox:1.36.0 ccr.ccs.tencentyun.com/maxhou6/busyboxbymaxhou:v3.0
6、推送镜像
bash
docker pull ccr.ccs.tencentyun.com/maxhou6/busyboxbymaxhou:v3.0
7、运行容器
bash
docker run -it --rm
8、删除镜像
bash
可以根据 id 和名字删除,对于使用的镜像需要先清理容器再删除镜像
docker rmi busybox:1.36.0
六、实战------离线迁移镜像
1、服务器 1 上镜像保存为 tar 文件,如操作系统为 ubuntu
bash
docker save -o busybox.tar busybox
2、scp 或者使用可视化工具拷贝镜像到第二台服务器上
bash
scp busybox.tar
3、从tar中恢复镜像
bash
docker load -i busybox.tar
4、 执行 docker run 检查镜像是否可以正常运行
bash
docker run -it --rm busybox:1.36.0 sh
若把一个镜像打不同的标签推送到镜像仓库,那么镜像仓库上的信息和大小是一样的,只是标签是不同的。