LoginSignup
28
23

More than 3 years have passed since last update.

Docker for Mac 環境で Docker connection plugin for Ansible を利用する。

Last updated at Posted at 2016-10-04

Docker connection plugin for Ansible とは?

Docker connection plugin for Ansibleは、Ansible 2.0 より利用が可能になった機能です。
Ansibe が Docker API へ接続することで、従来の様にコンテナ上でSSHデーモンを起動させることなく、コンテナファイルを直接操作できるようになりました。

設定

早速、手順に沿って設定します。
手順では、環境変数の DOCKER_HOST に Docker API のホストアドレスを記載するように書かれています。

Docker for Mac での Docker API は、TCPではなく UnixSocket となります。
GitHub上には書かれていませんが、こちらにはUnixSocketかTCPと書かれているので、

export DOCKER_HOST="unix://var/run/docker.sock"

と実行し、環境変数を設定します。

参考

Docker for Mac の挙動は、こちらに詳しく書かれています。

実行

動作検証のために簡単なPlayBookとInventoryを用意しました。Docker上の2つのコンテナにPINGを送信します。

  • hosts
[containers]
high_bardeen
gigantic_almeida
  • sample.yml
- hosts: containers
  connection: docker 

  tasks:
  - name: ping
    ping:
$ ansible-playbook -i hosts.yml sample.yml

PLAY [containers] **************************************************************

TASK [setup] *******************************************************************
ok: [high_bardeen]
ok: [gigantic_almeida]

TASK [ping] ********************************************************************
ok: [gigantic_almeida]
ok: [high_bardeen]

PLAY RECAP *********************************************************************
gigantic_almeida           : ok=2    changed=0    unreachable=0    failed=0
high_bardeen               : ok=2    changed=0    unreachable=0    failed=0

はい、成功です。

ですが、ここで落とし穴がありました。
環境変数を設定後Dockerコマンドを実行すると、下記のようになります。

$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

[DOCKER_HOST] を設定することで、Docker for Mac に含まれるDockerコマンドが正常に稼働しなくなるようです。

なお、

$ unset DOCKER_HOST

とすることで、設定した[$DOCKER_HOST]は削除でき、Dockerコマンドは正常に動きました。

解決

なんとかして[DOCKER_HOST]を設定する必要があります。
そこで、PlayBook中に[DOCKER_HOST]変数を定義します。

  • sample2.yml
- hosts: containers
  connection: docker 

  vars:
  - DOCKER_HOST: "unix://var/run/docker.sock"

  tasks:
  - name: ping
    ping:
$ ansible-playbook -i hosts.yml sample2.yml

PLAY [containers] **************************************************************

TASK [setup] *******************************************************************
ok: [high_bardeen]
ok: [gigantic_almeida]

TASK [ping] ********************************************************************
ok: [gigantic_almeida]
ok: [high_bardeen]

PLAY RECAP *********************************************************************
gigantic_almeida           : ok=2    changed=0    unreachable=0    failed=0
high_bardeen               : ok=2    changed=0    unreachable=0    failed=0

はい、上手くいきました。
これで、Docker for Mac 上のコンテナへもコンテナ上でSSHデーモンを起動せずにAnsibleの実行が可能となります。

ニッチなケースかもしれませんが、ご活用ください。

28
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
23