二、docker 镜像

#二、 镜像
##2.1 镜像工作原理:
这里写图片描述

当启动一个新的容器时,docker会加载只读镜像,并在其之上添加一个读写层,并将镜像中的目录复制一份到/var/lib/docker/aufs/mnt/容器ID目录下,可以使用chroot进入此目录。
如果运行中的容器修改一个已经存在的文件,那么会将该文件从下面的只读层复制到读写层,只读层的文件会被覆盖,但还存在,==》实现了文件系统隔离。
当删除容器后,读写层的数据将会删除,只读镜像不变。
docker相关文件存放在:/var/lib/docker目录下
/var/lib/docker/aufs/diff #每层与其父层之间的文件差异
/var/lib/docker/aufs/layers # 每层一个文件,记录其父层一直到根层之间的ID,大部分文件的最后一行一样??。。表示继承来自同一层。
/var/lib/docker/aufs/mnt # 联合挂载点从只读层复制到嘴上层,可读写层的文件系统数据
在建立镜像时,每次写操作,都被视作一种增量操作,即在原有的数据层上添加一个新层,所以一个镜像会有若干个层组成,每次commit提交就会产生一个ID,就相当于在上一层又加了一层,可以通过这个ID对镜像回滚。
官网:
hub.docker.com/explore
国内源,提高下载速度:

curl -SL https://get.daocloud.io/daotools/set_mirror.sh | sh -s  http://04be47cf.m.daocloud.io

举例子
比如拽一个ubuntu,会比较快

docker pull ubuntu
docker  run  -itd  --name  test01  ubuntu #创建一个test01的container,获取ID,x

这里写图片描述

所有信息都在/var/lib/docker 下
这里写图片描述

会在containers目录下生成此容器的目录:

ll  /var/lib/docker/containers/

这里写图片描述

##2.2 镜像安装与使用
###2.2.1 管理命令

命令说明
search#docker search mysql ;从repo模糊查询
pull#下载 docker pull mysql
push#push 到本地仓库 或docker hub上
images#docker images 查看本地镜像
commit将一个更改的镜像内容更新提交
比如,我在一个test容器里写 2 个文件
docker attach test01

touch home/{a.txt,b.txt}
ctrl +p +q 退出
再确认下文件在不在,docker exec test01 ls /home # 能看到a.txt,b.txt
删掉容器后,读写层的东西就没了,即a.txt;b.txt也会没了,
测试如下:
删除这个test01容器 docker rm test01

 docker run -itd --name  test01  ubuntu
docker exec  test01  ls /home  #a.txt.b.txt没有了

但,我想保存读写层的东西:

docker exec test01  touch /home/{a.txt,b.txt} #在test01容器里创建 a.txt,b.txt

docker exec test01  ls  /home  #查看是否创建成功,成功后: 		
docker commit  test01  ubuntu:self 	 #提交新镜像
docker run  -itd  --name test02 ubuntu:self    #基于新镜像生成新容器,如下:

这里写图片描述

docker  exec  test02  ls  /home  #查看基于新镜像生成的容器是否成功(有文件ok)

这里写图片描述

命令说明
build#通过dockerfile 构建镜像
rmi#删除镜像 docker rmi ubuntu
export#导出容器的文件系统 -> 导入到一个tar包中(只读层)
	...|例1:	#docker  export  test01  >  test01.tar

import |#导入 tar 包生成镜像 docker import test01.tar var_newImageName(新镜像名)

docker import test01.tar  ubuntu2

这里写图片描述

docker images

这里写图片描述

docker run  -itd --name test03 ubuntu2   #现在使用导入的镜像生成容器,会报错

这里写图片描述

docker run  -itd --name test03 ubuntu2  /bin/bash  #需添加运用啥解释器来运行此 文件系统

这里写图片描述

save#将整个镜像导出 docker save mysql > mysql.tar
load#docker load -i mysql.tar #新名字不用指定,以原有镜像名字为准

镜像加速器

vim /etc/docker/daemon.json
		{
		  "registry-mirrors": [
		    "https://registry.docker-cn.com"
		  ]
		}

之后重新启动服务。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

检查加速器是否生效:

docker info

期望:

Registry Mirrors:
https://registry.docker-cn.com/

Successful !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值