【问题标题】:Using Ansible to install Docker使用 Ansible 安装 Docker
【发布时间】:2020-08-31 23:46:19
【问题描述】:

前段时间我问了一个关于 Ansible 和 Docker 的问题,收到了this excellent answer。我现在正试图更好地理解这个答案。本质上,我有一堆 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 键”是必要的?根据apt_key docs,我们正在从Ubuntu repos 中获取apt_key,但是那个长密钥是从哪里来的呢?这在安装 Docker 中起什么作用(我问是因为如果你去Docker Ubuntu installation page 它根本没有提到这些apt_keys)?
  • 要正确安装 Docker,我还需要做什么?

【问题讨论】:

  • >为了正确安装 Docker,我还需要做什么? - 我会将普通用户添加到 Docker 组,这样他们就不必在 docker 命令中使用 sudo

标签: docker ubuntu-14.04 ansible


【解决方案1】:

按更合乎逻辑的顺序:

为什么是apt-key?

apt-key 用于管理apt 用来验证包的密钥列表(如docker)。已使用这些密钥进行身份验证的包将被视为受信任的。当您添加一个存储库时,它很有用,您想要的软件包的更新/更好/最新版本驻留在该存储库中。

(来源:apt-key 手册页)

如果不先添加repo的key,apt将无法获取包,会哭着"W: GPG error: ... 以下签名不能'无法验证,因为公钥不可用:NO_PUBKEY 无论密钥号”。所以这基本上是为了让你可以获取包并安装它。

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

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

变量

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

---
# 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 此处了解,“安装 Docker 后,您将需要启动Docker 守护进程”.


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

【讨论】:

  • 谢谢@tchap (+1) - 您能否确认我的site.yml、allservers.yml 和我的roles/common/tasks/main.yml 看起来正确(也就是说,它们看起来正确和 他们看起来没有遗漏任何重要的东西)?再次感谢!
  • 我想说site.yml 有点多余,因为它只包含allservers.yml,但是很好。您错过的一件事是通过在您的 apt_repository 命令中添加 update_cache: yes 来更新 apt。然后,根据你想用 docker 做什么,你可以设置 docker 守护进程选项,启动 docker,安装其他包,如 docker-compose 等......但这真的取决于你的用例
  • 再次感谢@tchap(再次+1)-最后一次跟进,我保证!我的印象是我的上述/当前设置将开始为我运行 Docker 引擎。例如,如果我在 Ubuntu VM 上手动安装 Docker,我可以发出docker --version,它会在输出中生成版本。如果您说需要执行 其他操作 才能真正启动 Docker 守护程序/引擎(顺便说一句,它们之间有区别吗?),请问您可以更新您的答案以显示随后启动它需要什么?再次感谢!!!
  • 可以或不可以,这取决于。无论如何,我建议重新启动它,它不会造成伤害。请参阅我的更新答案。
  • 感谢@tchap - 授予赏金!其实我不能奖励它 22 小时,所以坚持住!
猜你喜欢
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多