📘
現代 IT 人一定要知道的 Ansible 自動化組態技巧
  • README
  • 前言
  • 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 管理敏感資料?
  • 總結
Powered by GitBook
On this page
  • 05. 怎麼用 Docker 練習 Ansible?
  • 怎麼安裝 Docker?
  • 怎麼用 Docker 管理容器 (Container)?
  • 怎麼讓 Ansible 操控用 Docker 開好的容器?
  • Hello World on Docker
  • 後語
  • 相關連結

Was this helpful?

Edit on GitHub

怎麼用 Docker 練習 Ansible?

Previous怎麼用 Vagrant 練習 Ansible?Next怎麼操作 Ansible?

Last updated 5 years ago

Was this helpful?

05. 怎麼用 Docker 練習 Ansible?

在前一章「」我們是使用 Virtualbox + Vagrant 的組合來練習 Ansible,這次凍仁將會改用當前最火紅的 虛擬化容器技術來建置虛擬環境。

怎麼安裝 Docker?

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

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

  • 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 即可。

  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
  5. 關閉容器。

    $ docker stop server1
  6. 啟用容器。

    $ docker start server1
  7. 移除容器。

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

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

  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]
    
    inventory = 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 利於散佈、部署和節省資源,要怎麼搭配使用就看個人的習慣了。

相關連結

Docker 的好凍仁在此就不多談,大家若對 Docker 還不熟悉,可以看看凍仁以前分享過的「」簡報,這是一份讓人快速上手 Docker 的教學。

。

凍仁已在 Docker Hub 上建好了 Managed Node 的 Docker image - 以利大家練習 Ansible,該專案目前支援的 Linux 發行版本有:

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

前端工程師一定要知道的 Docker 虛擬化容器技巧
Docker 官方網站
於 Ubuntu 14.04 安裝 Docker 1.9.1+ | 凍仁的筆記
在 OSX 10.11.4 安裝 Docker for Mac (v1.11.0-beta8) | 凍仁的筆記
chusiang/ansible-managed-node
Dockerfile
前端工程師一定要知道的 Docker 虛擬化容器技巧 | 凍仁的筆記
Welcome to the Docs | Docker Docs
04. 怎麼用 Vagrant 練習 Ansible?
Docker
automate_with_ansible_practice-03.jpg
automate_with_ansible_practice-04.jpg