Ansible 用 Docker 练习 Ansible

2018-07-25 10:33 更新

在前一章「Ansible 用Vagrant练习Ansible」我们是使用 Virtualbox + Vagrant 的组合来练习 Ansible,这次冻仁将会改用当前最火红的 Docker 虚拟化容器技术来建置虚拟环境。

automate_with_ansible_practice-03.jpg

Docker 的好冻仁在此就不多谈,大家若对 Docker 还不熟悉,可以看看冻仁以前分享过的「前端工程师一定要知道的 Docker 虚拟化容器技巧」简报,这是一份让人快速上手 Docker 的教学。

怎么安装 Docker?

请安装最新版的 Docker 即可。这里冻仁将不会特别介绍怎么安装,请参考以下文章。

怎么用 Docker 管理容器 (Container)?

冻仁已在 Docker Hub 上建好了 Managed Node 的 Docker image - chusiang/ansible-managed-node 以利大家练习 Ansible,该专案目前支持的 Linux 发行版本有:

  • alpine-3.4, latest
  • archlinux
  • centos-6
  • centos-7
  • debian-7
  • debian-8
  • gentoo
  • opensuse-42.1
  • ubuntu-14.04

底下将列出本次主题所会用到的相关指令,练习时只需执行步骤 1, 2, 3 即可。

  1. 取得冻仁事先建立好的 Docker image。

    $ docker pull chusiang/ansible-managed-node:ubuntu-14.04
    
    #### 使用者帐户 #####################
    #
    # |           | username | password |
    # |-----------|----------|----------|
    # | root user | root     | root     |
    # | sudo user | docker   | docker   |
    
  2. 建立并执行容器。

    $ docker run --name server1 -d -P chusiang/ansible-managed-node:ubuntu-14.04
    ecdf39055ba2a932fa8c76a75afdec1cd8f516285bee6f4e07c16c67f4009211
    
  3. 观看容器状态和 SSH 绑定的埠口 (Port)。

    $ docker ps
    CONTAINER ID        IMAGE                                        COMMAND                  CREATED             STATUS              PORTS              NAMES
    ecdf39055ba2        chusiang/ansible-managed-node:ubuntu-14.04   "/usr/sbin/sshd -D"      20 hours ago        Up 17 seconds       0.0.0.0:32805->22/tcp    server1
    
  4. 进入容器。

    $ docker exec -it server1 bash
    
  1. 关闭容器。

    $ docker stop server1
    
  2. 启用容器。

    $ docker start server1
    
  3. 移除容器。

    $ docker rm server1
    
    # -f, --force: 强制移除,包含正在执行的容器。
    

怎么让 Ansible 操控用 Docker 开好的容器?

接下来,我们将会用 Ansible 来控制 Docker 在本机上建立的容器,其作业系统版本为 Ubuntu 14.04 64-bit (AMD64),大家可以从 Dockerfile 1 看到里面已预载了 OpenSSH server 和 Python。

automate_with_ansible_practice-04.jpg

  1. 取得容器的 OpenSSH 设定:请特別留意 0.0.0.0:32805->22/tcp 的值。

    $ docker ps
    CONTAINER ID        IMAGE                                        COMMAND                  CREATED             STATUS              PORTS              NAMES
    ecdf39055ba2        chusiang/ansible-managed-node:ubuntu-14.04   "/usr/sbin/sshd -D"      20 hours ago        Up 17 seconds       0.0.0.0:32805->22/tcp    server1
    
  2. 设定 ansible.cfg:將 remote_user 设为 docker

    $ vi ansible.cfg
    [defaults]
    
    hostfile = hosts
    remote_user = docker
    host_key_checking = False
    
  3. 设定 hosts

    $ vi hosts
    server1  ansible_ssh_host=127.0.0.1  ansible_ssh_port=32805 ansible_ssh_pass=docker
    
    [local]
    server1
    
    1. ansible_ssh_host:请设为本机的 IP。
    2. ansible_ssh_port:请设为 docker ps 时取得的 SSH port。
    3. ansible_ssh_pass:因没有连线用的 SSH 金钥,故直接使用密码的方式进行连线,建议只于练习环境使用该参数。

Hello World on Docker

当已上的设置都完成了,我们就可以在终端机里用 Docker 建立好的容器来练习 Ansible 了!

$ ansible all -m command -a 'echo Hello World on Docker.'
server1 | SUCCESS | rc=0 >>
Hello World on Docker.

后话

就实务面而言,冻仁一般会先在 Vagrant 的虚拟环境先开发好 Ansible Playbooks,有 Dockerize 需求再来相容 Docker 的环境。

Vagrant 利于开发,而 Docker 利于散布、部署和节省资源,要怎么搭配使用就看个人的习惯了。

相关连接

1chusiang/ansible-managed-node:ubuntu-14.04 image 的 Dockerfile 可以在冻仁的 GitHub 找到,其网址为 https://github.com/chusiang/ansible-managed-node.dockerfile/blob/master/ubuntu-14.04/Dockerfile 。 ↩


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号