2018年6月28日木曜日

Ansible から docker-compose を使ってみた

概要

docker_service というモジュールを使うことで docker-compose.yml を制御することができます

環境

クライアント

  • macOS 10.13.5
  • Ansible 2.5.5

ターゲットホスト

  • Ubuntu 16.04
  • docker 1.13.1, build 092cba3

レシピ作成

必要なファイルを作成していきます

site.yml

実行メインです

- hosts: all
  roles:
    - role: git
    - role: docker

production

インベントリファイルです

[all]
172.28.128.3

[all:vars]
ansible_user = root
ansible_ssh_pass = xxxxxxxxx
ansible_connection = paramiko

git

docker-compose をターゲットのサーバに配置します
今回は Github で公開されている docker-compose を使うので clone するレシピを作成します
ローカルからコピーなどしても OK です

  • mkdir -p roles/git/tasks
  • vim roles/git/tasks/main.yml
- include: zabbix.yml
  • touch roles/git/tasks/zabbix.yml
- include: zabbix.ymlyoshi1:try_zabbix_docker kakakikikeke$ cat roles/git/tasks/zabbix.yml 
- name: Clone
  git:
    repo: 'https://github.com/zabbix/zabbix-docker.git'
    dest: /root/zabbix-docker

zabbix

今回は Zabbix の docker-compose を使ってみます

  • mkdir -p roles/git/tasks
  • vim roles/docker/tasks/main.yml
- include: zabbix.yml
  • vim roles/docker/tasks/zabbix.yml
- name: Run zabbix
  docker_service:
    project_src: /root/zabbix-docker
    files:
      - docker-compose_v2_ubuntu_mysql_latest.yaml
    state: present

git clone したディレクトリを project_src で指定します
もし docker-compose.yaml or docker-compose.yml という名前のファイルがある場合は自動的にそれを読み込んで up してくれます
しかしファイル名が違う場合は明示的に指定する必要があります
そのために files パラメータを使って docker-compose の YAML ファイルを指定する必要があります

state は present と absent がありそれぞれ up と down に対応しています

動作確認

  • ansible-playbook -i production site.yml

で実行できます
成功するとターゲットのホストに 9 つのコンテナが起動しているのが確認できると思います

  • docker ps
CONTAINER ID        IMAGE                                              COMMAND                  CREATED              STATUS    
         PORTS                                         NAMES
452c148e3d8b        zabbix/zabbix-proxy-mysql:ubuntu-3.4-latest        "docker-entrypoint.sh"   About a minute ago   Up About a
minute   0.0.0.0:10071->10051/tcp                      zabbixdocker_zabbix-proxy-mysql_1                                       
29646c521ab7        zabbix/zabbix-proxy-sqlite3:ubuntu-3.4-latest      "docker-entrypoint.sh"   About a minute ago   Up About a
minute   0.0.0.0:10061->10051/tcp                      zabbixdocker_zabbix-proxy-sqlite3_1                                     
b020130836c3        zabbix/zabbix-web-apache-mysql:ubuntu-3.4-latest   "docker-entrypoint.sh"   About a minute ago   Up About a
minute   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp      zabbixdocker_zabbix-web-apache-mysql_1                                  
daedb397f768        zabbix/zabbix-agent:ubuntu-3.4-latest              "docker-entrypoint.sh"   About a minute ago   Up About a
minute   0.0.0.0:10050->10050/tcp                      zabbixdocker_zabbix-agent_1                                             
c610d76ee1ea        zabbix/zabbix-web-nginx-mysql:ubuntu-3.4-latest    "docker-entrypoint.sh"   About a minute ago   Up About a
minute   0.0.0.0:8081->80/tcp, 0.0.0.0:8443->443/tcp   zabbixdocker_zabbix-web-nginx-mysql_1                                   
585bb7622693        zabbix/zabbix-server-mysql:ubuntu-3.4-latest       "docker-entrypoint.sh"   About a minute ago   Up About a
minute   0.0.0.0:10051->10051/tcp                      zabbixdocker_zabbix-server_1                                            
f856fba5aac2        mysql:5.7                                          "docker-entrypoint..."   About a minute ago   Up About a
minute   3306/tcp                                      zabbixdocker_mysql-server_1                                             
89a7a3bdc46c        zabbix/zabbix-snmptraps:ubuntu-3.4-latest          "/usr/bin/supervis..."   About a minute ago   Up About a
minute   0.0.0.0:162->162/udp                          zabbixdocker_zabbix-snmptraps_1                                         
8b5dafc3a00a        zabbix/zabbix-java-gateway:ubuntu-3.4-latest       "docker-entrypoint.sh"   About a minute ago   Up About a
minute   0.0.0.0:10052->10052/tcp                      zabbixdocker_zabbix-java-gateway_1

http://172.28.128.3 にアクセスすると Zabbix の画面が表示されます
Admin/zabbix でダッシュボードにログインすることができます

最後に

Ansible から docker-compose を使ってみました
今回は既存の docker-compose ファイルを使用しました
docker_service モジュールはレシピの YAML ファイルに直接 docker-compose の内容を記載することもできるようです

docker_service はまだ v3 には対応しておらず v2 形式の YAML ファイルを使用する必要があります

Ansible 経由で定義することで変数機能などを使うことができるのがメリットかなと思います

zabbix_server.conf など主要な設定ファイルはホストでマウントしている感じではないのでコンテンからコピーするかコンテナのファイルを直接編集する必要があります

参考サイト

0 件のコメント:

コメントを投稿