使用ansible安裝docker以及docker-compose


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM