在前一章「Ansible 用Vagrant練習(xí)Ansible」我們是使用 Virtualbox + Vagrant 的組合來練習(xí) Ansible,這次凍仁將會改用當(dāng)前最火紅的 Docker 虛擬化容器技術(shù)來建置虛擬環(huán)境。
Docker 的好凍仁在此就不多談,大家若對 Docker 還不熟悉,可以看看凍仁以前分享過的「前端工程師一定要知道的 Docker 虛擬化容器技巧」簡報,這是一份讓人快速上手 Docker 的教學(xué)。
請安裝最新版的 Docker 即可。這里凍仁將不會特別介紹怎么安裝,請參考以下文章。
凍仁已在 Docker Hub 上建好了 Managed Node 的 Docker image - chusiang/ansible-managed-node
以利大家練習(xí) Ansible,該專案目前支持的 Linux 發(fā)行版本有:
底下將列出本次主題所會用到的相關(guān)指令,練習(xí)時只需執(zhí)行步驟 1, 2, 3 即可。
取得凍仁事先建立好的 Docker image。
$ docker pull chusiang/ansible-managed-node:ubuntu-14.04
#### 使用者帳戶 #####################
#
# | | username | password |
# |-----------|----------|----------|
# | root user | root | root |
# | sudo user | docker | docker |
建立并執(zhí)行容器。
$ docker run --name server1 -d -P chusiang/ansible-managed-node:ubuntu-14.04
ecdf39055ba2a932fa8c76a75afdec1cd8f516285bee6f4e07c16c67f4009211
觀看容器狀態(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
進入容器。
$ docker exec -it server1 bash
關(guān)閉容器。
$ docker stop server1
啟用容器。
$ docker start server1
移除容器。
$ docker rm server1
# -f, --force: 強制移除,包含正在執(zhí)行的容器。
接下來,我們將會用 Ansible 來控制 Docker 在本機上建立的容器,其作業(yè)系統(tǒng)版本為 Ubuntu 14.04 64-bit (AMD64),大家可以從 Dockerfile 1 看到里面已預(yù)載了 OpenSSH server 和 Python。
取得容器的 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
設(shè)定 ansible.cfg:將 remote_user
設(shè)為 docker
。
$ vi ansible.cfg
[defaults]
hostfile = hosts
remote_user = docker
host_key_checking = False
設(shè)定 hosts。
$ vi hosts
server1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=32805 ansible_ssh_pass=docker
[local]
server1
ansible_ssh_host
:請設(shè)為本機的 IP。ansible_ssh_port
:請設(shè)為 docker ps
時取得的 SSH port。ansible_ssh_pass
:因沒有連線用的 SSH 金鑰,故直接使用密碼的方式進行連線,建議只于練習(xí)環(huán)境使用該參數(shù)。當(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í)慣了。
1. chusiang/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 。 ?
更多建議: