使用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守护进程” 。
而且……你很好走;)