Docker理论
Docker 是一个开源的应用容器引擎,主要利用 linux 内核 namespace 实现沙盒隔离,用cgroup 实现资源限制。
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。
Docker的基础是Linux的容器技术(LXC)。
而Docker,正是在容器的基础上进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。
VM是在硬件层面实现虚拟化
Docker几乎没有使用虚拟化的东西,直接复用了host主机的os,是内核级的虚拟化
docker优势:
(1)Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。
(2)其次,Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Docker容器。而且容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。
1.Docker包括三个基本概念
镜像(Image) 镜像就是一个只读的模板
容器(Container) 运行应用
仓库(Repository) 集中存放镜像文件的场所,分为公有仓库和私有仓库2种形式
2.网络管理
容器的四种网络模式
bridge 桥接模式、host 模式、container 模式和 none 模式
启动容器时可以使用 --net 参数指定,默认是桥接模式
Bridge
(1) 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备,假设为veth0 和 veth1。而 veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方
(2) 将 veth0 附加到docker0 网桥上。保证宿主机的网络报文可以发往 veth0
(3) 将 veth1 添加到容器所属的 namespace 下,并被改名为 eth0。
如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到容器网络的联通性;同时,也保证 容器单独使用 eth0,实现容器网络环境的隔离性。
缺点:和宿主机以外的网络通信比较困难
Host
可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口。
缺点:容器不再拥有隔离、独立的网络栈,会和宿主机发生资源抢夺
Container
(1) 查找其他容器(即需要被共享网络环境的容器)的网络
(2) 将新创建的容器(也是需要共享其他网络的容器)的namespace,使用其他容器的namespace。
可以用来更好的服务于容器间的通信。可以通过 localhost 来访问 namespace 下的其他容器,传输效率较高。虽然多个容器共享网络环境,但是多个容器形成的整体依然与宿主机以及其他容器形成网络隔离。另外,这种模式还节约了一定数量的网络资源。
缺点:它并没有改善容器与宿主机以外世界通信的情况。
None
不属于任何的网络环境。容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。
但是可以在没有网络配置的情况下,做其他无限多可能的网络定制开发。这也恰巧体现了 Docker 设计理念的开放。
3.安全问题
评估Docker的安全性时,主要考虑3个方面:
由内核中名字空间namespace和控制组cgroups提供的容器的内在安全
Docker程序本身的抗攻击性
加固内核安全性来影响容器的安全性:白名单,黑名单,selinux等
4.分布式,多点运行,高可用
Docker compose
Docker swarm
Docker mesos
本文出自 “11841085” 博客,转载请与作者联系!
原文地址:http://11851085.blog.51cto.com/11841085/1840386