当前位置: 首页 > 科技观察

Docker,云时代的程序交付方式,你喜欢吗?

时间:2023-03-17 23:52:58 科技观察

Docker是一个重新定义程序开发、测试、交付和部署过程的开放平台。Docker也是容器技术的一种。它运行在Linux主机上,每个运行的容器都是相互隔离的。也称为轻量级虚拟技术或容器虚拟技术。而且有点类似于Java的compileonceandruneverywhere,而Docker可以叫做buildonceandrunon各种平台,包括本地服务器和云主机(Buildonce,runanywhere)。容器就是容器,我们的代码就装在容器里;Docker是一个搬运工,帮你把应用运输到世界各地,而且速度超快。其实Docker的出现,离不开Linux内核提供的诸多功能。甚至可以说,Docker在技术上并没有什么特别重大的创新,它使用的是非常成熟的Linux技术。或者LinuxKernel2.6的时候会有。说Docker是“站在巨人的肩膀上”一点都不为过一、Docker站在巨人的肩膀上Linux我们先来了解一下Docker主要使用的Linux技术。1、容器技术容器(Container)有时也被称为操作系统级虚拟化,以区别于传统的Hypervisor虚拟化技术。它不模拟硬件,而是作为一个正常的进程运行在宿主机的内核上。容器中运行的一般是简单版的Linux系统,有root用户权限、init系统(LXC容器的话)、进程id、用户id和网络属性。2.LXC这也是Linux下广泛使用的容器方案。基本上我们可以认为Linux容器=cgroups(资源控制)+命名空间(容器隔离)。LXC非常成熟,功能强大,但并不好用。比如不方便在多机间移动,不方便创建管理,不能重复,不方便共享等等,相对于开发者来说,只是系统管理员的玩具。Docker的出现很好的解决了这些问题,将容器技术的使用成本降低到了平民价格。3.namespaces这是一种用来为容器提供进程隔离的技术。每个容器都有自己的命名空间,如pid/net/ipc/mnt/uts,并为容器提供不同的主机名。命名空间可以保证不同容器之间不会相互影响,每个容器就像一个独立运行的操作系统。4.cgroupscgroups是Google贡献的一个项目。主要用于分配、限制、审计和管理共享资源。例如,它可以为每个容器分配CPU、内存和blkio使用配额。Cgroup使容器能够在宿主机上很好地相处,公平地分配资源并消除资源滥用的潜在风险。5)联合文件系统联合文件系统是一个分层的轻量级、高性能的文件系统。Docker之所以有如此大的吸引力,很大程度上是因为它在镜像管理上的创新。联合文件系统是构建Docker镜像的基础。AUFS(AnotherUnionFS)是一个分层的基于写时复制的文件系统,支持UnionMount,就是将不同文件夹结构的镜像层叠加挂载,使它们看起来像一个文件系统。容器技术实现方案可以用下图简单描述一下。2、Docker能做什么?Docker可以应用于各种场景,比如公司内部的开发测试,或者作为公有或私有的PaaS平台。现在PaaS平台的发展已经很成熟了,这里我们只列举一些在开发中使用Docker技术可能给我们带来的好处。1、开发过程中搭建开发环境变得容易。简单包括几个方面:快速:只要dockerrun就可以共享:通过Dockerfile或Registry自动化:所有编码的东西都可以自动化和统一:每个人的开发环境都完全一样。我们想基于Nginx/PHP、MySQL和Redis进行开发。我们可以创建3个Docker镜像并将它们保存在公司的私有Registry中。每个开发者都需要执行dockerrunredis来尽情享受。独有的Redis服务可用,这三个容器在磁盘空间占用和运行性能上都比虚拟机好很多。2、解决测试中的环境搭建问题:有时候搭建测试环境是一件费时费力的工作,Docker可以让这一切变得简单。如果你的测试比较简单,甚至可以直接从开发构建的镜像开始。排除环境不一致导致的问题:“在我的机器上运行的很好,在你的机器上怎么就不行?”,我想有一半以上的程序员都说过类似的话。如果统计一下造成这个问题的原因,我觉得排在第一位的应该是“环境不一致”,包括操作系统和软件的版本、环境变量、文件路径等。有了Docker你就不会不必再担心这个了。因为你交付的不仅仅是你的代码、配置文件和数据库定义,还有你的应用程序运行的环境:OS加上各种中间件、类库+你的应用程序。3.在部署和运维方面(1)基于容器的部署和自动化Docker定义了一种程序重新打包的方法:Docker容器+用户应用=部署单元(组件)。Docker可以看作是一个用代码编写的国际化容器,它可以将任何应用程序和相关的依赖包打包成一个轻量级、可移植(Portable)、自包含的容器。过去,部署代码是代码级别的。使用Docker,可以在容器级别进行部署。这样做最大的好处就是开发者本地测试、CI服务器测试、测试人员测试、生产环境都可以运行同一个Docker镜像。(2)水平扩展快Docker容器的启动速度非常快,瞬间可以启动大量容器,非常适合业务高峰期的水平扩展。这比传统上启动EC2实例或物理机要快得多。3、Docker与云计算技术天生结合当然,由于Docker具有良好的可移植性,其更强大的地方在于与云环境结合使用。Docker容器是可移植的或跨平台的。未来应用部署可能会在本地打包(打成Docker镜像),然后发送到云端运行。至于是AWS还是GCE,这个都不是问题,Docker都可以跑在上面。这不仅在一定程度上解决了供应商锁定问题,也使得不同云服务提供商之间的迁移变得容易。这将非常方便,尤其是在以后使用多云(multi-cloud)环境的时候。