使用Ansible安装Docker

sme*_*eeb 5 ansible docker ubuntu-14.04

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

我的Ansible项目:

myansible01.example.com:/opt/ansible/
    site.yml
    allservers.yml
    roles/
        common/
            tasks/
                main.yml
Run Code Online (Sandbox Code Playgroud)

在哪里site.yml:

---
# file: site.yml
- include: allservers.yml
Run Code Online (Sandbox Code Playgroud)

在哪里allservers.yml:

---
# file: allservers.yml
- hosts: all
  user: {{ privileged_user }}
  gather_facts: false
  roles:
  - common
Run Code Online (Sandbox Code Playgroud)

在哪里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
Run Code Online (Sandbox Code Playgroud)

最后,我/etc/ansible/hosts:

[allservers]
server01.example.com
server02.example.com
server03.example.com
...etc.
server49.example.com
server50.example.com
Run Code Online (Sandbox Code Playgroud)

这里有几个问题:

  • 我如何实际运行这个以便Ansible在所有50台服务器上安装Docker?像(从项目根目录)ansible-playbook site.yml -f 10
  • 如何"注入" privileged_user上述命令?
  • 为什么第一个任务是" 添加docker apt keys "?根据apt_key文档,我们apt_key从Ubuntu repos 获取一个,但那个长密钥来自哪里?这在安装Docker中扮演什么角色(我问,因为如果你去Docker Ubuntu安装页面,它根本没有提到这些apt_keys)?
  • 还有什么我需要做的正确的Docker安装吗?

tch*_*hap 7

以更合乎逻辑的顺序:

为什么apt-key

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

(来源:apt-key手册页)

如果你没有先添加repo的密钥,apt将无法获取软件包,并会因"W:GPG错误:...而无法验证以下签名,因为公钥不是可用:NO_PUBKEY任何键号".所以这基本上是为了让你可以获得包并安装它.

docker Ubuntu安装页面中,在注释的apt-key3点有一个明确的提及:

curl -sSL https://get.docker.com/gpg | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

变量

注入{{ privileged_user }}在你的配置:你会通过定义使用全局变量privileged_user<INVENTORY_FILE_LOCATION>/group_vars/all这样的:

---
# Your user
privileged_user: "root"
Run Code Online (Sandbox Code Playgroud)

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

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

(有关详细信息,请参阅此处)

运行剧本

然后,要运行您的剧本,请执行以下操作:

ansible-playbook -l server49.example.com allservers.yml -v 
Run Code Online (Sandbox Code Playgroud)

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

-v是,如果你想有一个详细的输出(或-vv,-vvv...)

编辑:启动docker守护程序

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

- name: Start Docker
  service: name=docker state=restarted
Run Code Online (Sandbox Code Playgroud)

根据发行版的不同,它可能以前是自动启动的,但根据我在此处的文档中所理解的,"一旦安装了Docker,您将需要启动Docker守护程序".


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