使用Ansible来安装Docker

前一段时间,我问了一个关于Ansible和Docker的问题,并得到了这个很好的答案 。 我现在试图理解,答案好一点。 从本质上讲,我有一堆Ubuntu 14.04虚拟机,我希望Ansible在所有虚拟机上安装/维护Docker。

我的Ansible项目:

myansible01.example.com:/opt/ansible/ site.yml allservers.yml roles/ common/ tasks/ main.yml 

其中site.yml是:

 --- # file: site.yml - include: allservers.yml 

allservers.yml是:

 --- # file: allservers.yml - hosts: all user: {{ privileged_user }} gather_facts: false roles: - common 

而其中roles/common/tasks/main.yml是:

 --- # file: roles/common/tasks/main.yml - name: Add docker apt keys apt_key: keyserver=keyserver.ubuntu.com id=36A1D7869245C8950F966E92D8576A8BA88D21E9 - name: Update apt apt_repository: repo='deb https://get.docker.com docker main' state=present - name: Install Docker apt: pkg=lxc-docker update_cache=yes 

最后,我的/etc/ansible/hosts

 [allservers] server01.example.com server02.example.com server03.example.com ...etc. server49.example.com server50.example.com 

这里有几个问题:

  • 我如何真正运行这个Ansible在所有50台服务器上安装Docker? 像(从项目根) ansible-playbook site.yml -f 10
  • 如何将“ privileged_user ”注入到上述命令中?
  • 为什么第一个任务“ 添加docker apt keys ”是必要的? 根据apt_key文档 ,我们从Ubuntu的apt_key获取apt_key ,但是这个长键从哪里来? 这在安装Docker中扮演了什么angular色(我问,因为如果你去Docker Ubuntu安装页面,它根本没有提到这些apt_keys )?
  • 还有什么我需要做一个适当的Docker安装?

按照更合理的顺序:

为什么apt-key

apt-key用于pipe理apt用于validation包(如docker )所使用的密钥列表。 使用这些密钥进行身份validation的软件包将被视为受信任。 当您添加一个更新/更好/最新版本的软件包所在的版本库时,它非常有用。

(来源:apt-key的手册页)

如果你先不添加回购的密钥,那么apt将无法获得包装,并且将以“W:GPG错误:…哭泣”。以下签名无法validation,因为公钥是不可用:NO_PUBKEY任何密钥号码“ 。 所以这基本上是这样的,你可以得到的包和安装它。

在Docker的Ubuntu安装页面中,在注释中的第3点清楚地提到了apt-key

 curl -sSL https://get.docker.com/gpg | sudo apt-key add - 

variables

要在您的configuration中注入{{ privileged_user }} ,您可以通过在<INVENTORY_FILE_LOCATION>/group_vars/all定义privileged_user来使用全局variables:

 --- # Your user privileged_user: "root" 

如果这个group_vars/all文件不存在,请创build它。

注意:默认的清单文件位置是/etc/ansible/hosts ,但是Mac OS X上的/usr/local/etc/ansible/hosts

( 在这里也可以看到更多信息)

运行一个剧本

然后,要运行你的剧本,做:

 ansible-playbook -l server49.example.com allservers.yml -v 

-l是,如果你想特别限制到一个服务器,但你可以省略它

-v是如果你想要一个详细的输出(或-vv-vvv …)

编辑:启动docker守护进程

如果你想确认docker守护进程是在那之后启动的,那么我build议重新启动它:

 - name: Start Docker service: name=docker state=restarted 

根据分布情况,它可能以前是自动启动的,但是从我在文档中理解的内容来看, “一旦安装了Docker,您将需要启动Docker守护进程”


而且……你很好走;)