如何利用Linux容器实现可移植的应用部署

Docker是一种在Linux容器里运行应用的开源工具,一种轻量级的虚拟机。除了运行应用,Docker还提供了 一些工具,借助Docker Index或自己托管的Docker注册表对进行了集装箱化处理的应用进行分发,从而简化复 杂应用的部署过程。

我将在本文介绍如今在部署复杂系统时公司所面临的挑战,Docker怎样有效地解决这个问题,以及Docker 的其他用例。

部署的挑战

服务器应用的部署已经越来越复杂了。把几个Perl脚本拷贝到正确目录就完成服务器应用的安装,这种时 代已经一去不复返了。如今的软件有很多类型的需求:

对已安装软件和库的依赖(“Python版本高于2.6.3,使用Django 1.2”)

依赖于正在运行的服务(“需要一个MySQL 5.5数据库和一个RabbitMQ队列”)

依赖于特定的操作系统(“在64位的Ubuntu Linux 12.04上构建、测试”)

资源需求:

最小的可用内存(“需要1GB的可用内存”)

能绑定特定的端口(“绑定80和443端口”)

我们来看一个相对简单的应用的部署:Wordpress。Wordpress的安装通常要求:

Apache 2

PHP 5

MySQL

Wordpress源码

一个Wordpress MySQL数据库,配置Wordpress使用该数据库

Apache的配置:

加载PHP模块

支持URL重写和.htaccess文件

指向WordPress源码的DocumentRoot

在服务器上部署、运行这样一个系统,我们可能会遇到下面的问题和挑战:

隔离性:如果我们已经在这个服务器上部署了不同的网站,已有的网站只能在nginx上运行,而Wordpress 依赖于Apache,这时我们就会有麻烦:它们都监听80端口。同时运行两个网站是可以的,但需要调整配置(修 改监听端口),设置反向代理等。库级别也会出现类似的冲突,如果还要运行一个仍然依赖PHP4的老应用就会 出问题,因为Wordpress不再支持PHP4,同时运行PHP4和PHP5则非常困难。运行在同一个服务器上的应用没有 互相隔离(在文件系统级别和网络级别),所以它们可能会互相冲突。

安全性:Wordpress的安全记录并不是非常好。所以还是给它创建个沙箱,至少黑客入侵时不会影响其他运 行的应用。

升级、降级:升级应用一般会覆盖现有文件。升级过程中会发生什么?系统要关闭么?如果升级失败,或 者不对该怎么办?我们怎样快速回退到先前的版本?

快照、备份:一旦所有的内容都设置好,就给系统创建一个“快照”,以便能备份快照,甚至 能移到另一个服务器上再次启动,或者拷贝到多个服务器上以备不时之需。

重复性:系统出新版本之后,比较好的做法是先在测试基础设施上自动部署并测试,然后再发布到生产系 统。通常会利用诸如Chef、Puppet等工具在服务器上自动安装一堆包,等一切内容都就绪后,再在生产系统上 运行相同的部署脚本。这在百分之九十九的情况下都没有问题。但有百分之一的例外,在部署到测试环境和生 产环境之间的时间跨度里,你依赖的包在包仓库里有了更新,而新版本并不兼容。结果生产环境的设置和测试 环境不同,还有可能破坏生产系统。假如没有控制部署的每一个方面(例如托管自己的APT或YUM仓库),持续 在多个阶段(比如测试、预演、生产环境)重复搭建出完全相同的系统就很困难。

资源限制:如果我们的Wordpress耗费CPU资源,并占用了所有的CPU周期,导致其他应用无法做任何事情怎 么办?如果它用尽了全部可用的内存呢?或者疯狂写日志阻塞磁盘呢?要是能限制应用的可用资源,比如CPU 、内存和磁盘空间,就会非常方便。

易于安装:也许有Debian或CentOS包,抑或是能自动执行所有复杂步骤并安装Wordpress的Chef菜谱。但这 些菜谱很难稳定下来,因为它们需要考虑目标系统上可能的系统配置。很多情况下,这些菜谱只能在干净的系 统上运行。因此,你不太可能更换成自己的包或Chef菜谱。这样的话,安装就是个复杂的系统工程,而不是午 休期间就能搞定的事情。

易于移除:软件应该能轻松、干净地移除,不留痕迹。但部署应用通常要调整已有的配置文件、设置状态 (MySQL数据库的数据,日志),完全移除应用也变得不那么容易。

那我们应该如何解决这些问题呢?

虚拟机!

时间: 2024-11-08 18:54:30

如何利用Linux容器实现可移植的应用部署的相关文章

红帽凭借业内最广泛的解决方案发挥Linux容器的能力

红帽容器产品系列现在为开发人员.运行团队和应用管理人员提供了企业级选项, 包括从桌面到混合云等方方面面. (2016年7月20日,北京)世界领先的开源解决方案供应商红帽公司(纽交所代码:RHT)日前宣布推出IT行业最全面的企业级Linux容器解决方案.红帽的容器产品系列涵盖几乎每项应用交付需求,包括免费开发工具以及整合管理.平台即服务(PaaS)和容器即服务(CaaS)的综合容器平台.为了满足客户在现有IT投资和创新方面的现代化要求,红帽现在使客户能够通过更安全.可移植且一致的基于容器的解决方案

红帽进一步完善其企业级Linux容器解决方案

日前,红帽公司宣布推出全面的企业级Linux容器解决方案.红帽的容器产品系列涵盖几乎每项应用交付需求,包括免费开发工具以及整合管理.平台即服务(PaaS)和容器即服务(CaaS)的综合容器平台.为了满足客户在现有IT投资和创新方面的现代化要求,红帽现在使客户能够通过更安全.可移植且一致的基于容器的解决方案,并且支持关键的开放标准,例如开放容器计划(OCI)容器格式和Kubernetes编排,从而更好地利用容器化带来的全面好处. KeyBank DevOps总监John Rzeszotarski

监控 Linux 容器性能的命令行神器

监控 Linux 容器性能的命令行神器 ctop是一个新的基于命令行的工具,它可用于在容器层级监控进程.容器通过利用控制器组(cgroup)的资源管理功能,提供了操作系统层级的虚拟化环境.该工具从cgroup收集与内存.CPU.块输入输出的相关数据,以及拥有者.开机时间等元数据,并以人性化的格式呈现给用户,这样就可以快速对系统健康状况进行评估.基于所获得的数据,它可以尝试推测下层的容器技术.ctop也有助于在低内存环境中检测出谁在消耗大量的内存. 功能 ctop的一些功能如下: 收集CPU.内存

Linux容器运行时Docker开源

Linux容器运行时Docker开源 发表于2013-03-28 10:22| 次阅读| 来源CSDN| 0 条评论| 作者张红月 开源LinuxDocker 摘要:Docker是一个http://www.aliyun.com/zixun/aggregation/13423.html">云计算平台,它利用Linux的LXC.AUFU.Go语言.cgroup实现了资源的独立,可以很 轻松的实现文件.资源.网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离. Docker是一个功能强大的

Joyent扩展弹性容器基础设施,增加Linux容器原生支持

Joyent与Canonical建立合作伙伴关系,提供了认证和支持的Ubuntu镜像,并且针对Triton容器基础设施提供了在bare metal上本地运行的优化. 加利福尼亚州旧金山 - (Marketwired - 2015年6月18日) - Joyent Inc., 原生容器基础设施技术服务公司,今天宣布了借助Joyent Triton 弹性容器基础设施直接在bare metal上本地运行容器实例,而这会在本周的早些时候全面上市.Joyent 也宣布了和Canonical的合作伙伴关系,面

Docker —— 用于统一开发和部署的轻量级 Linux 容器 【已翻译100%】

使用Docker容器--轻量灵活的VM同类,来接管"依赖地狱".学习Docker是如何基于LXC技术,通过把应用包装在容器里来使应用具有移植性和独立性. 想象一下可以轻松地把应用和它的依赖打包,然后在其他的开发.测试和生产环境上平滑的运行.这就是开源Docker项目的目标.尽管它现在还没正式到生产阶段,最新的发布(本篇文章编写时是0.7.x)使得Docker实现这一伟大目标又近了一步. Docker容器试图解决"依赖地狱"问题.现代的应用通常从已存在的组件组合而来,

Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-deployment 英文原文:Docker: Lightweight Linux Containers for Consistent Development and Deployment 使用Docker容器--轻量灵活的VM同类,来接管"依赖地狱".学习Docker是如何基于LXC技术,

.NET程序在Linux容器中的演变

本文讲的是.NET程序在Linux容器中的演变[编者的话]Linux容器技术已被开发人员所熟知,现在.NET程序可以跑在Docker容器中,这为以Windows中心的开发人员带来了好处. [上海站|3天烧脑式微服务架构训练营]培训内容包括:DevOps.微服务.Spring Cloud.Eureka.Ribbon.Feign.Hystrix.Zuul.Spring Cloud Config.Spring Cloud Sleuth等. 本文将首先讨论镜像的构建时间和启动时间,接着会将一个简单的.N

浅谈Linux容器和镜像签名

从根本上说,几乎所有的主要软件,即使是开源软件,都是在基于镜像的容器技术出现之前设计的.这意味着把软件放到容器中相当于是一次平台移植.这也意味着一些程序可以很容易就迁移,而另一些就更困难. 我大约在三年半前开展基于镜像的容器相关工作.到目前为止,我已经容器化了大量应用.我了解到什么是现实情况,什么是迷信.今天,我想简要介绍一下 Linux 容器是如何设计的,以及谈谈镜像签名. Linux 容器是如何设计的 对于基于镜像的 Linux 容器,让大多数人感到困惑的是,它把操作系统分割成两个部分:内核