赞
踩
图片网上扒的,看看就行了0.0;从图中可以看到,Docker整体是C/S的结构,开发者可以使用Docker CLI 通过调用 Docker 的 API 接口,与Docker 服务器交互。
下面大致介绍一下几个主要的角色
镜像(Images)
镜像在仓库中的存储方式与Maven中的jar包类似,可以对比理解。
Maven中,开发者要定位某个jar包,需要使用 GAV坐标来指定:
一个指定的组,组下面指定的包名,同一个包指定的版本;
镜像也是类似的:
【仓库名/软件名:标签(版本号) 】这样的格式来指定一个Docker镜像
容器(Container)
镜像和容器是密切相关的,简单来说,镜像是静态的,容器是运行时的镜像,在镜像的基础之前添加了容器运行时的存储层。有点类似于,Java里面的 类和对象的关系。Docker借用了面向对象的思想,它的镜像可以继承,实现镜像复用。
仓库
Docker仓库的概念有点类似于 Maven,是用来管理Docker镜像的。所以开发者也有必要创建私服,用来管理自己项目的Docker镜像(这个后面再说)。
网络(network)和数据卷(data volumes)
前面也说了 Docker 是一种虚拟技术,所以内部是有完整的操作系统结构的,其中就包含了网络通信这一块;至于数据卷,我们知道,容器运行一旦结束并销毁后,容器内的任何东西都是会被销毁的(这一点可以类比Java的对象,对象被GC回收后,对象所承载的数据都随着对象销毁),数据卷就是独立于容器的数据存储的这样一个概念。所以,开发者在构建自己应用程序的镜像时,不要在容器内部存储任何数据,可以将数据存储在数据卷或者将存储路径映射到宿主机的指定路径
数据卷挂载主要分为:
1. 具名挂载
-v 卷名称:容器目录
具名卷为空时,默认会将容器内数据先挂载到具名卷中
2. 匿名挂载
匿名挂载可以分为主动挂载和被动挂载
主动挂载: -v 容器目录
被动挂载:在构建镜像时 VOLUME [“/volume01”,“/volume02”] 绝对路径
3. 目录挂载
-v 宿主目录:容器目录
宿主机目录为空时,默认会将容器内的目录覆盖为空
数据卷还有一个类似继承的概念:如果一个容器定义一系列数据卷挂载关系;在启动另一个容器时 可以使用命令 --volumes-from 容器(id/名称)的方式将,挂载关系继承过来,此时两个容器共享继承的这一部分挂载关系;无论是宿主目录变动还是任何一个容器目录变动,其余两方都会同步变化。
挂载数据卷时还可以指定容器内操作数据卷的权限 -v [宿主目录:]容器目录(:ro 只读/rw读写),默认rw即容器内可以读写数据卷
具名挂载/匿名挂载时,宿主机目录在 /var/lib/docker/volumes/卷名/_data;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。