Skip to content

docker镜像

docker镜像

1、镜像是什么

bash
镜像是什么?一个分层存储的文件,不是一个单一的文件一个软件的环境一个镜像可以创建N个容器一种标准化的交付一个不包含Linux内核而又精简的Linux操作系统

2、镜像下载

方法 1:从公网 docker hub 拉取(下载)image

bash
[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常见国内镜像仓库源

bash
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镜像地址
bash
##直接执行如下代码即可:mkdir-p/etc/dockertee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["https:}EOFsystemctldaemon-reloadsystemctlrestartdocker备注:##我们在安装了docker服务后,默认在就会生成/etc/docker目录了,以上命令再次创建了/etc/docker目录,是没问题的,原来目录下的文件不会被覆盖的;

验证:

bash
在最后,可以看到镜像仓库的地址,已经改为阿里云了,原来默认镜像仓库的地址还在,但是默认会优先使用刚添加的阿里云地址的;[root@docker ~]##docker info

再下载,就可以了,可以发现下载速度贼快:

bash
[root@docker ~]##docker images[root@docker ~]##docker pull centos

  • 还有另一种方法:修改 docker 服务启动脚本**(不推荐使用)**
bash
##以下只是提供了一种方法,本次并未采用此种方式。[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 指定载入的镜像归档

bash
[root@docker ~]## docker load -i /root/docker-Centos7.tar

方法 4:直接下载其他站点的镜像

bash
[root@docker ~]## docker pull hub.c.163.com/library/tomcat:latest

📍 如何查找某个docker镜像仓库里是否包含这个镜像?

  • docker search 镜像名默认是在dockerhub镜像仓库地址去查询的
bash
[root@xyy admin]##docker search busybox

💖那么现在有个问题,我想知道刚才不是配置了一些国内镜像仓库源嘛,我想知道他们里面有没有我需要的镜像该怎么办呢? 好像没什么办法,只能使用docker pull 镜像名去下载看效果了,如果没有下载成功的话,说明刚才配置的国内镜像仓库和dockerhub镜像仓库都没有这个镜像。

📍 要区别软件仓库和进项仓库的区别

下面这个docker-cekubernetes是一些repo yum仓库地址,和前面配置的进项源是不是一个东西。

https:backup-2021-11-15CentOS-Base.repodocker-ce.repoepel.repoepel-testing.repo[root@xyy admin]##

02.镜像仓库

从这些地址可以下载容器运行所需要的镜像。

📍 实际测试过程

2.压缩镜像后导出tar.gz包 😋(推荐)

互劢:如果觉得导入的 tar 包太大?如何缩小?

bash
语法:dockersave本地镜像名:镜像标签|gzip>导出的镜像名.tar.gz

做法:

bash
[root@master ~]##docker save httpd:2 |gzip>docker-httpd-image2.tar.gz

查看: 注:发现少了 1 半的大小。 所以压缩效果徆明显。

3.一次性导出多个镜像
bash
一次性导出多个包:dockersave镜像1镜像2-o包名导入:dockerload-i包名##打包的时候是几个镜像导入就是几个镜像
4.离线docker镜像包制作方法(详细用法见自己另一篇博客)
技巧 1:批量导出机器所有镜像制作docker镜像离线包

工作中,如果想把物理机上所有镜像导出,制作成 docker 镜像离线包,可以使用以下命令:

bash
[root@master ~]##docker save `docker images | cut -f1 -d ' ' | sed -n '2,$p'`|gzip>k8s-images-v1.20.4.tar.gz
  • 测试结果截图

  • cut命令、sed命令测试过程
bash
[root@master ~]##docker images |cut-f1-d''|sed-n'2,$p'## cut 参数 -f1 打印第 1 列, -d‘ ’ 以空格作为分隔符## sed 命令参数 -n :只打印匹配的行 ;sed 的编辑命令参数 p 打印匹配行,和-n 一起合用

技巧 2:如果想把整个集群中所有机器上的镜像,都打包成一个镜像,可以执行以下命令
bash
语法如下: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节点:

bash
##在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节点:

bash
##在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 上,把镜像统一导出一下

bash
[root@k8s-master ~]## docker save `docker images | cut -f1 -d ' ' | sed -n '2,$p'`|gzip>k8s-images-v1.20.0.tar.gz

备注:查看当前k8s版本

bash
[root@k8s-node1 ~]##kubeadm version[root@k8s-node1 ~]##rpm -qa|grepkube

如此,可以制作离线kubeadm安装k8s集群了,good。

导入语法:

bash
dockerload-ixxxx.tar/.tar.gz(本地镜像)##说明:这里是可以导入.tar包或者.tar.gz包的
  • 查看本地镜像

  • 查看本地已经存在的镜像

  • 开始导入并观察现象

可以发现,本地镜像已经成功导入了,我们就可以方便使用镜像了。

  • 这里再次测试下看能否导入.tar.gz包(.tar.gz压缩包完全也可以导入成功)

方法 2:Push Image To Docker Hub 发布到外网

bash
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。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

http:

版权:此文章版权归 One 所有,如有转载,请注明出处!

链接:可点击右上角分享此页面复制文章链接

上次更新时间:

最近更新