GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
字體大小: +
4 分鐘閱讀時間 (800 個字)

Ansible 初體驗 (安裝 Docker)


tags: Ansible



Ansible 初體驗 (安裝 Docker)







一、Ansible 是什麼?




Ansible 是一個可以自動化建立硬體架構環境相關,也就是各位也許有聽過的 Infrastructure as code。




以往要透過很多的 shell script 搭配 ssh 才能達到的功能,網路上都已經有很多的 role/module/playbook 已經可以達到,且只要統一操作 ansible host 就可以同時操作多台機器。








 

二、安裝 Ansible

利用 yum 安裝 ansible

指令: yum -y install ansible

如上圖,透過 yum 很方便就能安裝了。

設定 /etc/ansible/hosts

如上圖,在剛安裝好 ansible 的時候,會在 /etc/ansible 下產生一些範例的設定檔,為了怕改壞,我們先備份一下 hosts 這個檔案。

指令: cp hosts hosts-bak

接著我們要在 hosts 這個檔案中設定一台(或多台)其他機器的資訊,後續操作時可以直接透過這個檔內定義的 domain/ip,不用再一台一台 ssh 進去。

在此我們只會設定一台接著要安裝 Docker 的機器其 IP 資訊如下:

建立 ssh key

為了讓 ansible 所在的機器能連線到其他機器,
我們必須先建立一組 ssh key 方便之後登入用。

  1. 建立 key
    指令: ssh-keygen -t rsa

     

    如上圖,指令輸入後就會在 /root/.ssh 建立一組 private/public key。

  2. 將 key 複製到要操作的機器上
    指令: ssh-copy-id root@192.168.2.223

     

    如上圖,複製好 key 之後,即可直接透過 ssh 指令連線至 [docker] ,不用再輸入該帳號登入的密碼。

測試

在建好 key 之後可以測試一下 ansible 是否能正常操作 client,作一個簡單的 ping 就好:
指令: ansible docker -m ping

看到上圖的訊息就代表成功了!

三、利用 Playbook 安裝 docker/docker-compose

建立 playbook

在成功設置 ansible 之後我們想透過它在 client 上安裝 docker,可以透過 playbook 的機制處理,首先定義 docker.yml 如下:

如上圖,主要是分別透過幾個步驟:

  1. 確定所有的 package 都是最新的
  2. 檢查 Docker 是否已經安裝
  3. 下載安裝 Docker 的 shell
  4. 安裝 Docker
  5. 移除安裝 Docker 的 shell
  6. 在 systemd 上啟用 docker.service
  7. 啟動 Docker daemon
  8. 檢查 docker-compose 是否已安裝
  9. 下載並安裝 docker-compose

每個步驟都可以給定 name,方便在執行時知道目前到哪個步驟了,或是設定在 when 的條件成立時才執行,比方說如果 Docker 已安裝了,就不會再重裝一次,這也是 Ansible 很強調的 idempotence (不管執行幾次 playbook 都會是最初所定義的狀態)。

執行

設定好 playbook 之後就可以透過 ansible 來執行看看了!
指令: ansible-playbook -s docker.yml

如上圖,ansible 會依 playbook 中定義的 task 依序執行,
再來可以去 [docker] 這台機器上看看是不是真的有裝好 docker/docker-compose

看來是有正確安裝!

以上,其實 Ansible 的作用不僅僅於此,還有更多強大的功能等著各位客倌去使用,自動化的日子不遠矣!

×
Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

The frame attempting navigation is sandboxed, and ...
Docker registry 刪除特定 Tag

相關文章

Comment for this post has been locked by admin.
 

評論