Ansible 用 Docker Compose 練習(xí) Ansible

2018-07-25 10:37 更新

在前一章「Ansible 用 Jupyter 操控 Ansible (Managed node)」我們借由 Docker 實(shí)作用 Control Machine  Managed node 的環(huán)境。雖看似完美,可當(dāng)容器一多就會(huì)讓建置環(huán)境的流程變得復(fù)雜且繁瑣,這次凍仁將改用 Docker Compose 來(lái)簡(jiǎn)化練習(xí) Ansible 的步驟。

automate_with_ansible_practice-11.jpg

Docker Compose 是什么?

Docker Compose 是個(gè)用來(lái)定義和執(zhí)行復(fù)雜 Docker 應(yīng)用程序的工具,它就好比 Shell Script 和 Ansible Playbooks,通過(guò)事先撰寫好的 docker-compose.yml 來(lái)批次管理 Docker 容器。

automate_with_ansible_practice-12.jpg

官網(wǎng)簡(jiǎn)介如下:

Docker Compose allows you to define your multi-container application with all of its dependencies in a single file, then spin your application up in a single command.

若想深入了解 Docker Compose,可參考以下文章:

怎么用 Docker Compose 管理容器?

底下只列出本次主題所會(huì)用到的相關(guān)指令,練習(xí)時(shí)只需執(zhí)行步驟 1, 2 即可。

  1. 建立并執(zhí)行容器。

    $ docker-compose up
    
  2. 觀看容器狀態(tài)和綁定的埠口 (Port)。

    $ docker-compose ps
    
  3. 停止容器。

    $ docker-compose stop
    
  4. 啟用容器。

    $ docker-compose start
    
  5. 移除容器:再移除之前得先停用容器后才可移除。

    $ docker-compose rm -f
    
    # -f, --force: Don't ask to confirm removal
    

怎么用 Docker Compose 建立 Ansible 環(huán)境?

上一章我們開(kāi)了 3 個(gè) Docker 容器來(lái)實(shí)作 Control Machine (Jupyter, Ansible) + Managed node (CentOS 7, Ubuntu 14.04) 的環(huán)境,這次就再加一個(gè) Debian 8 的 Managed node,并命名為 server3。

automate_with_ansible_practice-13.jpg

圖片來(lái)源: https://www.docker.com/products/docker-compose

建立 docker-compose.yml

這次凍仁挑了 chusiang/ansible-jupyter:alpine-3.4 的 Docker image 作為 Control Machine,而新加入的 Managed node 則是 chusiang/ansible-managed-node:debian-8

$ vi docker-compose.yml
version: '2'
services:

  control_machine:
    ports:
      - 8888:8888/tcp
    image: chusiang/ansible-jupyter:alpine-3.4

  server1:
    ports:
      - 2221:22/tcp
    image: chusiang/ansible-managed-node:ubuntu-14.04

  server2:
    ports:
      - 2223:22/tcp
    image: chusiang/ansible-managed-node:centos-7

  server3:
    ports:
      - 2222:22/tcp
    image: chusiang/ansible-managed-node:debian-8

啟動(dòng)容器

使用 docker-compose up 來(lái)批次秒開(kāi)所有容器!

$ docker-compose up
Starting ch09_server2_1
Starting ch09_server1_1
Starting ch09_server3_1
Creating ch09_control_machine_1
Attaching to ch09_server3_1, ch09_server1_1, ch09_server2_1, ch09_control_machine_1
control_machine_1  | [I 22:29:59.156 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
control_machine_1  | [I 22:29:59.208 NotebookApp] Serving notebooks from local directory: /home
control_machine_1  | [I 22:29:59.209 NotebookApp] 0 active kernels
control_machine_1  | [I 22:29:59.209 NotebookApp] The Jupyter Notebook is running at: http://0.0.0.0:8888/
control_machine_1  | [I 22:29:59.210 NotebookApp] Use Control-C to stop this server and shut down allkernels (twice to skip confirmation).
...

設(shè)定 Ansible 環(huán)境

這部份大多與前一章的 Ansible 用 Jupyter 操控 Ansible (Managed node) 重復(fù),請(qǐng)?zhí)貏e留意 inventory檔案的設(shè)置。

  1. 取得本機(jī)的 IP:凍仁取得的 IP 為 192.168.1.104,請(qǐng)自行修改。

    # GNU/Linux
    $ ifconfig eth0
    
    # macOS
    $ ifconfig en7
    
  2. 取得 Managed node 容器所綁定的 OpenSSH port,請(qǐng)?zhí)貏e留意 0.0.0.0:222?->22/tcp 的部份。

    $ docker-compose ps
            Name                      Command              State          Ports
    -------------------------------------------------------------------------------------
    ch09_control_machine_1  docker-entrypoint.sh jupyt ...  Up     0.0.0.0:8888->8888/tcp
    ch09_server1_1          /usr/sbin/sshd -D               Up     0.0.0.0:2221->22/tcp
    ch09_server2_1          /usr/sbin/sshd -D               Up     0.0.0.0:2223->22/tcp
    ch09_server3_1          /usr/sbin/sshd -D               Up     0.0.0.0:2222->22/tcp
    
  3. 進(jìn)入 Jupyter notebook 網(wǎng)站 (http://localhost:8888/)。

  1. 若不想通過(guò) Jupyter 操作 Ansible,可直接進(jìn)入容器里操作,但要記得切換到 /home 目錄底下。

    # 從 Host OS 進(jìn)入容器。
    $ docker exec -it ch09_control_machine_1 sh
    / #
    
    # 切換目錄。
    / # cd /home
    
    # 列出 /home 底下的檔案。
    /home # ls -1
    ansible.cfg
    ansible_on_jupyter.ipynb
    inventory
    setup_jupyter.yml
    
  2. 修改 inventory 檔案,并填入步驟 1 取得的 IP 和步驟 2 取得的 OpenSSH port。這次容器的 Port mapping 將會(huì)依照 docker-compose.yml 所定義的內(nèi)容建立,不像原先得一個(gè)個(gè)的手動(dòng)設(shè)定。

    server1  ansible_ssh_host=192.168.1.104  ansible_ssh_port=2221
    server2  ansible_ssh_host=192.168.1.104  ansible_ssh_port=2222
    server3  ansible_ssh_host=192.168.1.104  ansible_ssh_port=2223
    

    請(qǐng)勿在這個(gè) Lab 使用 localhost 和 127.0.0.1 的位址,這會(huì)讓 Control Machine 一直對(duì)自己找 Managed node。在這里我們是把 Managed node 的 OpenSSH port 綁在 Host OS 1 上,而不是 Control Machine 的容器里。

  3. 環(huán)境建置完成!現(xiàn)在可以到 Control Managed (Jupyter + Ansible) 上對(duì)各個(gè) Managed node (Ubuntu 14.04, CentOS 7, Debian 8) 進(jìn)行操作了。

Play Ansible

現(xiàn)在我們可以通過(guò) Ansible 操控 3 個(gè) Managed node 了,記得把 inventory 的部份從 localhost 改成 all喔!

2016-12-09-ansible-jupyter-ping.gif

后話

改用 Docker Compose 管理容器后,我們可以一次對(duì)所有容器進(jìn)行操作,并大幅簡(jiǎn)化建置復(fù)雜 Ansible 練習(xí)環(huán)境的操作流程!

以上,希望大家會(huì)喜歡簡(jiǎn)化過(guò)的 Docker Compose 流程。:D

相關(guān)連結(jié)


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)