【Docker】容器技术黑马Docker(一)——了解容器技术,了解Docker
一、前言 说到容器,小编最先接触的容器还是tomcat这些web容器,感觉容器就是把应用程序装进去,应用程序在容器中运行,我们可以通过访问容器暴露的端口来访问容器中的应用程序。 再说到容器技术,这个就厉害了。 这里小编就重点介绍一下容器技术的发展以及容器技术的黑马Docker。二、容器技术发展 小编觉得这张图非常棒,涵盖了容器技术的演变。 容器技术最早可以追
一、前言
说到容器,小编最先接触的容器还是tomcat这些web容器,感觉容器就是把应用程序装进去,应用程序在容器中运行,我们可以通过访问容器暴露的端口来访问容器中的应用程序。
再说到容器技术,这个就厉害了。 这里小编就重点介绍一下容器技术的发展以及容器技术的黑马Docker。
二、容器技术发展
小编觉得这张图非常棒,涵盖了容器技术的演变。
容器技术最早可以追溯到1979年UNIX系统中的chroot,最初是为了方便切换root目录,为每个进程提供了文件系统资源的隔离,这也是OS虚拟化思想的起源。
2000年,BSD吸收并改进了chroot技术,发布了FreeBSD Jails。FreeBSD Jails除文件系统隔离,还添加了用户和网络资源等的隔离,每个Jail还能分配一个独立IP,进行一些相对独立的软件安装和配置。
2001年,Linux发布了Linux Vserver,Linux VServer依旧是延续了Jails的思想,在一个操作系统上隔离文件系统、CPU时间、网络地址和内存等资源,每一个分区都被称为一个 security context,内部的虚拟化系统被称为VPS。
2004年原SUN公司发布了Solaris Containers,Solaris Containers作为Solaris 10中的特性发布的,包含了系统资源控制和zones提供的二进制隔离,Zones 作为在操作系统实例内一个完全隔离的虚拟服务器存在。
2005 年SWsoft公司发布了OpenVZ,OpenVZ和Solaris Containers非常类似,通过打了补丁的 Linux 内核来提供虚拟化、隔离、资源管理和检查点。OpenVZ 标志着内核级别的虚拟化真正成为主流,之后不断有相关的技术被加入内核。
2006 年Google 发布了 Process Containers,Process Container 记录和隔离每个进程的资源使用(包括CPU、内存、硬盘I/O、网络等),后改名为cgroups(Control Groups),并在2007年被加入Linux内核2.6.24版本中。
2008年出现了第一个比较完善的LXC容器技术,基于已经被加入内核的cgroups和Linux namespaces 实现。不需要打补丁,LXC就能运行在任意vanila内核的Linux上。
2011年,CloudFoundry发布了Warden,和LXC不同,Warden可以工作在任何操作系统上,作为守护进程运行,还提供了管理容器的API。
2013年Google公司建立了开源的容器技术栈lmctfy,Google开启这个项目是为了通过容器实现高性能,高资源利用率,同时接近零开销的虚拟化技术。目前 Kubernetes 中的监控工具 cAdvisor就起源于lmctfy项目,2015年Google将lmctfy的核心技术贡献给了 libcontainer。
2013年Docker诞生,Docker最早是dotCloud(Docker公司的前身,是一家PaaS公司)内部的项目,和Warden类似,Docker最初也用了LXC,后来才自己写了 libcontainer 替换了 LXC。和其它容器技术不同的是,Docker 围绕容器构建了一套完整的生态,包括容器镜像标准、容器Registry、REST API、CLI、容器集群管理工具Docker Swarm等;
2014年CoreOS创建了rkt,为了改进Docker在安全方面的缺陷,重写的一个容器引擎,相关容器工具产品包括:服务发现工具etcd和网络工具flannel等。
2016年微软公司发布基于Windows 的容器技术Hyper-V Container,Hyper-V Container原理和Linux下的容器技术类似,可以保证在某个容器里运行的进程与外界是隔离的,兼顾虚拟机的安全性和容器的轻量级。
三、说说Docker
近几年,做软件开发的,肯定听过Docker这种技术。Docker 在软件部署的时候是越来越方便了。
Docker是一个能够把开发的应用程序部署到容器的开源引擎。
3.1 Docker的应用场景
为什么要关注Docker或者容器技术呢?容器可以提供隔离性,可以为各种测试提供一个良好的沙盒环境。并且,容器本身就是具有“标准性”的特征,非常适合为服务创建构建块。
加速本地开发和构建流程,使其更加高效、更加轻量化。本地开发人员可以构建运行并分享Docker容器。容器可以在开发环境中构建,然后轻松的提交到测试环境,最终 进入生产环境。
能够让独立服务或者应用程序在不同的环境中,得到相同的运行结果。
用Docker创建隔离的环境来进行测试。eg :JenkinsCI
Docker可以让开发者在本机上构建一个复杂的程序或者架构来进行测试,而不是一开始就在生产环境部署、测试。
构建一个多用户的平台及服务基础设施。
为开发、测试提供一个轻量级的独立沙盒环境,或者将独立的沙盒环境用于技术教学,eg:unix shell 的使用。
提供软件及服务应用程序
高性能、超大规模的宿主机部署。
3.2 Docker 组件
客户端和服务端
镜像
Registry
容器
3.2.1 客户端和服务端
Docker是一个(C/S)架构的程序。Docker客户端只需向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有的工作并返回结果。Docker守护进程有时也称为Docker引擎。
3.2.2 镜像
镜像是构建Docker世界的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中“构建”部分。镜像是基于联合文件系统的一种层式的结构,由于一系列指令一步一步构建出来。
3.2.3 容器
我们刚刚提到,容器就是基于镜像启动起来的,容器中可以运行一个或者多个进程。镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段 。容器就是在镜像的基础上,加入了可写层,进行执行环境。
3.2.4 Registry
仓库,用于保存镜像。仓库分为两种共有和私有。Docker公司运营的公共仓库叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自助机的镜像。
用户也可以在Docker Hub上保存自己的私有镜像,甚至可以架设自己私有的仓库。
3.2.5 综上
四、小结
容器技术越来越流行,开发、测试、上线基本是操作一体,使用方便。这个技术还是了解一些比较好。
下一篇,向大家介绍《Docker入门》
更多推荐
所有评论(0)