Docker镜像

一些需要了解的概念

  • Docker镜像是分层的联合文件系统,每一层都可以复用。
  • Docker镜像层都是只读的,容器层是可写的。
  • Docker容器启动时,一个新的可写镜像被加载到顶部,这一层即为”容器层”,”容器层”之下的都叫”镜像层”。
  • Docker中对容器的改动,不会影响只读的镜像。因此镜像具有复用性,一个镜像可实例出多个可写的容器。

也就是说, 如果基于目前状态的可写容器层, 向下提交出一个新的只读层, 那么我们就获得了一个基于当前容器的只读”镜像”。

基于当前容器生成一个镜像

docker commit -m=”描述” -a=”作者” 容器ID 生成镜像的名称:标签号

镜像发布

  • 要先将镜像加上用户名,不然push时docker无法确认目标仓库。
1
docker   tag   源镜像名:tag   用户名/修改后的镜像名:Tag

这一步之后,镜像仓库里会新生成一个名字为用户名/修改后的镜像名的镜像,标签为Tag

  • 推送至服务器(注意推送的是刚才tag后新生成的那个推送版本)
1
2
3
docker push 用户名/修改后的镜像名:Tag

docker push 镜像ID

容器数据卷

由于容器数据卷涉及到盘符挂载, 因此记得加入参数 --privileged=true, 防止因权限不够而导致无法运行带有容器卷存储功能的容器实例。

容器数据卷,有点类似Redis里面的rdb和aof文件,作用: 将docker容器内的数据持续实时地保存进宿主机的磁盘中。

docker run -it –privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

通过docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名命令后,即可成功运行一个带有容器数据卷功能的容器实例。

本容器实例内的数据卷目录下文件发生更改,将自动同步至主机,反之亦然; 若在本容器实例停止运行时,主机源数据卷目录发生更改, 待容器恢复运行, 更改依然会自动同步至容器实例内的数据卷目录下。

查询容器的挂载信息

docker inspect 容器ID

在内部有个”Mounts”的key,对于的value中存在 “Source”与”Destination”两个key,其值即代表系统的源挂载目录和目标容器内的目录。

带有自定义规则的容器数据卷

读写: docker run -it –privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名

只读: docker run -it –privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

卷的继承和共享

docker run -it –privileged=true –volumes-from 父类容器名 –name u2 ubuntu

轻松实现了多服务间数据的共享

参考

[1] Docker与微服务实战笔记-朋友转发文档,未溯源