最近剛好有需求要串接 GCR (Google Container Registry),專案如果是搭配 GCP 服務,個人建議就直接用 GCR 了。本篇要教大家如何透過 Ansible 管理遠端機器直接登入 GCR,透過特定的帳號可以直接拉 Image,接著用 docker-compose 來重新起動服務,這算是最基本的部署流程,那該如何用 Ansible 登入呢?請看底下教學。
使用 ansible docker_login 模組
Google 提供了好幾種方式來登入 Docker Registry 服務,本篇使用『JSON 金鑰檔案』方式來長期登入專案,開發者會拿到一個 JSON 檔案,在本機電腦可以透過底下指令登入:
如果沒有支援 password-stdin
則可以使用底下:
請注意這邊的使用者帳號統一都是使用 _json_key
,而在 Ansible 則是使用 docker_login 模組
注意 password
欄位,請將 gcr.json
放置在 role/templates
目錄,透過 lookup 方式並轉成 string 才可以正常登入,網路上有解法說需要在 password
前面加上一個空白才可以登入成功,詳細情況可以參考這篇。
使用 Drone 自動化上傳 Image
講 Drone 之前,我們先來看看 GitLab 怎麼上傳,其實也不難:
|
|
透過 gcloud 就可以快速自動上傳。而使用 Drone 設定也是很簡單:
|
|
其中 password
可以透過後台將 json 資料寫入。這邊有幾個重要功能列給大家參考
- 使用
cache_from
加速 - 使用
auto_tag
快速部署標籤
這兩項分別用在什麼地方,cache_from
可以直接看我之前寫過的一篇『在 docker-in-docker 環境中使用 cache-from 提升編譯速度』裡面蠻詳細介紹,並且有影片。而 auto_tag 最大的好處是在 release 開源專案 Image,只要你的 tag 有按照標準格式,像是如果是打 v1.0.1
這時候 Drone 會分別產生三個 Image: 1
, 1.0
, 1.0.1
,下次又 release v1.0.2
,這時候 1.0
就會指向 1.0.2
,類似這樣以此類推,方便其他使用者抓取 Image。這是在其他像是 GitLab 無法做到,應該說不是無法做到,而是變成要自己寫 script 才能做到。
教學影片
底下是教您如何使用 docker cache 機制,如果你的 Image 特別大,像是有包含 Linux SDK 之類的,就真的用 cache 會比較快喔。
歡迎訂閱我的 Youtube 頻道: http://bit.ly/youtube-boy
更多實戰影片可以參考我的 Udemy 教學系列
- Go 語言實戰課程: http://bit.ly/golang-2019
- Drone CI/CD 自動化課程: http://bit.ly/drone-2019
See also
- 開源專案 Drone CI/CD 平台真的免費嗎?
- Go 1.16 推出 Embedding Files
- 用 Docker 每天自動化備份 MySQL, Postgres 或 MongoDB 並上傳到 AWS S3
- 如何將前端網站打包成 Docker Image
- Go 1.15 新增 Module cache 環境變數
- 使用 Docker BuildKit 加速編譯 Image
- 用 GitHub Actions 上傳 Docker Image 到 AWS ECR
- Docker 推出官方 GitHub Actions 套件
- Go Modules 處理 Private GIT Repository 流程
- 用五分鐘安裝好 Drone 搭配 GitHub 自動化環境