Docker——镜像仓库和镜像

目录

[一、Docker Registry(镜像仓库)](#一、Docker Registry(镜像仓库))

二、镜像仓库工作机制

1、使用流程

2、实际应用

三、镜像仓库命令

[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、查找镜像

2、拉取镜像到本地

3、查看镜像详情

4、查看镜像分层

5、打标签

6、推送镜像

7、运行容器

8、删除镜像

六、实战------离线迁移镜像

[1、服务器 1 上镜像保存为 tar 文件,如操作系统为 ubuntu](#1、服务器 1 上镜像保存为 tar 文件,如操作系统为 ubuntu)

[2、scp 或者使用可视化工具拷贝镜像到第二台服务器上](#2、scp 或者使用可视化工具拷贝镜像到第二台服务器上)

3、从tar中恢复镜像

[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 用户名/仓库名/镜像名

从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

若把一个镜像打不同的标签推送到镜像仓库,那么镜像仓库上的信息和大小是一样的,只是标签是不同的。

相关推荐
天才奇男子19 小时前
HAProxy高级功能全解析
linux·运维·服务器·微服务·云原生
小李独爱秋19 小时前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障
Dying.Light20 小时前
Linux部署问题
linux·运维·服务器
S190120 小时前
Linux的常用指令
linux·运维·服务器
萤丰信息20 小时前
AI 筑基・生态共荣:智慧园区的价值重构与未来新途
大数据·运维·人工智能·科技·智慧城市·智慧园区
小义_21 小时前
【RH134知识点问答题】第7章 管理基本存储
linux·运维·服务器
运维小欣21 小时前
Agentic AI 与 Agentic Ops 驱动,智能运维迈向新高度
运维·人工智能
_运维那些事儿1 天前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
Trouvaille ~1 天前
【Linux】UDP Socket编程实战(一):Echo Server从零到一
linux·运维·服务器·网络·c++·websocket·udp
嵌入小生0071 天前
Shell | 命令、编程及Linux操作系统的基本概念
linux·运维·服务器