Skip to main content
 首页 » 操作系统

使用ansible安装docker以及docker-compose

2022年07月18日29yyy_WW

环境三台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

本文参考链接:https://www.cnblogs.com/maohuidong/p/9914840.html