使用Ansible安装Docker CE 17.03
2017-04-22
通过前面对Ansible的学习,我们已经对Ansible的Playbook和Role有了初步的认识,接下来我们将在实践中慢慢把Ansible引入到我们的配置管理工作中来。 本篇是在我们的测试环境中使用Ansible安装Docker的记录。
目录结构 #
我们创建了一个名称为docker
的Ansible role:
1.
2
3├── inventories
4│ ├── dev
5│ │ ├── group_vars
6│ │ │ └── all.yml
7│ │ ├── host_vars
8│ │ │ ├── node1.yml
9│ │ │ ├── node2.yml
10│ │ │ └── node3.yml
11│ │ └── hosts
12│ └── staging
13├── roles
14│ ├── common
15│ │ ├── defaults
16│ │ │ └── main.yml
17│ │ └── tasks
18│ │ └── main.yml
19│ ├── docker
20│ ├── defaults
21│ │ └── main.yml
22│ ├── handlers
23│ │ └── main.yml
24│ ├── tasks
25│ │ └── main.yml
26│ └── templates
27│ └── daemon.json.j2
28└── deploy-docker.yml
defaults/main.yml
主要用来放一些变量的默认值。
1{% raw %}
2# yum list docker-ce.x86_64 --showduplicates |sort -r
3docker_version: 17.03.1.ce-1.el7.centos
4docker_config_dir: /etc/docker
5dockerd_option_graph: /var/lib/docker
6{% endraw %}
cat handlers/main.yml
:
1---
2- name: restart docker
3 systemd:
4 name: docker
5 state: restarted
6 enabled: true
tasks/main.yml
是按照Docker官方文档Get Docker for CentOS的安装步骤编排的task,
cat tasks/main.yml
:
1{% raw %}
2---
3
4- name: ensure config directory
5 file:
6 path: "{{ docker_config_dir }}"
7 state: directory
8
9- name: ensure required packages
10 yum:
11 name: "{{ item }}"
12 state: present
13 with_items:
14 - yum-utils
15 - device-mapper-persistent-data
16 - lvm2
17
18- name: add docker ce repo
19 shell: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
20 args:
21 creates: /etc/yum.repos.d/docker-ce.repo
22 register: docker_yum_repo
23
24- name: make yum cache fast
25 shell: yum makecache fast
26 when: docker_yum_repo.changed
27
28- name: install docker ce
29 yum:
30 name: "docker-ce-{{ docker_version }}"
31 state: present
32 notify: restart docker
33
34- name: copy dockerd daemon.json
35 template:
36 src: daemon.json.j2
37 dest: /etc/docker/daemon.json
38 notify: restart docker
39
40
41{% endraw %}
运行playbook #
deploy-docker.yml
这个playbook十分简单,直接依赖docker
这个role即可:
1---
2- hosts: docker
3 become: yes
4 roles:
5 - role: docker
hosts: docker-servers
,我们在inventories/dev/hosts中配置了docker-servers
,当前总共有3台机器。
1[docker]
2node1
3node2
4node3
1ansible-playbook -i inventories/dev/hosts deploy-docker.yml
一下下就在这4台机器上装上了docker,已经初步体会到ansible的能力了O(∩_∩)O~