1. 程式人生 > >ansible/docker_container 安裝MySQL/Mongo/Redis

ansible/docker_container 安裝MySQL/Mongo/Redis

最近在部署類似私有云專案,需要在本地用ansible自動化工具去建立啟動相關db,看了一下比較不錯的ansible模組docker_container

  1. 安裝ansible
  2. 安裝docker-ce(版本)
  3. 安裝docker_container相關依賴包
  4. 建立role專案
  5. 映象下載及打tag
  6. 執行

一、更新映象及安裝相關包和依賴

#``repo``源更新 
#可在清華大學映象站進行映象源更新操作

cat /etc/yum.repos.d CentOS-Base.repo

[base]
name=Centos-7.4-Base
baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/os/x86_64/
enabled=
1 gpgcheck=0 [update] name=Centos-7.4-Updates baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/updates/x86_64/ enabled=1 gpgcheck=0 [extras] name=Centos-7.4-Extras baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/extras/x86_64/ enabled=1 gpgcheck=0 [centosplus] name=Centos-7.4-Centosplus baseurl=
http://mirrors.tuna.tsinghua.edu.cn/centos/7.5.1804/centosplus/x86_64/ enabled=1 gpgcheck=0 [docker-ce] name=Docker-Ce-7.4 baseurl=http://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/ enabled=1 gpgcheck=0 [epel] name=Extra Packages for Enterprise Linux 7 - $basearch - Debug baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/ failovermethod=
priority enabled=1 gpgcheck=0 #安裝相關包及依賴 yum clean all && yum repolist yum -y install ansible docker-ce python-pip pip install docker-py #啟動服務 systemctl start docker #下載相關映象 docker pull docker.io/redis:latest docker pull docker.io/mongo:latest docker pull docker.io/mysql:latest

二、建立roles專案及yaml編寫

#當前roles目錄結構
tree roles/

├── mongo
│   ├── defaults
│   ├── files
│   │   └── create.sh
│   ├── handlers
│   ├── meta
│   ├── tasks
│   │   └── main.yaml
│   ├── templates
│   └── vars
├── mysql
│   ├── defaults
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   │   └── main.yaml
│   ├── templates
│   └── vars
│       └── main.yaml
└── redis
    ├── defaults
    ├── files
    ├── handlers
    ├── meta
    ├── tasks
    │   └── main.yaml
    ├── templates
    └── vars
        └── main.yaml

2.1 編輯MySQL yaml
#roles/mysql/tasks/main.yaml

- name: 'install mysql database:mysql'
  docker_container:
    name: mysql 									#啟動時 --name的名字
    image: "docker.hobot.cc/mysql:5.7.23"			#映象名稱
    pull: no										#不需要從外部拉取
    volumes:
      -  "/etc/mysql/conf:/etc/mysql"				#本地對映目錄
      -  "/etc/mysql/data:/var/lib/mysql"
    env:
        MYSQL_ROOT_PASSWORD: "{{ password }}"		#MySQL密碼(vars/main.yaml定義)
    ports:
     - "3306:3306"									#埠對映
    state: started									#啟動	

2.2 編輯Redis yaml
- name: 'install redis database:05b3651ee24e'
  docker_container:
    name: redis									#啟動時 --name的名字
    image: "docker.hobot.cc/redis:5.0"			#映象名稱
    pull: no									#不需要從外部拉取
    volumes:
      - "/etc/redis/conf:/usr/local/etc/redis"	#本地對映目錄
      - "/etc/redis/data:/data"
    env:
        REDIS_PASSWORD: "{{ password }}"		#redis密碼(vars/main.yaml定義)
    ports:
     - "6379:6379"								#埠對映
    state: started								#啟動
2.3 編輯mongo yaml
#說說這裡,mongo這塊的許可權有點坑,我下個文章會專門講一下mongo許可權這塊,如果你在env設定賬號密碼,那麼庫必須是admin
#mongo_user模組中是可以建立使用者和密碼以及相關的role許可權,但是database也必須是admin
#你可以完全把mongo_user那部分注視,然後將env也注視,然後預設就是免密登入,
#然後在利用指令碼進行建立你需要的賬號密碼以#及連線的庫

- name: 'install mongo database:05b3651ee24e'
  docker_container:
    name: mongo
    image: "docker.hobot.cc/mongo:3.6.8"
    env:
        MONGO_INITDB_ROOT_USERNAME: admin					#初始化使用者名稱
        MONGO_INITDB_ROOT_PASSWORD: asdjcvkjxbcv			#初始化使用者密碼
        MONGO_INITDB_DATABASE: admin						#相關的庫,官網上說的意思是.js檔案可建立
    pull: no
    volumes:
     - "/etc/mongo/configdb:/data/configdb"
     - "/etc/mongo/db:/data/db"
    ports:
     - "27017:27017"
    state: started

- mongodb_user:
    login_user: super										#登入的使用者
    login_password: 123456									#登入的密碼
    database: admin											#需要進入的資料庫(目前測試必須是admin)
    name: pangu												#需要建立的使用者
    password: 123											#需要建立的密碼		
    state: present											#建立狀態
    roles:													#申請許可權(給pangu使用者的aitc_matrix庫的所有者許可權)
      - db: aitc_matrix
        role: root

- name: "copy create user script to tmp "
  copy:
    src=create.sh											#按我上面說的話,如果注視了,那麼就執行個指令碼
    dest=/tmp/create.sh

- name: "run create user script"
  command:
    /bin/bash "/tmp/create.sh"							
2.4 建立mongo指令碼及執行ansible-playbook
#roles/mongo/files/create.sh

#!/bin/bash
mongo aitc_matrix  --eval "db.createUser({user:\"pangu\",pwd:\"12345\",roles:[{role:\"dbOwner\",db:\"aitc_matrix\"},{role:\"dbOwner\",db:\"aitc_matrix1\"}]})"

#/etc/mongo/configdb/mongo.conf
security:
    authorization: enabled

#inventory.ini
[global]
10.31.11.154

#site.yaml
- name: entry  main
  hosts: 10.31.11.154
  roles:
    - mongo
    - redis
    - mysql
    
#run playbook
ansible-playbook -i inventory.ini  site.yaml -vvv