2018年6月27日水曜日

Ansible から docker を制御してみた

概要

docker_container というモジュールがありこれを使うと docker の制御することができます
今回はコンテナの起動など行ってみました

環境

クライアント

  • macOS 10.13.5
  • Ansible 2.5.5

ターゲットホスト

  • Ubuntu 16.04
  • docker 1.13.1, build 092cba3

レシピ作成

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

site.yml

メインのレシピです

- hosts: all
  roles:
    - role: docker

production

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

[all]
172.28.128.3

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

対象のホストは Vagrant で作成した Ubuntu16 ですでに docker を apt でインストール済みです

nginx.yml

メインとなるレシピを作成します

  • mkdir -p roles/docker/tasks/
  • vim roles/docker/tasks/main.yml
- include: zabbix.yml
  • vim roles/docker/tasks/nginx/yml
- name: Run nginx
  docker_container:
    name: web
    image: nginx:latest
    ports:
      - "81:80"

おそらく何を設定しているか予想できると思います
nginx コンテナを 80 番ポートで起動して 81 番ポートで EXPOSE しています
またコンテナの名前を web にしています

name は必須パラメータになっています

実行

  • ansible-playbook -i production site.yml

パスワード等はすべてインベントリファイルに記載したので上記で実行できるはずです

動作確認としては curl でも叩いて見ましょう

  • curl 172.28.128.3:81

これで nginx のデフォルト画面が返ってくれば OK です

それ以外の動作

コンテナを停止する

- name: Stop
  docker_container:
    name: web
    state: stopped

コンテナを削除する

- name: Remove
  docker_container:
    name: web
    state: absent

最後に

Ansible から docker_container モジュールを使ってコンテナ制御をしてみました
当然ですがターゲットとなるホストには docker がインストールされている必要があります

Ansible の 2.4 から docker というモジュールが DEPRECATED になりました
代わりに docker_containerdocker_image というモジュールを使うようになったのでご注意ください
今回はコンテナ操作だけだったので docker_container を使いました

最近だとコンテナスケジューラが充実しているので運用はそっちを使えばいいと思います
コンテナホストで初回のコンテナ起動などにこれを使う感じかなと思います

ドキュメントは以下で紹介している公式のドキュメントが一番参考になります

参考サイト

0 件のコメント:

コメントを投稿