转自:https://www.cnblogs.com/jsonhc/p/7879028.html

环境三台centos7主机:

master:192.168.101.14,node1:192.168.101.15,node2:192.168.101.19,利用master节点为两个node节点安装docker以及docker-compose

首先在master上安装ansible,这里采用yum安装(epel中包含ansible,安装之前添加epel源)

ansible基于ssh密钥认证,于是使用master给两个node进行ssh认证:

# ssh-keygen -t rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.101.15
# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.101.19

给两个node节点配置hosts:

[root@docker ansible]# egrep -v "^#|^$" hosts
[container_nodes]
192.168.101.15
192.168.101.19

于是准备工作完成,开始编写playbook:

[root@docker ansible]# tree
.
├── ansible.cfg
├── hosts
├── roles
│   ├── docker
│   │   ├── files
│   │   ├── handlers
│   │   │   └── main.yaml
│   │   ├── meta
│   │   ├── tasks
│   │   │   └── main.yaml
│   │   ├── templates
│   │   │   └── daemon.json.j2
│   │   └── vars
│   │   └── main.yaml
│   └── docker-compose
│   ├── files
│   │   └── docker-compose-Linux-x86_64
│   ├── handlers
│   ├── meta
│   ├── tasks
│   │   └── main.yaml
│   ├── templates
│   └── vars
│   └── main.yaml
└── work_dir
├── install_docker-compose.retry
├── install_docker-compose.yaml
├── install_docker.retry
└── install_docker.yaml

将上面的树形目录进行分解,查看docker这个role的内容:

[root@docker docker]# tree
.
├── files 必要的一些需要的文件存放目录
├── handlers
│   └── main.yaml handler处理的动作
├── meta 元数据存放的一些依赖
├── tasks
│   └── main.yaml 主要执行的任务
├── templates
│   └── daemon.json.j2 一些配置文件的存放
└── vars
└── main.yaml 变量设置的存放目录

查看tasks/main.yaml:

[root@docker docker]# cat tasks/main.yaml
- name: install required packages
yum:
name: "{{ item }}" 需要进行安装的一些包名
state: present 安装的包的状态
with_items: 对应上面的item(可以循环操作)
- yum-utils
- device-mapper-persistent-data
- lvm2 - name: add docker repo to /etc/yum.repos.d
shell: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
register: result 将shell的操作结果注册为result - name: install docker-ce
yum:
name: docker-ce
state: present
when: result|success 如果上面的result为success,则该任务执行 - name: create /etc/docker
file:
path: "{{ docker_config_dir }}" 利用file模块进行创建一个目录,引用变量
state: directory - name: start docker service
systemd: centos7开启服务,添加到启动项
name: docker
state: started
enabled: true - name: provide docker-ce configfile
template:
src: daemon.json.j2 提供配置文件
dest: /etc/docker/daemon.json
notify: restart docker 配置文件修改了触发通知机制,提醒handler

查看handlers/main.yaml:

[root@docker docker]# cat handlers/main.yaml
- name: restart docker
systemd:
name: docker
state: restarted 触发机制后,将服务进行重启
enabled: true

查看变量的设置:

[root@docker docker]# cat vars/main.yaml
docker_config_dir: /etc/docker

查看template的j2文件:

[root@docker docker]# cat templates/daemon.json.j2
{
"registry-mirrors": ["https://cbd49ltj.mirror.aliyuncs.com"]
}

上面的展示了docker这个角色的任务,变量,配置文件,触发条件,但是这个角色作用在哪个环境,哪个节点并没有说明,于是工作目录就是解决这个问题的:

[root@docker work_dir]# tree
.
├── install_docker-compose.retry
├── install_docker-compose.yaml
├── install_docker.retry
└── install_docker.yaml

查看docker的work_dir:

[root@docker work_dir]# cat install_docker.yaml
- hosts: container_nodes 对应hosts配置文件的两个节点
remote_user: root 执行使用root用户
roles:
- docker 针对的role名称

使用--syntax-check进行语法验证:

[root@docker work_dir]# ansible-playbook install_docker.yaml --syntax-check        

playbook: install_docker.yaml

使用如下命令进行执行playbook:

[root@docker work_dir]# ansible-playbook install_docker.yaml

下面查看另一个角色docker-compose:

[root@docker docker-compose]# tree
.
├── files
│   └── docker-compose-Linux-x86_64 docker-compose的二进制文件
├── handlers
├── meta
├── tasks
│   └── main.yaml
├── templates
└── vars
└── main.yaml

由于docker-compose并不需要像服务启动,没有handler机制,查看task:

[root@docker docker-compose]# cat tasks/main.yaml
- name: copy docker-compose-Linux-x86_64 to /usr/local/bin
copy:
src: ../files/docker-compose-Linux-x86_64 这里可以使用相对路径,可以使用绝对路径
dest: "{{ docker_compose_dir }}/docker-compose-Linux-x86_64" - name: install docker-compose
shell: cd "{{ docker_compose_dir }}" && mv docker-compose-Linux-x86_64 docker-compose && chmod +x docker-compose

