Docker镜像和仓库

docker镜像是启动容器的构建基石,是由文件系统叠加而成;
最底层是一个引导文件系统,即bootfs,容器启动后就会被卸载以腾出内存,
第二层是root文件系统,即rootfs,可以是一种或多种操作系统,
root文件系统及之上的多个文件系统都是只读状态;

docker镜像是分层构建,联合加载,写时复制;

一个镜像可以放到另一个镜像的顶部,位于下面的称为父镜像,最底部的rootfs称为基础镜像,
当一个镜像启动容器时,docker会在该镜像的最顶层添加一个读写文件系统,
我们运行的程序就是在这个读写层中执行的;

联合加载指docker一次会同时加载多个文件系统,并将各层文件系统叠加在一起,
这样最终的文件系统会包含所有底层的文件和目录,在外面看起来只能看到一个文件系统,也即镜像;

当文件系统发生变化时,这些变化只会应用到读写层,
如修改一个文件,docker会先将这个文件从只读层复制到读写层,
只读层中的文件依然存在,但是会被读写层中的该文件所隐藏,
删除文件则是在读写层对该文件打上删除标记;

可写容器层–可读写,初始为空,可运行程序,修改容器,构建新镜像等
其他镜像层–其他应用程序或文件,如Nginx等
基础镜像层rootfs–一般为操作系统镜像,包含最低限度支持系统运行的组件
引导文件系统bootfs–宿主机内核文件,配置数据等

镜像保存在仓库中,仓库存在于Registry中,默认Docker Hub,
每个仓库可以存放镜像的很多不同版本,默认为latest,
镜像通常表示为 仓库名:tag标签,同一个镜像可以有多个不同标签;

一般来说我们不是真正的创建新镜像,而是基于一个已有的基础镜像构建新镜像,
Dockerfile 是一个用来构建镜像的文本文件,包含了一条条构建镜像所需的指令和说明,
其所在目录即为构建环境,称为构建上下文,一般为新建单独目录,
该文件中的指令会按顺序从上到下执行,每条指令都会创建一个新的镜像层并对镜像进行提交,
如果某条指令失败了,则之前已提交的镜像层也可以使用,便于调试,
# 开头即为注释,第一条指令必须是FROM,指定一个已经存在的镜像,即基础镜像;

本地镜像都保存在docker存储驱动目录下面,
/var/lib/docker/image/overlay2/imagedb/content/sha256/目录中;

docker images 列出本地镜像
docker pull 从镜像仓库中拉取或者更新指定镜像
docker search 从Docker Hub查找所有可用镜像
docker commit 从容器构建一个新的镜像
docker build 使用Dockerfile文件构建新镜像,最后一个 . 指定本地目录
docker history 查看指定镜像的创建历史
docker port 查看指定容器的端口映射
docker inspect 获取容器/镜像的元数据,即详细信息 -f 指定返回值模板
docker login/logout 登陆/登出一个Docker镜像仓库,默认为Docker Hub
docker push 将本地镜像上传到镜像仓库,要先登陆到镜像仓库
docker save 将指定镜像保存成 tar 归档文件
docker load 导入使用 docker save 命令导出的镜像
docker import 从归档文件中创建镜像
docker rmi 删除本地一个或多个镜像

     

版权声明:本文为zlw-xyz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zlw-xyz/p/12676250.html