Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationEventAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.



今回は Ansible を使って Docker 上のコンテナの環境を構築します。
Macの環境に Boot2Docker を使って構築しても良いのですが、今回は Vagrant 内に Docker 環境を構築することにします。

※1 ~ 3は前回と一緒です。

1. 環境


  • Max OS X 10.10
  • Homebrew 0.9.5
  • VirtualBox 4.3.18
  • Vagrant 1.6.5

2. Vagrant 環境の準備

CentOS 6 を使います。

$ mkdir ansible_test
$ cd ansible_test
$ vagrant box add centos/6
$ vagrant init centos/6
$ vi Vagrantfile
$ diff Vagrantfile Vagrantfile.org 
<   config.vm.network "private_network", ip: ""
>   # config.vm.network "private_network", ip: ""
$ vagrant up
$ vagrant ssh-config --host >> ~/.ssh/config

3. Ansible をインストール

$ brew install ansible
$ ansible --version
ansible 1.7.2


$ echo "" > hosts
$ ansible -i hosts -m ping | success >> {
    "changed": false, 
    "ping": "pong"

4. Docker のインストール

Playbook については github にありますので、そちらを確認して下さい。
今回は role を使って Playbook を構成してます。

$ cat <<_EOT_ > hosts
$ ansible-playbook -i hosts docker.yml

仮想環境の CentOS 内に Docker のインストールとイメージの build が出来ました。
build したイメージに対して前回の Playbook と同等のものを実行します。

5. Docker に対して Ansible を実行する

CentOS 内にログインします。

$ vagrant ssh

Host の Playbook は /vagrant の下にマウントされてますのでそちらに移動します。

$ cd /vagrant/docker

Playbook で作成されている docker のイメージを実行します。

$ docker run -d --name web_test docker/ansible

実行した Docker のIPアドレスを調べます。

$ docker inspect -f "{{ .NetworkSettings.IPAddress }}" web_test

このIPアドレスを Inventory File に書き出します。

$ cat <<_EOT_ > hosts


$ cat <<_EOT_ > hosts
$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" web_test)
$ cat hosts

Ansible を実行します。

$ ansible-playbook -i hosts playbook.yml
 [WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (ie. yum update gmp).

PLAY [all] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: []

TASK: [upgrade all packages] ************************************************** 
ok: []

PLAY [web_server] ************************************************************* 

GATHERING FACTS *************************************************************** 
ok: []

TASK: [Install httpd package] ************************************************* 
changed: [] => (item=lynx,httpd)

TASK: [Enable httpd server] *************************************************** 
changed: []

PLAY RECAP ********************************************************************                : ok=5    changed=2    unreachable=0    failed=0   

export ANSIBLE_HOST_KEY_CHECKING=False については Ansible を実行する前に一度 docker に ssh でログインしておけば不要です。

$ ssh docker@ -i ~/.ssh/id_rsa
The authenticity of host ' (' can't be established.
RSA key fingerprint is
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '' (RSA) to the list of known hosts.

はい。docker に対して Ansible を実行できました!
別で serverspec によるテストとか、今回はパッケージで入れましたけどソースコードからのビルドとか設定ファイルの作成を試します。

github に今回使った一式をcommitしてあります。


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Help us understand the problem. What is going on with this article?