- 前言
- Ansible 是什么?
- 怎么部署 Ansible 环境?
- 怎么用 Vagrant 练习 Ansible?
- 怎么用 Docker 练习 Ansible?
- 怎么操作 Ansible?
- 怎么用 Jupyter 操控 Ansible?(localhost)
- 怎么用 Jupyter 操控 Ansible?(Managed node)
- 怎么用 Docker Compose 练习 Ansible?
- Ansible 的开发工具有哪些?
- 怎么看 Ansible Modules 文件?
- 常用的 Ansible Module 有哪些?
- 怎么使用 setup 取得 Managed node 的 facts?
- 怎么使用 Ansible 的 Template 系统?
- 怎么在 Playbooks 里使用 Handlers?
- Ansible 如何发送 notification 到 Slack?
- Ansible 如何发送 notification 到 HipChat?
- 如何在 Playbooks 使用 loops?
- 如何维护大型的 Playbooks?
- Roles 是什么?
- 怎么使用 Roles?
- 怎么用 Roles 部署 LNMP 网页应用程式?(上)
- 怎么用 Roles 部署 LNMP 网页应用程式?(下)
- 怎么用 Roles 部署 TestLink?
- 怎么在 Ansible Galaxy 分享 Roles?(上)
- 怎么在 Ansible Galaxy 分享 Roles?(下)
- 怎么用 Travis CI 测试 Roles?
- 怎么混用 Ansible 建置 Docker image?
- 怎么在 Docker Hub 混用 Ansible 自动建置 Docker image?
- 怎么用 Vault 管理敏感资料?
- 总结
怎么用 Docker 练习 Ansible?
現代 IT 人一定要知道的 Ansible 自動化組態技巧
05. 怎麼用 Docker 練習 Ansible?
在前一章「 04. 怎麼用 Vagrant 練習 Ansible? 」我們是使用 Virtualbox + Vagrant 的組合來練習 Ansible,這次凍仁將會改用當前最火紅的 Docker 虛擬化容器技術來建置虛擬環境。
Docker 的好凍仁在此就不多談,大家若對 Docker 還不熟悉,可以看看凍仁以前分享過的「前端工程師一定要知道的 Docker 虛擬化容器技巧」簡報,這是一份讓人快速上手 Docker 的教學。
怎麼安裝 Docker?
請安裝最新版的 Docker 即可。這裡凍仁將不會特別介紹怎麼安裝,請參考以下文章。
- Docker 官方網站。
- 於 Ubuntu 14.04 安裝 Docker 1.9.1+ | 凍仁的筆記
- 在 OSX 10.11.4 安裝 Docker for Mac (v1.11.0-beta8) | 凍仁的筆記
怎麼用 Docker 管理容器 (Container)?
凍仁已在 Docker Hub 上建好了 Managed Node 的 Docker image - chusiang/ansible-managed-node
以利大家練習 Ansible,該專案目前支援的 Linux 發行版本有:
alpine-3.4
(End-of-life, EOL)alpine-3.6
,latest
archlinux
centos-6
centos-7
debian-7
debian-8
gentoo
(EOL)opensuse-42.1
(EOL)opensuse-42.2
opensuse-42.3
ubuntu-14.04
ubuntu-16.04
底下將列出本次主題所會用到的相關指令,練習時只需執行步驟 1, 2, 3 即可。
取得凍仁事先建立好的 Docker image。
$ docker pull chusiang/ansible-managed-node:ubuntu-14.04 #### 使用者帳戶 ##################### # # | | username | password | # |-----------|----------|----------| # | root user | root | root | # | sudo user | docker | docker |
建立並執行容器。
$ docker run --name server1 -d -P chusiang/ansible-managed-node:ubuntu-14.04 ecdf39055ba2a932fa8c76a75afdec1cd8f516285bee6f4e07c16c67f4009211
觀看容器狀態和 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
關閉容器。
$ docker stop server1
啟用容器。
$ docker start server1
移除容器。
$ docker rm server1 # -f, --force: 強制移除,包含正在執行的容器。
怎麼讓 Ansible 操控用 Docker 開好的容器?
接下來,我們將會用 Ansible 來控制 Docker 在本機上建立的容器,其作業系統版本為 Ubuntu 14.04 64-bit (AMD64),大家可以從 Dockerfile 1 看到裡面已預載了 OpenSSH server 和 Python。
取得容器的 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
設定 ansible.cfg:將
remote_user
設為docker
。$ vi ansible.cfg [defaults] inventory = hosts remote_user = docker host_key_checking = False
設定 hosts。
$ vi hosts server1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=32805 ansible_ssh_pass=docker [local] server1
ansible_ssh_host
:請設為本機的 IP。ansible_ssh_port
:請設為docker ps
時取得的 SSH port。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 利於散佈、部署和節省資源,要怎麼搭配使用就看個人的習慣了。
相關連結
1. chusiang/ansible-managed-node:ubuntu-14.04
image 的 Dockerfile 可以在凍仁的 GitHub 找到,其網址為 https://github.com/chusiang/ansible-managed-node.dockerfile/blob/master/ubuntu-14.04/Dockerfile 。 ↩
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论