Ansible 用 Docker 練習(xí) Ansible

2018-07-25 10:33 更新

在前一章「Ansible 用Vagrant練習(xí)Ansible」我們是使用 Virtualbox + Vagrant 的組合來練習(xí) Ansible,這次凍仁將會改用當(dāng)前最火紅的 Docker 虛擬化容器技術(shù)來建置虛擬環(huán)境。

automate_with_ansible_practice-03.jpg

Docker 的好凍仁在此就不多談,大家若對 Docker 還不熟悉,可以看看凍仁以前分享過的「前端工程師一定要知道的 Docker 虛擬化容器技巧」簡報,這是一份讓人快速上手 Docker 的教學(xué)。

怎么安裝 Docker?

請安裝最新版的 Docker 即可。這里凍仁將不會特別介紹怎么安裝,請參考以下文章。

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

凍仁已在 Docker Hub 上建好了 Managed Node 的 Docker image - chusiang/ansible-managed-node 以利大家練習(xí) Ansible,該專案目前支持的 Linux 發(fā)行版本有:

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

底下將列出本次主題所會用到的相關(guān)指令,練習(xí)時只需執(zhí)行步驟 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. 建立并執(zhí)行容器。

    $ docker run --name server1 -d -P chusiang/ansible-managed-node:ubuntu-14.04
    ecdf39055ba2a932fa8c76a75afdec1cd8f516285bee6f4e07c16c67f4009211
    
  3. 觀看容器狀態(tài)和 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. 關(guān)閉容器。

    $ docker stop server1
    
  2. 啟用容器。

    $ docker start server1
    
  3. 移除容器。

    $ docker rm server1
    
    # -f, --force: 強制移除,包含正在執(zhí)行的容器。
    

怎么讓 Ansible 操控用 Docker 開好的容器?

接下來,我們將會用 Ansible 來控制 Docker 在本機上建立的容器,其作業(yè)系統(tǒng)版本為 Ubuntu 14.04 64-bit (AMD64),大家可以從 Dockerfile 1 看到里面已預(yù)載了 OpenSSH server 和 Python。

automate_with_ansible_practice-04.jpg

  1. 取得容器的 OpenSSH 設(shè)定:請?zhí)貏e留意 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. 設(shè)定 ansible.cfg:將 remote_user 設(shè)為 docker。

    $ vi ansible.cfg
    [defaults]
    
    hostfile = hosts
    remote_user = docker
    host_key_checking = False
    
  3. 設(shè)定 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:請設(shè)為本機的 IP。
    2. ansible_ssh_port:請設(shè)為 docker ps 時取得的 SSH port。
    3. ansible_ssh_pass:因沒有連線用的 SSH 金鑰,故直接使用密碼的方式進行連線,建議只于練習(xí)環(huán)境使用該參數(shù)。

Hello World on Docker

當(dāng)已上的設(shè)置都完成了,我們就可以在終端機里用 Docker 建立好的容器來練習(xí) Ansible 了!

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

后話

就實務(wù)面而言,凍仁一般會先在 Vagrant 的虛擬環(huán)境先開發(fā)好 Ansible Playbooks,有 Dockerize 需求再來相容 Docker 的環(huán)境。

Vagrant 利于開發(fā),而 Docker 利于散布、部署和節(jié)省資源,要怎么搭配使用就看個人的習(xí)慣了。

相關(guān)連接

1chusiang/ansible-managed-node:ubuntu-14.04 image 的 Dockerfile 可以在凍仁的 GitHub 找到,其網(wǎng)址為 https://github.com/chusiang/ansible-managed-node.dockerfile/blob/master/ubuntu-14.04/Dockerfile 。 ?


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號