Docker 化一切 已翻译 100%

翟志军 投递于 2014/04/22 15:22 (共 4 段, 翻译完成于 04-22)
阅读 4904
收藏 70
7
加载中

我已许诺会持续的写些关于docker的文章。由于我是唯一一个在 CØ 中具有本地linux内核的幸运者, 因此我将写一些关于怎样在本地桌面上管理所有项目的文章。

为什么是docker,而不是纯LXC?

几年前,当我还在 Adcloud 时,就开始使用 LXC 来构建所有的微型服务。鉴于我在台式机上使用 Archlinux系统并且效果还不错,但是我们的生产环境是 Ubuntu系统,并且可能会用 chef 脚本来创建容器,而我仍然把这些容器当做机器来维护。它们有自己的 DNS 域名、 IP 地址、 SSH 服务,和所有磁盘文件绑定。因此每当我开始一个新项目时,首先得通过 SSH 登录到容器然后再开始工作。事实上我一点也不喜欢 Chef ,所以在离开 Adcloud 后我就放弃了 Chef 并开始使用 Babushka 。虽然后者能让我以最简单的方式来部署一个单机环境,但是创建新容器十分缓慢,当所有容器启动之后占据了 SSD 上的大量磁盘空间,而且我还需要手动去配置多项服务。

所以当我第一次启动 Docker 容器的时候,它的速度之快真是让人惊讶,更棒的是分层的文件系统可以减少磁盘的使用。

漠天
漠天
翻译于 2014/04/22 16:57
2

容器不等于机器

自从有了 Docker 容器以后,你就不需要考虑机器的概念了。它们只是在不同的内核命名空间中的进程,你希望它们可以保持精简和干净。它们也需要能够运行在不同的环境中,所以我放弃了在容器中使用 SSH 。那我又是如何来创建我的项目呢?首先我创建了一系列容器,在上面安装了我项目中需要安装但不应该安装在本地的工具。

在盒子里使用Go

我们先来看一下 github 上的 Dockerfile

使用下面的别名在容器中启动 go,随后把容器移除:

alias go="docker run --rm -t -i teemow/go"

你甚至可以使用不同的标签来运行不同版本的 go( go:1.1、go:1.2 等)。不过要让它它真正工作,还需要更多操作。你可以把你当前的目录绑定挂载到容器中,来做类似go get这样的事情。

alias go="docker run --rm -t -i -v \$(pwd):\$(pwd) -w \$(pwd) teemow/go"

如果你有一个私有 git 库的话,你甚至可以把你当前的 ssh 代理挂载到容器中:

alias go="AGENT=\$(ls -1 --sort t /tmp/ssh-*/agent.* | head -1) && docker run --rm -t -i -v \$AGENT:\$AGENT -e SSH_AUTH_SOCK=\$AGENT -v \$(pwd):\$(pwd) -w \$(pwd) teemow/go"

类似 GOPATH 这样的环境变量也可以传入到容器中。

你可以完全用你自己的工具来完成这些事情,这样你的主机会很干净。别忘了给你的不同版本的镜像打上标签,否则你很难跳回到之前的项目中。也许你可以给类似 rbenv ( dockerenv )的项目做记号。我已经创建了一系列包含工具的镜像 ,比如 npm 、 grunt 、 coffee-script 、 aws-cli 和 tugboat 等等。

专家提醒: 不要过度使用别名,建议尽可能使用小脚本,比如 /usr/local/bin/ 。

漠天
漠天
翻译于 2014/04/22 17:04
2

Docker 乐高积木

如果你想要在不只一个容器上运行或者测试你的项目,那么就使用上面提到的别名来构建你的项目。你不能在同一个容器中运行你的Web服务,postgres和redis。每项服务应该有自己的容器,现在你需要做的就是把所有的“砖块”组合起来。

Docker有一个特性称之为“链接”,它可以帮助你做正在做的事情。一个被链接的容器通过环境变量导入本身。所以其他的容器能发现Ip地址和链接容器的接口。Heroku 使用了一种类似的方式来添加插件的信息

漠天
漠天
翻译于 2014/04/22 16:33
2

但是你能使用fig使这一切更容易。只需要添加fig.yml文件到你的项目中并运行fig up去开启整个环境。本地目录会被绑定到一个容器上,如果文件被修改,文件监视器可自动重启你的服务。Mac/Vagrant用户对这个比较熟悉。我已在piratesinn angellist list添加了fig.yml文件。

事实上,甚至连 fig 自身也是运行在本机上的一个容器中。但是你需要把docker socket 服务绑定到 fig的容器中,这样它才可以启动其他容器。

未完待续。

漠天
漠天
翻译于 2014/04/22 16:43
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(10)

Feng_Yu
Feng_Yu

引用来自“卧龙小”的评论

求教,docker 解决了什么问题?是否是应用移植的问题?可以移植到任何的linux 平台上?能否科普下。

引用来自“bhzhu203”的评论

目前docker只支持64位系统。docker的应用可以放在任何64位的Linux发行版上.甚至windows。

引用来自“Feng_Yu”的评论

docker基于LXC技术,LXC可以跑在windows?

引用来自“bhzhu203”的评论

可以的 但是是基于qemu虚拟机 在win上运行主要是 为了兼容,不是运行性能
那不是真正的跑在windows上,只是在windows上虚拟一个linux虚拟机,在虚拟机里装docker而已。docker官方文档也是这么写的windows安装步骤。
bhzhu203
bhzhu203

引用来自“卧龙小”的评论

求教,docker 解决了什么问题?是否是应用移植的问题?可以移植到任何的linux 平台上?能否科普下。

引用来自“bhzhu203”的评论

目前docker只支持64位系统。docker的应用可以放在任何64位的Linux发行版上.甚至windows。

引用来自“Feng_Yu”的评论

docker基于LXC技术,LXC可以跑在windows?
可以的 但是是基于qemu虚拟机 在win上运行主要是 为了兼容,不是运行性能
Feng_Yu
Feng_Yu

引用来自“卧龙小”的评论

求教,docker 解决了什么问题?是否是应用移植的问题?可以移植到任何的linux 平台上?能否科普下。

引用来自“bhzhu203”的评论

目前docker只支持64位系统。docker的应用可以放在任何64位的Linux发行版上.甚至windows。
docker基于LXC技术,LXC可以跑在windows?
AnthonyYau
AnthonyYau

沙箱管理...有时间学习下

bhzhu203
bhzhu203

引用来自“卧龙小”的评论

求教,docker 解决了什么问题?是否是应用移植的问题?可以移植到任何的linux 平台上?能否科普下。

目前docker只支持64位系统。docker的应用可以放在任何64位的Linux发行版上.甚至windows。
翟志军
翟志军

引用来自“卧龙小”的评论

求教,docker 解决了什么问题?是否是应用移植的问题?可以移植到任何的linux 平台上?能否科普下。

Docker官方文档有一篇文档:理解Docker。我目前还在翻译中。~
卧龙小
卧龙小

求教,docker 解决了什么问题?是否是应用移植的问题?可以移植到任何的linux 平台上?能否科普下。

翟志军
翟志军

我才发现,这英文的,已经有人翻译了~~~

http://www.dockboard.org/dockerize-all-the-things/

威廉亨利
威廉亨利

这东西有REDHAT的大力支持,怪不得最近曝光率这么高

第三方支付接口
第三方支付接口

我上次试了一下,不支持32位机子呀,悲剧

返回顶部
顶部