Docker笔记(二):Docker管理的对象

原文地址:http://blog.jboost.cn/docker-2.htmlhtml

 

Docker笔记(一):什么是Docker中,咱们提到了Docker管理的对象包含镜像、容器、网络、数据卷等,本文就来介绍下这些对象及用途。

docker

1. 镜像

所谓镜像,是一个静态的概念。它对咱们指望干的事情作了一些定义,好比要运行什么程序,须要哪些依赖,须要什么样的配置,须要开放哪一个网络端口等等。
Docker的镜像是一个特殊的文件系统,提供了运行时须要的程序、库、资源、配置等文件,还包含一些为运行时准备的配置参数(如环境变量、匿名数据卷、用户等),镜像不包含任何动态数据,其内容在构建以后也不会被改变。
镜像的文件系统有一个分层存储的概念,采用的是Union FS技术,所以,镜像并非简单地由一组文件组成,而是由多层文件系统叠加联合组成。以下图所示
container-layersubuntu

镜像构建时,会一层一层地构建,前一层是后一层的基础,每层构建完后就变成只读的,不会再发生改变。镜像分层存储的一大好处是复用,镜像的每一层能够在不一样镜像间复用,这就比如咱们开发项目时将一些公共功能封装成jar包,在各个项目能够直接依赖使用同样。关于镜像的更多内容,在后续使用时再详述。安全

2. 容器

相对镜像,容器是一个动态的运行时的概念,它与镜像的关系相似于面向对象中类与实例的关系。容器能够被建立、启动、中止、删除等。容器运行实质上就是运行一个进程,但与那些直接在宿主机上运行的进程不一样,容器运行在本身的独立的隔离的命名空间中——拥有本身的root文件系统、网络配置、进程空间,甚至本身的用户ID空间,所以虽然是以进程的形式运行,但好像是运行在一个独立的系统中同样,这样相比直接运行于宿主机的进程,容器的运行显得更为安全。
前面说到镜像的分层存储概念,对于容器来讲,实际上也是以镜像做为基础层,在其上建立了一个当前容器的存储层,以下图
sharing-layers.jpg微信

以镜像ubuntu:15.04为基础层所建立的容器,都有一个本身的可读写的存储层(镜像的存储层是只读的)。容器存储层的生命周期与容器同样,容器销毁时,容器的存储层也会随之消亡,任何保存在容器存储层的数据也都会随容器的删除而丢失,所以通常咱们要保持容器存储层的无状态化,全部文件的写操做,都应该使用数据卷或绑定宿主机目录。网络

3. 数据卷

数据卷是一个独立于容器,可供一个或多个容器使用的特殊目录,它绕过了Union FS,不会随容器的销毁而消亡。这比如咱们在阿里云上建虚机,再加载一个数据盘同样,通常产生的数据都要保存在数据盘,而不是虚机的系统盘。
数据卷具有以下特性:学习

  1. 能够在容器之间共享和重用
  2. 对数据卷的修改会立马生效
  3. 数据卷的更新,不会影响到镜像
  4. 数据卷默认会一直存在,不会随容器的删除而消亡

4. 网络

Docker容器是如何与外部进行网络通讯的?通常来讲,咱们在运行容器时,只须要指定容器服务端口与宿主机端口的映射,就能够经过宿主机IP与映射的端口访问容器服务了,由于Docker默认使用了Bridge的模式来实现容器与外部的通讯。
Docker的网络子系统经过使用一些驱动程序,是可插拔式的,默认提供了以下几种驱动:阿里云

  1. bridge:默认的网络驱动。运行在容器中的应用程序通常是经过网桥与外部进行通讯。
  2. host:容器直接使用宿主机的网络通讯。host只在基于Docker 17.06或以上版本的Swarm服务中可用
  3. overlay:overlay可将多个Docker daemon进程链接起来使得Swarm服务之间能相互通讯,也能够将overlay用于Swarm服务与容器之间,或运行在不一样Docker daemon上的容器之间的通讯,不须要操做系统层面的路由配置。
  4. macvlan:macvlan容许你分配一个mac地址给容器,让它像一台物理设备同样加入你的网络中。Docker daemon经过mac地址将请求路由给容器,适用于那些但愿直接连到物理网络的遗留应用。
  5. none:禁用全部网络。通常与一个自定义的网络驱动一块儿使用。none不能用于Swarm服务。
  6. 其它第三方网络插件:可从Docker Hub或其它第三方供应商获取安装。

总之,bridge适用于在同一台宿主机运行多个容器的场景;host适用于不该与宿主机进行网络隔离的场景;overlay适用于运行在不一样宿主机上的容器间通讯,或多个应用经过Swarm服务来共同协做的场景;macvlan适用于从虚拟机迁移配置或但愿容器做为物理机同样使用网络的场景。spa

5. 总结

本文对Docker所管理的几个基本对象——镜像、容器、数据卷、网络作了简单介绍,这是认识或学习Docker的基础,在后续实践操做过程当中,将会对各部分进行更详细的使用说明,欢迎持续关注。


个人我的博客地址:http://blog.jboost.cn
个人微信公众号:jboost-ksxy (一个不仅有技术干货的公众号,欢迎关注,及时获取更新内容)
———————————————————————————————————————————————————————————————
微信公众号操作系统

 

 

原文出处:https://www.cnblogs.com/spec-dog/p/11188629.html

相关文章
相关标签/搜索