查看变量的设置:

[root@docker docker-compose]# cat vars/main.yaml
docker_compose_dir: /usr/local/bin

最后执行的work_dir下面的install_docker-compose:

[root@docker work_dir]# cat install_docker-compose.yaml
- hosts: container_nodes
remote_user: root
roles:
- docker-compose
 
 
标签: ansible

使用ansible安装docker以及docker-compose的更多相关文章

  1. 通过 Ansible 安装 Docker

    本文的演示环境为 ubuntu 16.04. 先在 Ansible Galaxy 搜索 docker,由 geerlingguy 贡献的 docker role 是目前最受欢迎的: 通过 ansibl ...

  2. Ubuntu18.04安装docker、docker-compose、

    Ubuntu18.04下Docker CE安装 Docker版本分为两个:Docker Community Edition (CE)和 Docker Enterprise Edition (EE).D ...

  3. linux安装docker和docker compose

    运行 sudo -s 切换到root用户. 1.卸载旧版本Docker(如果系统之前没安装过Docker,可以跳过): yum remove docker \ docker-client \ dock ...

  4. docker和docker compose安装使用、入门进阶案例

    一.前言 现在可谓是容器化的时代,云原生的袭来,导致go的崛起,作为一名java开发,现在慌得一批.作为知识储备,小编也是一直学关于docker的东西,还有一些持续继承jenkins. 提到docke ...

  5. (playbook)ubuntu下ansible安装docker

    --- - hosts: test sudo: yes vars: apt_packages_ca: - apt-transport-https - ca-certificates tasks: - ...

  6. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  7. [Docker基础]Docker安装教程

    Install Docker Docker支持几乎所有的Linux发行版,也支持Mac和Windows. 各操作系统的安装方法可参考Docker官网. 安装环境 ubuntu 16.04 Docker ...

  8. ubuntu16.04安装最新版docker、docker-compose、docker-machine

    安装前说明: 本文将介绍在ubuntu16.04系统下安装和升级docker.docker-compose.docker-machine. docker:有两个版本:docker-ce(社区版)和do ...

  9. 物联网架构成长之路(24)-Docker练习之Compose容器编排

    0.前言 一开始学的之后,是想一步到位直接上Kubernetes(K8s)的,后面没想到,好像有点复杂,有些概念不是很懂.因此学习东西还是要循序渐进,慢慢来.先了解单机编排技术Docker Compo ...

随机推荐

  1. Linux下的文件操作——基于文件描述符的文件操作(2)

    文件描述符的复制 MMAP文件映射 ftruncate修改文件大小 文件描述符的复制 ​ 系统调用函数dup和dup2可以实现文件描述符的复制,经常用来重定向进程的stdin(0), stdout(1 ...

  2. Zabbix配置参数优化

    概述:使用zabbix监控服务器已有一段时间,监控的服务器不到100台,发现刷新zabbix页面有卡顿的现象.而且经常报“Zabbix poller processes more than 75% b ...

  3. Mybatis 系列4-结合源码解析节点:typeAliases

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

  4. MySQL 8.0用户和角色管理

    MySQL 8.0用户和角色管理 MySQL8.0新加了很多功能,其中在用户管理中增加了角色的管理,默认的密码加密方式也做了调整,由之前的sha1改为了sha2,同时加上5.7的禁用用户和用户过期的设 ...

  5. windows下安装、卸载mysql服务

    将下载下来的mysql解压到指定目录下(如:d:\mysql)安装服务在命令行输入d:\mysql\bin\mysqld -installnet start mysql卸载服务在命令行输入net st ...

  6. Java 6- Java 运算符

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运 ...

  7. 流(Stream)与文件流(FileStream)

    //通过流的方式添加 StreamWriter writer = new StreamWriter(@"C:\A\ca.txt", true, Encoding.Default); ...

  8. Solr字段类型field type的定义

    摘要: Solr的字段类型定义了Solr如何解析字段数据并将数据检索出来,了解Solr的字段类型定义有助于更好的配置与使用Solr. 字段类型的定义 字段类型的定义主要包含如下四个方面的信息: 名称 ...

  9. uWSGI, Gunicorn, 啥玩意儿?

    因为nginx等优秀的开源项目,有不少本来不是做服务器的同学也可以写很多服务器端的程序了.但是在聊天中会发现,大家虽然写了不少代码,但是对wsgi是什么,gunicorn是什么,反向代理又是什么并不了 ...

  10. es6(15)--generator

    //generator处理异步,下一步用next,遇到return或者yied就会停止 { //generator基本定义 let tell=function* (){ yield 'a'; yiel ...