写点什么

Docker:具备一致性的自动化软件部署

  • 2013-04-11
  • 本文字数:1489 字

    阅读完需:约 5 分钟

PaaS 供应商 dotCloud 开源了自有平台上的关键组件 Docker 。Docker 是一种增加了高级 API 的 LinuX Container(LXC)技术,提供了能够独立运行 Unix 进程的轻量级虚拟化解决方案。它提供了一种在安全、可重复的环境中自动部署软件的方式。

Docker 使用标准化容器的概念,能够容纳软件组件及其依赖关系——二进制文件、类库、配置文件、脚本、Virtualenv、jar 包、gem 包、原始码等——而且可以在任何支持 cgroups 的 64 位(针对 x64)Linux 内核上运行。这样的容器可以部署在笔记本、分布式基础架构、云端或是其他地方,其对环境的保留适用于广泛的用途:持续部署、Web 部署、数据库群集、SOA 等等,对此, Mike Kavis 在他的博客中这样描述

作为应用开发者,与我相关的用例是使用 Docker 以简化持续交付过程。在我职业生涯中工作过的每个地方,在那些从大型机到客户端再到云端的岁月里,让不同的环境保持同步并成功测试应用简直是个噩梦。无论我们的流程有多好或者有多糟,在“Dev-QA-Stage-Prod(开发 - 质量保证 - 过渡 - 生产)”的迁移过程中的各个阶段里,代码从来就没有处于相同的环境。最后的结果就是,发布的产品总是出现质量问题。“它在测试阶段是好的”是仅次于“支票已经寄出了”(译者注:the check is in the mail 为美国俚语,意指某件应该发生某事但实际情况却与之不符,最早是债务人用于缓和债权人的愤怒情绪的一种借口)的推脱借口。

在持续交付(CD)过程中,_ 整个环境 _ 随着代码一起在“Dev-QA-Stage-Prod”的不同阶段间迁移。配置问题,系统环境不同的问题,借口都将不复存在。在 CD 过程中,如果代码在产品阶段出问题,那么在测试阶段也一样有问题。使用 Docker 的过程中,我知道能够通过编写脚本实现 CD 流程的自动化。我还知道,因为无需处理所有的安装和配置问题,随着创建新环境的速度加快,产品进入市场的速度也得到了提升。

dotCloud 的 CEO Solomon Hykes在PyCon 上演示了Docker ,宣称它是可重复的轻量级虚拟化解决方案,因为“它在进程层面是独立的,而且拥有自己的文件系统”。其API 允许系统管理员对容器进行一系列操作:开始、停止、复制、等待、提交、关联标准流、列出文件系统变更等等。

Docker 的主要特性如下:

  • 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
  • 资源隔离:可以使用 cgroup 为每个进程容器分配不同的系统资源,例如 CPU 和内存。
  • 网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和 IP 地址。
  • 写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
  • 日志记录:Docker 将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
  • 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
  • 交互式 Shell:Docker 可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互 shell。

目前,Docker 已在 Ubuntu 12.04 和 12.10 测试过,但 dotCloud 表示它应该能够在内核版本号 2.6.24 或更高的 Linux 上运行。它还可以在 Windows 或 Mac OS X 中,使用 Vagrant VirtualBox 的虚拟机里安装。Docker 是用 Go 语言编写的,并使用了 Linux 的 cgroup namespacing 、支持写时复制特性的 AUFS 文件系统以及 LXC 脚本。

查看英文原文: Docker: Automated and Consistent Software Deployments


感谢康锦龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-04-11 10:3825095
用户头像

发布了 256 篇内容, 共 84.0 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

又来新需求了,急,Android怎么实现时间线效果(1),android开发面试自我介绍

android 程序员 移动开发

哭了!失业半年-2020没有风口我也要跳槽,凭本事吃饭有技术到哪都是人才

android 程序员 移动开发

启动速度与执行效率优化项目实战(四),android开发入门与实战网盘

android 程序员 移动开发

反向面试提问,安卓framework层

android 程序员 移动开发

另一种绕过-Android-P以上非公开API限制的办法,安卓多线程面试题

android 程序员 移动开发

在线二进制转文本工具

入门小站

工具

史上最全Android性能优化总结,经典收藏,一口气拿了9家公司的offer

android 程序员 移动开发

只有这些东西?不,学习Android开发只要这些东西,想转行当程序员的必看

android 程序员 移动开发

[ CloudWeGo 微服务实践 - 05 ] 服务注册(2)

baiyutang

golang 微服务 11月日更

四张图让你玩转Tomcat系统架构!!!,移动应用开发课程设计报告

android 程序员 移动开发

回眸重探锁机制,跨平台移动开发的特点

android 程序员 移动开发

国内大厂在移动端跨平台的框架接入分析,2021年一起努力应对互联网寒冬吧

android 程序员 移动开发

又来新需求了,急,Android怎么实现时间线效果,成体系化的神级Android进阶笔记

android 程序员 移动开发

双非大三,无实习经历,如何以 hard 模式逆袭字节跳动,androidframework开发书籍

android 程序员 移动开发

反思一次羞愧的阿里面试经历,致Android开发者

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(四),flutter开源项目商业化

android 程序员 移动开发

四面阿里,因为最后一个问题与offer失之交臂,android驱动开发

android 程序员 移动开发

linux之我常用的系统重要文件备份命令

入门小站

Linux

反思|Android 事件拦截机制的设计与实现,android串口工具apk

android 程序员 移动开发

只需四点,让你的面试百试百过!,android移动应用基础教程

android 程序员 移动开发

四张图让你玩转Tomcat系统架构!!!(1),android音频面试题

android 程序员 移动开发

可怕!RxHttp2,安卓开发基础

android 程序员 移动开发

可能一眼看不懂的几行Kotlin代码,程序员面试防坑宝典

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(三)(1),面试Android岗

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(一),一线互联网公司面经总结

android 程序员 移动开发

四月字节客户端面经,七月内推请找我,一文带你搞懂Android多线程Handler

android 程序员 移动开发

参考微信模块化通信具体实现,android开发从入门到精通pdf下载

android 程序员 移动开发

双非本,3年时间从外包到阿里P6(Android岗,移动终端软件开发颜色演示

android 程序员 移动开发

史上最详Android版kotlin协程入门进阶实战(三),4面字节跳动拿到Offer

android 程序员 移动开发

听我慢慢道来Android-面试中的细节,三年老Android经验面经

android 程序员 移动开发

因为不了解Android事件分发机制,居然被实习生嘲笑了,天呐

android 程序员 移动开发

Docker:具备一致性的自动化软件部署_Linux_Abel Avram_InfoQ精选文章