DevOps課程-Configuration Management with Ansible 19
Use “community.docker” Ansible Collection
前一篇最後有寫到一個測試docker pull是透過command module
並且一般會使用command或shell兩個module只在真的沒有專屬module才用
因為這兩個沒有state的管理(i.e.會一直執行)
但實際上docker有專屬的module可以使用
查找會看到一堆:
實際要找的會是"docker_image"
找到的module名稱組成如下:
其中範例更是會使用這樣完整名稱(FQDN):
但是在ansible.builtin底下的就不用
這邊Nana做一個示範針對舊版Ansible只用module name執行時候
Ansible是怎麼轉化成FQDN的:
#Nana執行另一個腳本,加上-vv:
ansible-playbook deploy-docker-new-user.yaml -vv
會看到底下:
如上看到Ansible自動解析成FQDN名稱
但是我們應當還是要自行寫成FQDN
以免被轉成我們不想要的namespace或collection
因為module name很可能會有重複的
尤其是針對Ansible 2.10之後一定要寫成FQDN
Pull Docker Image
這邊就改寫為如下:
但是執行上會錯誤(講師畫面):
因為在使用這個module的時候會要求事先被控機要安裝python 針對docker的套件(不論py2或py3):
放大講師的錯誤訊息看到:
所以回到腳本最上面安裝的Play中
#主控機上執行:
ansible-playbook deploy-docker.yaml
我這邊執行後還是有錯:
這邊有確認到主控機上py3版本是:
重要的被控機:
看起來有符合錯誤提示的要求
但是錯誤提示到還有urllib3套件問題(我找到這篇)
所以嘗試安裝該套件:
執行就正常了:
另外講師有提到在DigitalOcean上的Linux不需要裝pip的docker套件
DigitalOcean上的Linux預設就有
Write 5th Play Start docker Containers
移除前面的Pull redis的Play
然後嘗試將其他課程完成的docker-compos.yaml檔案
可以在課程的這裡找到公開的git連結找到這份檔案:
裡面有一個私有image,及兩個公開image是在講師的docker hub的庫裡面
內容長這樣:
複製一份到ansible執行目錄,然後撰寫Play來傳遞到被控機台後執行!!
原本Test移除改成如下:
但是這邊要能夠取得講師的私有image:
所以過程會有要憑證登入才能取得該image的問題
就像直接在被控機上執行pull指令也會遇到:
所以要使用到可以登入docker hub的modul
實際登入的會是URL:https://index.docker.io/v1
另外密碼會是用變數形式,並且用prompt方式提供(執行的時候輸入)
因為我是跳著上課,並沒有這個image在我的docker hub裡
以下就擷取講師畫面
初步寫成如下:
講師畫面會是這樣,要輸入密碼:
最終就是成功執行:
並且被控機EC2上就可以正常pull該image,因為已經有對應的docker憑證檔
另一種寫法就是塞到變數檔(例如檔案名稱叫project-vars)去
腳本改成這樣即可執行:
接著動作就是執行被控機啟動docker-compose啟動指令
#類似直接執行,但是要改用Ansible腳本Play實現:
docker-compose -docker-compose.yaml up
最終變成:
最後講師還是遇到被控機pip的docker-compose套件問題:
所以前面pip只安裝docker還不夠,再加安裝docker-compose
最終講師成功畫面看到:
到被控機台上面看到:
Execute Playbook on new server
講師也是用tf直接移除被控機,然後立刻apply後建立新機台
然後用新機台IP給Ansible去設置
調整hosts檔案內的docker_server對應的IP
這時候重複執行以上Ansible腳本會有最後一個錯誤要修正
會出現再執行到全新的被控機的時候
這邊問題在於:
所以簡單修正就是蒐集資訊的步驟跳過:
執行後:
看到正常:
到新機台也確實能看到:
Make the Playbook more generic
這邊帶入一個重要概念是:
盡可能地讓Playbook可以重複使用
(Try to make the Playbook as re-usable as possible!)
為了讓目前這份Playbook可以更廣泛地處理問題
會做一部分調整(不再針對ec2-user,而是創建新的User)
所以先調整該份YAML檔名從
deploy-docker.yaml -->deploy-docker-ec2-user.yaml
然後並複製一份叫deploy-docker-new-user.yaml
調整deploy-docker-new-user.yaml裡面使用到ec2-user改成創建新user
原本這段移除:
變成:
後面每一步都變成使用上述這個user
甚至建立user並且設定groups部分改為變數提供:
所以當前課程必要的Ansible檔案內容如下:
ansible.cfg:
deploy-docker-ec2-user.yaml:
deploy-docker-new-user.yaml:
docker-compose-full.yaml:
hosts:
project-vars:
#然後執行以下動作創建新的local branch儲存到Github ansible這個Repo去:
git checkout -b RunDockerApplications
git add .
git commit -m "RunDockerApplications"
git push -u origin RunDockerApplications
(然後敲帳號跟token)