使用Ansible来构建Docker容器

这次我们将使用 Ansible 来配置 Docker 容器的环境。
虽然你可以使用 Boot2Docker 在 Mac 环境中进行配置,但是这次我们决定在 Vagrant 中构建 Docker 环境。

※1 ~ 3与上次一样。

1. 环境

请在使用之前先安装好Vagrant和VirtualBox。

    • 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 
27c27
<   config.vm.network "private_network", ip: "192.168.33.10"
---
>   # config.vm.network "private_network", ip: "192.168.33.10"
$ vagrant up
$ vagrant ssh-config --host 192.168.33.10 >> ~/.ssh/config

3. 安装 Ansible

$ brew install ansible
$ ansible --version
ansible 1.7.2

请确认连接到访客环境是否成功。

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

4. 安装Docker

请在github上确认Playbook的内容。
这次我们使用了role来组织Playbook的结构。

$ cat <<_EOT_ > hosts
[docker_host]
192.168.33.10
_EOT_
$ ansible-playbook -i hosts docker.yml

在虚拟环境的CentOS中成功安装了Docker并构建了镜像。
现在您可以对构建的镜像运行与上次Playbook相同的操作。

在执行Docker时使用Ansible。

登录到CentOS系统中。

$ vagrant ssh

由于主机的Playbook被挂载在/vagrant下,因此我们将移动到那里。

$ cd /vagrant/docker

执行由Playbook创建的docker镜像。

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

我要查找已执行的Docker的IP地址。

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

这个结果会因环境而异。
将此IP地址写入清单文件中。

$ cat <<_EOT_ > hosts
[web_server]
172.17.0.15
_EOT_

或者您可以直接将前述命令的结果输入。

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

执行Ansible。

$ export ANSIBLE_HOST_KEY_CHECKING=False
$ 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: [172.17.0.30]

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

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

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

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

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

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

在执行Ansible之前,只需要在docker中使用ssh登录一次,就不需要设置export ANSIBLE_HOST_KEY_CHECKING=False。

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

是的,我成功地在 Docker 上运行了 Ansible!我也可以尝试使用 serverspec 进行测试,或者从源代码进行构建和创建配置文件,本次我选择使用包安装。

我已经将本次使用的全部内容提交到GitHub上了。

把下面的内容用中文进行原生修饰,只需要一种方式:

参考

    • Ansibleのroleを使いこなす – Qiita

 

    • Playbook Roles and Include Statements — Ansible Documentation

 

    • Ansible でファイル内に変数を使う場合は copy ではなく template で。 – べにやまぶろぐ

 

    • docker上のコンテナをansibleで構成管理する – とあるSEの学習日記

 

    Docker で SSH 接続可能なコンテナ (CentOS) を作成する – Qiita
广告
将在 10 秒后关闭
bannerAds