docker杂谈
在云技术时代, 开发由前端(如h5/js/css)和后端技术(如python/jsp/php)等两部分组成, 这其中存在哪些变化呢?
明显看到这个开发链中没有相关的底层架构技术, 是因为这些不重要吗? 当然不是.
主要得益于架构技术的迅速发展, 如今已经形成一套成型的接口, 对于开发者而言, 只需调用这些接口(如REST), 即可对数据进行各种处理(而自行搭建难度系数太大).
在架构服务的发展中, 其中一个最基本的就是虚拟技术的发展, 代表产品如vmware/xen/kvm等, 这些构建了如今互联网架构格局的基础设施.
在云浪潮中, 许多颠覆性的技术得到迅速发展并成熟, 如aws/google cloud/openstack/docker等.
本文将就其中的docker技术谈谈自己的感想.
docker字面意思是码头工人, 主要任务是处理各种集装箱(container).
docker是一种建立在lxc基础上的上层容器技术, 与xen/kvm等相比, 更像一个增强的chroot.
xen/kvm介绍
xen/kvm实现了真正意义上的虚拟化方案, 能够提供完全的物理隔离功能.
各个虚拟主机具有独立的内核和运行空间.
chroot
通常情况下, 程序运行时的根目录即是OS的根目录(‘/‘).
chroot是什么? 全称是change root, 能够改变程序运行时的根目录.
LXC是什么
LXC全称linux containers, 是一种封装linux内核容器功能的用户空间接口. LXC通过API和工具可以方便地构建和管理系统或应用程序容器.
LXC使用的linux内核功能有:
a. 内核命名空间(ipc, uts, mount, pid, network and user)
b. 安全访问技术Apparmor和selinux配置
c. 沙箱Seccomp策略
d. chroots技术(使用pivot_root)
e. 内核容量
f. CGroups(control group)
LXC容器可以被当作是chroot和那些完整虚拟机如xen/kvm的中间地带.
其目标是尽可能创建一个类似linux标准安装版无需独立内核的运行环境.
docker又是什么
你可以认为, docker是一个加强版的LXC.
docker是一个轻量级开源安全的应用容器引擎, 能够将应用程序及其依赖打包进行软件部署.
docker建立在aufs分层文件系统基础上, 能够运行在主机内核中并高效启动利用主机资源.
轻量级
运行在同一个主机上的容器共享相同的操作系统内核, 因而容器可以被迅速启动并高效利用系统内存. 在aufs分层文件系统基础上构建的应用镜像, 可以方便的分享文件,利用磁盘和镜像下载.
开放
docker容器基于开放标准, 很容易在linux/mac/windows等操作系统中运行.
安全
容器能够很好的隔离彼此间的应用程序, 并为应用程序添加一个额外保护层.
docker提供了内存/cpu等资源隔离, 并在沙盒中运行, 但是在安全性方面还不成熟.