1.1.1 docker的历史和发展
build, ship and run流程,统一开发,测试,部署的环境与流程,极大的减少了运维的成本。
利益于容器技术,分层镜像,docker在磁盘占用,内存使用,性能,效率相对于传统虚拟机有非常明显的提高。
开源,采用apache2.0协议。
1.1.2 docker的架构介绍
docker相对传统的虚拟机去掉了hypervisor层的开销,虚拟化技术基于Cgroup,Namespace技术,处理逻辑与内核深度融合,在许多方面性能接近物理机。
docker通过libcontainer与内核交互,libcontainer才是容器真正意义上的引擎。通过clone系统调用创建容器,通过pivot_root系统调用进入容器,通过cgroupfs管控资源。docker本身处理更上层的业务。
docker<-libcontainer
docker另一个优势是层级镜像复用,大大提高了磁盘,内存利用率。
联合挂载:union mount,镜像存储需要支持union mount的文件系统,如AUFS,Overlay。
1.2 功能与组件
docker 客户端
docker daemon
docker容器
docker 镜像
docker registry
1.2.1 docker 客户端
Docker是C/S架构,docker将客户端与服务器统一在同一个二进制文件中。但windows与MAC只提供客户端。
客户端:docker command 和 RESTful API
1.2.2 docker daemon
docker daemon也叫docker engine,是核心引擎。
内部机制复杂,涉及多个模块的实现和交互。
1.2.3 docker容器
核心。Docker 通过 Libcontainer实现对容器生命周期的管理,信息的设置和查询,以及监控,通信等功能。
容器以镜像为基础,同时又为镜像提供了一个标准的和隔离的执行环境。
容器是软件界的‘集装箱’
1.2.4 Docker镜像
镜像是容器的静态体现。docker镜像比传统ISO镜像要轻量许多,是一个可定制的rootfs。
利用unionfs,docker镜像分层并可复用,极大的减小了磁盘与内存开销。
镜像通过dockerfile来创建,也可以使用docker commit手动生成。
1.2.5 Registry
registry是镜像仓库。官方的registry是Docker Hub。
1.3 安装和使用
1.3.1 Docker的安装
内核:3.10以上,开启Cgroup,Namespace。
检测脚本:
最好是使用包管理器安装:centos要安装rhel扩展库。[root@220 ~]# yum install docker -y
1.3.2 Docker的使用
官方教程:
docker --help
docker command --help
man docker command
1.4 概念澄清
1.4.1 Docker 与LXC
LXC有两个概念:LXC用户态工具,linux container
docker在cgroup与namespace的基础上,提供了一个更高层的控制工具。
特点:
跨主机部署 实现进程‘沙盒’,镜像将应用程序和其所依赖的文件,配置包括网络,存储,发行版打包,转移到任何docker机器上都可以运行。
以应用为中心 dockerfile机制大大简化和规范了应用的部署方法。
自动部署 docker提供了一套可以从源码自动构建镜像的工具。该工具可以灵活地使用make,maven,chef,puppet,salt,debain包,rpm,源码包等,将应用程序的依赖,构建工具和安装包进行打包,且不受当前机器配置影响。
版本管理 类似git,支持追踪镜像版本,检验版本更新,更新版本,回退版本。
组件重用 任何窗口都可以用作生成另一个组件的基础镜像。我感觉类似python中类的概念模型。
共享 镜像registry可以共享。
工具生态链 提供API自动化,很多工具能与docker集成,如PAAS部署工具dokku,deis,flymn。多节点编排工具Maestro,salt,mesos,openstack nova。管理面板docker-ui,openstack horizon,shipyard。配置管理工具chef,puppet。持续集成工具jenkins,strider,travis等。
1.4.2 Docker容器与虚拟机
容器与虚拟机互补。虚拟机是硬件资源划分的完美解决方案,容器是操作系统级别的虚拟化。
容器与主机共享操作系统内核。
根据需求选择容器还是虚拟机,完全隔离不考虑资源消耗使用虚拟机;隔离进程并运行大量进程使用容器。
阅读(1764) | 评论(0) | 转发(0) |