docker镜像的基本操作
拉取镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
NAME:镜像仓库的名称
NAME[:TAG]:使用带有标签的名称指定镜像的版本
NAME[@DIGEST]:使用带有摘要值的镜像名称格式
选项:
--all-tags(-a):下载该仓库的所有标签(版本)的镜像,-a为短格式
--disable-content-trust:默认值为true,忽略镜像验证
--platform:如果服务器支持多平台,则可以指定平台
如果不指定标签,latest为默认标签
(如果配置了镜像加速器,则镜像会从加速器指定的docker注册中心,而不是docker hub下载)
按ctrl+C在拉取过程中取消继续拉取
显示镜像列表
docker images [OPTIONS] [REPOSITORY:[:TAG]]
默认命令:docker images 显示所有的顶层镜像
显示所有镜像:-a或者--all
显示完整的镜像信息:--no-trunc
只显示镜像ID:-q
显示镜像的摘要值:--digests
docker images centos 列出所有仓库名为centos的镜像(也可加上标签:docker images centos:7)
过滤要显示的镜像
-f(--file)
可以使用多个-f选项表示不止一个过滤条件
列出无标签镜像:

当新构建的镜像占用某个镜像的标签或者仓库名称时就会产生这类镜像
<none>:<none> 格式
因为版本更新重新创建镜像,以前版本的镜像就会变成无标签
通过指定的标记(label键值对)过滤镜像:
显示标记为com.example.version的值为1.0的镜像
docker images --filter "label=com.example.version=1.0"
按镜像的创建时间过滤:
-f before=(<镜像仓库名>[:标签]|<镜像ID>|<镜像摘要值>)
-f since=(<镜像仓库名>[:标签]|<镜像ID>|<镜像摘要值>)

表示列出在centos之后创建的镜像
按指定的格式列出镜像
--format
只显示镜像的ID和仓库名称

table表示包括列标题,以表格的形式显示镜像的ID和仓库名称和标签

设置镜像标签
标签用于描述镜像的版本信息
每个镜像仓库可以有多个标签,多个标签可以对应是同一个镜像
实际上就是增加一个新的名称
docker tag 镜像ID/仓库名称/仓库名称和标签 新标签
查看镜像详细信息
docker inspect 镜像/容器/任务
默认情况下以JSON数组格式输出所有结果
可以使用-f指定输出内容

获取了Ubuntu的体系结构
查看镜像的构建历史以验证镜像分层
是Dockerfile的执行过程
可以加上--no-trunc显示完整的操作命令
镜像历史信息也反映了其层次,镜像的各层相当于一个子镜像,第二层是在第一层构建镜像的基础上形成的新的镜像,最新构建的镜像是历次构建结果的叠加
<missing>行表示相应的层在其他系统上不是在本地构建,并且已经不可用了
可以使用--format定义输出格式
占位符:.ID 镜像ID
.CreatedSince 创建时长
.CreatedAt 创建时间
.CreatedBy 创建命令
.Size 占用空间
.Comment 镜像注释信息

还可以使用-H(--human)让镜像大小和日期时间以适合阅读的格式输出
查找镜像
docker search
可以使用-f进行过滤
删除本地镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
可以使用镜像ID、标签、摘要标签符指定要删除的镜像
如果一个镜像对应了多个要删除的标签,只有当最后一个标签被删除时,镜像才真正被删除

--force(-f):强制删除,会清除该镜像的标签,并删除与该ID匹配的所有镜像

清理未使用过的镜像:默认情况下只会清理虚悬(dangling)镜像,虚悬镜像是没被打标签且没被其他任何镜像引用的镜像,要删除没有被现有容器使用的所有的镜像,可使用选项-a(--all)
docker image prune
可以使用--filter使用过滤表达式来限制删除哪些镜像,如删除24小时前创建的镜像:
docker image prune -a --filter "until=24h"
还可以使用label键指定镜像标记过滤要删除的镜像
docker image prune --filter="label=deprecated"
镜像的导入和导出
导出相当于备份镜像,导入相当于恢复镜像
将镜像导出到归档文件

-o(--output)用于指定归档文件,如果没有,则表示导出到标准输出流
将镜像hello-world导出到hello-world.tar文件中并用ls显示验证
利用重定向也可以实现导出功能:
docker save hello-world > hello-world.tar
从归档文件加载镜像
docker load --input 归档文件
--input(-i)指定要读取的归档文件,如果没有,表示从默认输入流导入
利用重定向也可以实现导入功能:
docker load <归档文件
Docker注册中心
注册中心Registry:存放镜像仓库,一个注册中心里往往有很多仓库
仓库Repository:集中存放某一类镜像,包括多个镜像文件,通过标签来区分不同镜像,如Ubuntu仓库里存放的是Ubuntu的基础镜像,有14.10,16.04,18.04等多个版本
仓库中心:gitlab/gitlab-ce,前面是命名空间(可能是用户名),后者是仓库名称
一个注册中心---多个仓库---每个仓库,多个标签---每个标签对应一个特定的镜像
Docker Hub
共有仓库 私有仓库
顶级仓库:基础镜像
次级仓库:特定命名空间下的仓库
Docker Hub容器镜像服务
阿里云容器镜像服务
在docker命令行窗口登录到阿里云镜像仓库

注意在阿里云容器镜像服务窗口的重要通知里,从24年9月9日开始,改为了新的个人版域名,原本的registry.的格式不适用,会出现403错误(这个弄了好久,才看到这个通知。。。)
用户名是阿里云账号
出现Login Succeed表示登陆成功
将镜像推送到阿里云
首先为镜像设置针对阿里云的标签
然后执行docker push命令

执行完成之后,可以在阿里云的镜像仓库中看到该镜像
注意要保持对同一用户(root与wusa不同)的login状态
从阿里云拉取镜像

可以不用登录至阿里云,通过浏览器搜索到镜像,获取其地址即可
私有docker注册中心
负责镜像仓库的管理

1:拉取Resgistry的最新版本镜像
2:启动Resgistry容器
-v:将主机本地/opt/data/registry目录绑定到容器/var/lib/registry目录(这是docker注册中心默认存放镜像文件的目录),实现数据的持久化,将镜像仓库存储到本地
-p:设置映射端口,这样访问主机的5000端口就能访问到registry容器的服务
--restart:设置重启策略,设置为always表示这个容器异常退出也会自动重启
--name registry:表示将该容器命名为registry
3:获取所有的镜像仓库来测试Registry服务
4:表示服务正常运行,刚建立还没有任何镜像
将镜像推送到自建的docker注册中心
推送镜像之前需要先对自建注册中心设置相应的标签
注册中心域名:端口/仓库名称:[标签]

1:为镜像加上标签
2:推送
3:测试
4:验证成功(也可以直接使用浏览器访问自建注册中心服务)
从自建docker注册中心拉取镜像

配置注册中心服务地址
默认服务地址使用localhost或127.0.0.1,没有使用主机的域名或IP就会报错
因为docker注册中心默认使用HTTP协议,docker客户端使用HTTP协议才能推送拉取对象
解决方法:修改/etc/docker/daemon.json文件,添加需要使用的注册中心域名和IP地址,然后重启docker服务
Docker镜像操作与注册中心使用指南

290

被折叠的 条评论
为什么被折叠?



