让Docker无处不在

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

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

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

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

容器不等于机器

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

我们先来看一下 github 上的 Dockerfile。

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

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

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

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

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

 
 
  1. 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/ 。

Docker 乐高积木

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

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

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

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

未完待续。

译文来源:http://www.dockboard.org/dockerize-all-the-things/

文章题目:让Docker无处不在
URL链接:http://www.shufengxianlan.com/qtweb/news30/375830.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联