docker镜像
docker镜像
1、镜像是什么
镜像是什么?•一个分层存储的文件,不是一个单一的文件•一个软件的环境•一个镜像可以创建N个容器•一种标准化的交付•一个不包含Linux内核而又精简的Linux操作系统
2、镜像下载
方法 1:从公网 docker hub 拉取(下载)image
[root@docker ~]## docker pull centos ##默认不加版本号的话,是使用latest版本。Usingdefaulttag:ladockerErrorresponsefromdaemon:Gethttps:##可能会报错,因为网络的问题,无法连接到 dockerhub 下载镜像,可以多次尝试下载下。##下载速度很慢,真的很慢。##解决:使用vpn或者换一个国内的 docker 镜像下载地址(常见的有阿里云,清华源,163等);
方法 2:使用阿里云 docker 镜像加速器,提升 pull 的速度【荐】
1.获取阿里云自己专有的镜像加速器地址
你只需要登录容器Hub服务[https:https:##命令如下:sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["https:}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
####### 📍 说明:docker常见国内镜像仓库源
1.默认docker镜像仓库地址:https:2.国内常见docker镜像仓库地址https:http:https:镜像源可以添加多个,根据自己的网络环境选择速度快的,这里给大家添加了3个老师常用的(阿里、网易、上海蓝云网络科技有限公司):mkdir-p/etc/dockertee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["https:}EOFsystemctldaemon-reloadsystemctlrestartdocker##扩展:azk8s.cn 这个域名是上海蓝云网络科技有限公司的。上海蓝云网络科技有限公司于2013年3月成立,由世纪互联与门为在中国境内提供Windows Azure和 Office 365 服务而成立,为世纪互联的全资子公司。
2.配置docker镜像地址
##直接执行如下代码即可:mkdir-p/etc/dockertee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["https:}EOFsystemctldaemon-reloadsystemctlrestartdocker备注:##我们在安装了docker服务后,默认在就会生成/etc/docker目录了,以上命令再次创建了/etc/docker目录,是没问题的,原来目录下的文件不会被覆盖的;
验证:
在最后,可以看到镜像仓库的地址,已经改为阿里云了,原来默认镜像仓库的地址还在,但是默认会优先使用刚添加的阿里云地址的;[root@docker ~]##docker info
再下载,就可以了,可以发现下载速度贼快:
[root@docker ~]##docker images[root@docker ~]##docker pull centos
- 还有另一种方法:修改 docker 服务启动脚本**(不推荐使用)**
##以下只是提供了一种方法,本次并未采用此种方式。[root@docker ~]## vim /usr/lib/systemd/system/docker.service改:14ExecStart=/usr/bin/dockerd-Hfd:为:14ExecStart=/usr/bin/dockerd-Hfd:重启docker服务使daemon.json生效[root@docker ~]## systemctl daemon-reload ##叧有修改了 systemd 服务脚本,才需要重新加载。如果修改配服务的置文件,不需要执行这个。[root@docker ~]## systemctl restart docker
方法 3:把之前下载好的 image 镜像导入:docker load命令
把 docker-Centos7.tar 镜像上传到 linux 上 参数: -i docker-Centos7.tar 指定载入的镜像归档
[root@docker ~]## docker load -i /root/docker-Centos7.tar
方法 4:直接下载其他站点的镜像
[root@docker ~]## docker pull hub.c.163.com/library/tomcat:latest
📍 如何查找某个docker镜像仓库里是否包含这个镜像?
docker search 镜像名
默认是在dockerhub镜像仓库地址去查询的
[root@xyy admin]##docker search busybox
💖那么现在有个问题,我想知道刚才不是配置了一些国内镜像仓库源嘛,我想知道他们里面有没有我需要的镜像该怎么办呢? 好像没什么办法,只能使用docker pull 镜像名
去下载看效果了,如果没有下载成功的话,说明刚才配置的国内镜像仓库和dockerhub镜像仓库都没有这个镜像。
📍 要区别软件仓库和进项仓库的区别
下面这个docker-ce
,kubernetes
是一些repo yum仓库地址,和前面配置的进项源是不是一个东西。
https:backup-2021-11-15CentOS-Base.repodocker-ce.repoepel.repoepel-testing.repo[root@xyy admin]##
02.镜像仓库
从这些地址可以下载容器运行所需要的镜像。
[root@xyy admin]##cat /etc/docker/daemon.json {"registry-mirrors":["https:}https:语法:dockersave-o导出的镜像名.tar本地镜像名:镜像标签(tar包)语法:dockersave本地镜像名:镜像标签|gzip>导出的镜像名.tar.gz(压缩包)2、导入本地镜像语法:dockerload-ixxxx.tar/.tar.gz(本地镜像)
📍 实际测试过程
- 先下载一个测试镜像
[root@master ~]##docker pull httpd:2[root@master ~]##docker images
- docker save导出本地镜像
[root@master ~]##docker save -o docker-httpd-image.tar httpd:2 ##注意:这个是tar包,不是压缩包:
- 查看:导出镜像成功。
- 注意:这个是tar包,不是压缩包
dockersave-onginx.tarnginx##导出镜像为tar包tarxvfnginx.tar##解压tar包
2.压缩镜像后导出tar.gz包 😋(推荐)
互劢:如果觉得导入的 tar 包太大?如何缩小?
语法:dockersave本地镜像名:镜像标签|gzip>导出的镜像名.tar.gz
做法:
[root@master ~]##docker save httpd:2 |gzip>docker-httpd-image2.tar.gz
查看: 注:发现少了 1 半的大小。 所以压缩效果徆明显。
3.一次性导出多个镜像
一次性导出多个包:dockersave镜像1镜像2-o包名导入:dockerload-i包名##打包的时候是几个镜像导入就是几个镜像
4.离线docker镜像包制作方法(详细用法见自己另一篇博客)
技巧 1:批量导出机器所有镜像制作docker镜像离线包
工作中,如果想把物理机上所有镜像导出,制作成 docker 镜像离线包,可以使用以下命令:
[root@master ~]##docker save `docker images | cut -f1 -d ' ' | sed -n '2,$p'`|gzip>k8s-images-v1.20.4.tar.gz
- 测试结果截图
- cut命令、sed命令测试过程
[root@master ~]##docker images |cut-f1-d''|sed-n'2,$p'## cut 参数 -f1 打印第 1 列, -d‘ ’ 以空格作为分隔符## sed 命令参数 -n :只打印匹配的行 ;sed 的编辑命令参数 p 打印匹配行,和-n 一起合用
技巧 2:如果想把整个集群中所有机器上的镜像,都打包成一个镜像,可以执行以下命令
语法如下:dockersave镜像名|gzip|sshroot@192.168.1.63'cat |docker load'1、先将node节点上所有镜像远程导入到master上:[root@xuegod64 ~]## docker save `docker images | cut -f1 -d ' ' | sed -n '2,$p'`|gzip|sshroot@192.168.1.63'cat |docker load'2、master上拥有所有docker镜像后,再在master上,把镜像统一导出一下[root@xuegod63 ~]## docker save `docker images | cut -f1 -d ' ' | sed -n '2,$p'`|gzip>k8s-images-v1.20.4.tar.gz注:我就是这样,把集群中的所有镜像,打包成一个包的。方便后期使用
- 自己测试过程
如下,是一个已经以kubeadm
搭建好的k8s集群:
master节点镜像:
node1/node2节点镜像:
- 现在,我就针对这个v1.20.0版本的k8s集群导出一个离线镜像包,并进行kubeadm离线方式部署k8s集群实验
- 自己实际命令如下
1、将node1的all镜像导入到master节点:
##在node1上执行:[root@k8s-node1 ~]##docker save `docker images | cut -f1 -d ' ' | sed -n '2,$p'` |gzip |ssh root@172.29.9.31 'cat |docker load'
2、将node2的all镜像导入到master节点:
##在node2上执行:[root@k8s-node2 ~]##docker save `docker images | cut -f1 -d ' ' | sed -n '2,$p'` |gzip |ssh root@172.29.9.31 'cat |docker load'
3、master 上拥有所有 docker 镜像后,再在 master 上,把镜像统一导出一下
[root@k8s-master ~]## docker save `docker images | cut -f1 -d ' ' | sed -n '2,$p'`|gzip>k8s-images-v1.20.0.tar.gz
备注:查看当前k8s版本
[root@k8s-node1 ~]##kubeadm version[root@k8s-node1 ~]##rpm -qa|grepkube
如此,可以制作离线kubeadm安装k8s集群了,good。
导入语法:
dockerload-ixxxx.tar/.tar.gz(本地镜像)##说明:这里是可以导入.tar包或者.tar.gz包的
- 查看本地镜像
- 查看本地已经存在的镜像
- 开始导入并观察现象
可以发现,本地镜像已经成功导入了,我们就可以方便使用镜像了。
- 这里再次测试下看能否导入.tar.gz包(.tar.gz压缩包完全也可以导入成功)
方法 2:Push Image To Docker Hub 发布到外网
1、Signupondockerhub&createrepo注册一个帐号https:2、Logintodockerhub## docker login -u userabc -p abc123 -e userab@gmail.com3、Pushimagetodockerhub##上传镜像## docker push centos:httpd4、Pullimagefromdockerhub##下载镜像## docker pull userabc/centos:httpd-v2 ## 用户名/镜像名
方法 3:使用阿里云的私有仓库来发布你的镜像
请查看我的另一篇博客:实战-使用harbor搭建Docker私有仓库和使用阿里云私有仓库存储自己的docker镜像-(超详细-成功测试-博客输出)-20210529
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码 x2675263825 (舍得), qq:2675263825。
🍀 微信公众号 《云原生架构师实战》
🍀 个人博客站点