使用 Ansible 安装和构建 Docker

最近,花了很大的兴趣在组合使用 Ansible 和 Docker上。所以我想这可以很好的描述一些技巧。

开始,安装 Docker。如果你已经安装了 Ansible 。 Paul Durivage 已经编写了一个在 Ubuntu 出色的安装 Docker 的工具,即使在内部实现,它也比官方安装指令容易。

如果我们在 Ubuntu 13.10 上启动,并且只从开发分支上运行 Ansible,而不安装它。步骤如下:

apt-get update
apt-get install git python-yaml python-jinja2 python-pycurl
git clone https://github.com/ansible/ansible.git
cd ansible
source ./hacking/env-setup

从那里,我们可以使用 Paul 已经上传到 Galaxydocker_ubuntu 角色。因此我们可以使用一个简单的 CLI 调用下载它。

ansible-galaxy install angstwad.docker_ubuntu

并且通过在 /etc/ansible/hosts 创建一个 stub inventory 文件,写一个简单的 playbook 来使用它。

[local]
localhost

并且一个非常简单的 playbook 调用它,/tmp/docker.yml :

- hosts:local
  connection: local
  roles:
    - angstwad.docker_ubuntu</code>

现在我们将调用 Ansible 来启动 Docker:

 ansible-playbook /tmp/docker.yml
 docker pull ubuntu

现在,一切都变得非常简单。但是让我感兴趣的部分是如何使用 Ansible 用最简单的方式来构建 docker-files 。我们一直喜欢的一件事就是自动化的便携式描述。并且使得比开发 bash 更加有效率。

这里有一个在 Docker 文件中使用 Ansible 的简单例子,因此我们可以在 Ansible 中编写复杂的自动化。而不是编写一份 Docker 命令以及 shell 脚本的大杂烩。允许我们的应用部署就像把他们部署在经典的虚拟服务器上。

我们的 Dockerfile 像如下简单,在 /tmp/build/Dockerfile

FROM ubuntu
 MAINTAINER yourname
 RUN apt-get -y update
 RUN apt-get install -y python-yaml python-jinja2 git
 RUN git clone http://github.com/ansible/ansible.git /tmp/ansible
 WORKDIR /tmp/ansible
 ENV PATH /tmp/ansible/bin:/sbin:/usr/sbin:/usr/bin
 ENV ANSIBLE_LIBRARY /tmp/ansible/library
 ENV PYTHONPATH /tmp/ansible/lib:$PYTHON_PATH
 RUN git clone http://github.com/yourusername/yourrepo.git /tmp/example
 ADD inventory /etc/ansible/hosts
 WORKDIR /tmp/examples
 RUN ansible-playbook site.yml -c local
 EXPOSE 22 3000
 ENTRYPOINT [“/usr/bin/foo”]

与你的 Dockerfile 一起的一个文件名字为 inventory:

[local]
localhost

因此,像这样构建:

docker build .

现在读者可以非常容易的适应各种方法。但是最明显的事情或许是打开不同的端口 或者是运行不同的 entry point 。git 检出文件可能被忽略,并且被替换成 "ADD" 命令获得更加大的效率。

这里最妙的是哪部分? 是你的 playbook 能干任何事情,并且做任何重的事情。

下一步要做的更加具有逻辑的事情是用 Docker 分发你的容器,这个可以通过在 Ansbible 核心的 Docker 模块来实现。最好的经验,我们建议使用开发分支的 Ansible 预览版本,它支持最新版本的 Docker。

在这里看 Docker 模块的文件以及能力 See the Docker module documentation and capabilities here.

非常感谢 Cove Schneider 和 Pavel Antonov 开发的这个模块。

因此,结合 Ansbile 和 Docker ,只需要稍加挖掘,你能看到,你不仅能使用 Ansbile 管理你的容器构建进程,而且可以决定什么容器应该运行在哪里。

我希望这篇文章能帮助在探索文件的构建方面使事情更加简单。如果你想少一点手工组合,你也可以像这样组合 Packer 和 Docker。

注: Packer 是一个通过一个源文件跨平台构建同样镜像的工具

Related News

Deploying Highly Available OpenShift Origin Clusters | Ansible Me A Sandwich | Listen To Your Servers Talk | Fixing Heartbleed With Ansible | Orchestration, You Keep Using That Word

    原文作者:yexiaobai
    原文地址: https://segmentfault.com/a/1190000000587729
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