• 使用ansible安装docker以及docker-compose


    转自: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
  • 相关阅读:
    第二次作业——结对项目之需求分析与原型模型设计
    Git进行代码管理的心得
    安卓开发环境演变
    软件工程的实践项目的自我目标
    若一切能重来
    随堂练习——Rational rose
    第五次软件个人作业
    第三次作业——结对编程
    第二次作业——结对项目之需求分析与原型模型设计
    软工实践练习——使用Git进行代码管理
  • 原文地址:https://www.cnblogs.com/maohuidong/p/9914840.html
Copyright © 2020-2023  润新知