镜像
what is image?
Docker镜像是一个不包含内核而又精简的操作系统
source?
docker.io
daoclod.io 推荐!
加速器:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://a9019f5b.m.daocloud.io
该脚本可以将 –registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。
work process?
当我们启动一个新的容器时候,Docker会加载只读镜像,并在其上添加一个读写曾,并将镜像中的目录复制一份到/var/lib/docker/aufs/mnt/countainerID 下,我们可以使用chroot进入此目录。如果运行中的容器修改一个已经存在的文件,会将该文件从下面的只读层复写到读写层,只读层的这个文件就会被覆盖,但是还会存在。就这实现了文件系统隔离,当删除读写层的数据将会删除,只读镜像不会变。
镜像文件存储结构?
docker相关文件放在/var/lib/docker目录下
/var/lib/docker/aufs/diff 每层与其父层之间的文件差异
/var/lib/docker/aufs/layers 每层一个文件 记录父层一直到根层之间的ID 大部分文件最后一行都表示继承来自同一层
/var/lib/docker/aufs/mnt 联合挂在点,从只读层复制文件到可读写层的文件系统数据。
在建立镜像时 每次读写操作 都被视作一种增量操作,即在原有的数据层上添加一个锌层;所以一个镜像会由若干个层组成。每次commit就会产生一个新的ID,就相当于在上一层增加了一层,通过这个ID对镜像回滚。
Base 指令
镜像操作
docker images # 显示本地所有的镜像列表
docker import # 从一个tar包创建一个镜像,往往和export结合使用
docker build # 使用Dockerfile创建镜像(推荐)
docker commit # 从容器创建镜像
docker rmi # 删除一个镜像
docker load # 从一个tar包创建一个镜像,和save配合使用
docker save # 将一个镜像保存为一个tar包,带layers和tag信息 (docker save mysql >mysql.tar )
docker history # 显示生成一个镜像的历史命令 docker tag # 为镜像起一个别名
注意:save的话是保存所有的层级 export则会缺失一些构建层级或者历史记录等 迁移最好用save