使用Ansible安装Docker

时间:2015-09-22 10:07:57

标签: docker ubuntu-14.04 ansible

前段时间我问了一个关于Ansible和Docker的问题并收到了this excellent answer。我现在正试图更好地理解这个答案。基本上,我有一堆Ubuntu 14.04虚拟机,我希望Ansible能够在所有虚拟机上安装/维护Docker。

My 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 ”是必要的?根据{{​​3}},我们从Ubuntu repos中获取apt_key,但是这个长密钥来自哪里?这在安装Docker中扮演什么角色(我问,因为如果你转到apt_key docs它根本没有提到这些apt_keys
  • 我需要做些什么才能正确安装Docker?

1 个答案:

答案 0 :(得分:7)

按照更合乎逻辑的顺序:

为什么apt-key

apt-key用于管理apt用于对包进行身份验证的密钥列表(例如 docker )。使用这些密钥进行身份验证的软件包将被视为可信任。当您添加一个存储库,其中包含您想要的更新/更好/最新版本的软件包时,它非常有用。

(来源:apt-key手册页)

如果您没有先添加回购的密钥,apt将无法获得该套餐,并会因" W:GPG错误而哭泣:...以下签名无法验证,因为公钥不可用:NO_PUBKEY任何密钥编号" 。所以这基本上是为了让你可以获得包并安装它。

docker Ubuntu installation页面中,注释中的 3 处明确提到了apt-key

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

<强>变量

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

---
# Your user
privileged_user: "root"

如果此group_vars/all文件不存在,请创建它。

  

注意:默认的广告资源文件位置为/etc/ansible/hosts,但Mac OS X上为/usr/local/etc/ansible/hosts

(有关详细信息,请参阅here

运行剧本

然后,要运行您的剧本,请执行:

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

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

-v是您想要详细输出(或-vv-vvv ...)

编辑:启动docker守护程序

如果您想确保在此之后启动docker守护程序,我建议您重新启动它:

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

根据发行版的不同,它可能以前是自动启动的,但根据我在docs中的理解,&#34;安装Docker后,您将需要启动Docker守护程序&#34;

而且......你很高兴去;)