容器和镜像
什么是镜像?
简单说, Docker 镜像是一个不包含 Linux 内核而又精简的 Linux 操作系统。
镜像工作原理?
当我们启动一个新的容器时, 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 对镜像回滚
容器
镜像运行起来的存在 多了一个读写层 隔离运行 TODO 有空再完善
比较
完美的解答:10 张图带你深入理解 Docker 容器和镜像
常用命令
1、关闭所有容器
docker stop `docker ps -a -q`
docker stop $(docker ps -aq)
2、删除所有容器
docker rm `docker ps -a -q`
docker rm $(docker ps -aq)
2、删除所有镜像
docker rmi `docker images -q`
3、按条件删除镜像
没有打标签
docker rmi `docker images -q | awk '/^<none>/ { print $3 }'`
docker rmi $(docker images | grep none|awk '{print $3}')
镜像名包含关键字
docker rmi --force `docker images | grep doss-api | awk '{print $3}'` //其中doss-api为关键字
4. 查看镜像历史
docker history 【image】
5.编译
docker build -t [image_name] .
7. 探索内部
docker inspect 【container】
8. 导出
save
9 导入
load
10.运行
run -it -p --name
参考
- 原文作者:战神西红柿
- 原文链接:https://tomatoares.github.io/posts/cloud/image-container/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。