docker镜像是分层的,一层一层组成的镜像结构
docker镜像层都是只读的,只有容器是可写的,当容器启动时,一个新的可写层被加载到镜像的顶部。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN3cjM2EmNwITN2MDOhRWNzYzX0UDNyYDMwMzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
为什么docker镜像要采用分层结构呢?
镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。
我docker服务器启动一个ubuntu的容器,使用vim 命令的时候会发现并没有这个命令,这是由于ubuntu镜像精简了很多命令,只保留linux内核必须的功能与命令,这也是docker中容器非常快的原因。
下面我们就自己使ubuntu具备vim命令
apt-get update
apt-get -y install vim
执行完命令之后可以发现vim命令就可以使用了
提交容器副本使其成为一个新的镜像(容器外执行)
docker commit -m "add vim" -a "hanansheng" cff1debb8875 has-ubuntu:1.1
提交之后通过 docker images就可以看到我们刚才提交的镜像
这个时候我们运行刚刚生成的镜像,就会发现新的容器是具备vim命令的
总结:docker中的镜像分层,支持通过扩展现有镜像,创建新镜像。类似于java继承于一个base基础类,自己再按需扩展。
我们可以把这个has-ubuntu本地镜像发布到阿里云上面供其他人使用:
进入阿里云,进入实例列表:
创建命名空间:
创建镜像仓库:
点击下一步:
然后直接执行第三条命令即可:
如果执行第一条命令就报了这个错,那就是登录凭证未设置:
设置访问凭证密码:
设置完登陆凭证就成功连接到阿里云了:
然后执行其他命令:
那上传到了阿里云之后怎么验证下是否上传成功呢?可以拉取一下试试:
可以看到拉取成功:
这个例子就证明了docker的分层概念!!
docker私有库学习:
本地搭建docker私有仓库:
步骤一:下载镜像docker registry
docker pull registry
步骤二:运行私有库registry,相当于本地有个私有docker hub
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
步骤三:创建一个新镜像,ubuntu安装ifconfig命令
docker run -it ubuntu /bin/bash
apt-get update
apt-get install net-tools
commit 新的镜像:
docker commit -m "add config" -a "hanansheng" cff1debb8875 has-ubuntu:1.6
步骤四:curl验证私服库上有什么镜像,目前是空的
curl -XGET http://127.0.0.1:5000/v2/_catalog
步骤五:将新镜像has-ubuntu:1.x修改符合私服规范的TAG
docker tag has-ubuntu:1.6 127.0.0.1:5000/has-ubuntu:1.6
步骤六:修改配置文件使其支持http
vim /etc/docker/daemon.json
步骤七:push推送到私服库
然后再通过crul在验证下私服库中有什么镜像:
curl -XGET http://127.0.0.1:5000/v2/_catalog