自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一套適用于 CI 的 Go 項目容器化構建方案

開發(fā) 前端
CI任務負責根據代碼倉的tag拉取對應版本的代碼,而后構建出Go項目的二進制運行文件再把運行文件打包到項目的Docker鏡像中,CD任務則會把項目部署到服務K8s集群約定的地方上去運行。

Go實戰(zhàn)專欄的項目到這里,在功能上的開發(fā)已經全部完成,接下來我們花兩節(jié)講一下Go項目的容器化部署。

想要把讓項目能在容器中運行,首先得把它打包到對應的Docker鏡像里才行,而且一般公司部門中都會有類似CI、CD工具負責對項目進行構建和部署。

CI任務負責根據代碼倉的tag拉取對應版本的代碼,而后構建出Go項目的二進制運行文件再把運行文件打包到項目的Docker鏡像中,CD任務則會把項目部署到服務K8s集群約定的地方上去運行。

那么這一節(jié)我們就來聊一聊在CI任務中怎么把我們項目指定版本的代碼構建成能運行服務容器的Docker鏡像,這里主要分享的還是思路,具體在CI工具中怎么配置任務還要看所使用的CI工具以及需求再做調整,有可能會跟今天給出的方案不完全一樣,但是整體思路還是不會有太大偏差的。

項目構建Docker鏡像的思路

Go項目想容器化部署需要先把項目構建打包成Docker鏡像,這里分享一個可以拉取 go-mall項目不同tag版本代碼構建項目Docker鏡像的方法。

這里我們使用Docker的多階段打包功能:

  • 一階段:拉取指定版本的代碼,把Go項目的代碼編譯成二進制文件
  • 二階段:把上階段變異好的項目二進制文件放到一個更基礎的鏡像中,這既能減少要運行項目容器的鏡像的尺寸,又因為鏡像中沒有拉取和構建代碼的那些依賴(go 環(huán)境、拉代碼用的ssh key等),讓容器的安全性更高。

整個Dockerfile的明細如下:

圖片圖片

這里我們在鏡像中用ARG命令種下了兩個構建參數

  • SSH_PRIVATE_KEY
  • GIT_TAG

它們需要我們執(zhí)行docker build 時把代碼的tag版本號還有自己的SSH 私鑰傳給鏡像,這樣就能讓Docker拉取對應版本的代碼了。在Docker中拉取代碼使用的是機器上的私鑰(這里的機器指的是咱們自己的電腦,在公司的系統(tǒng)環(huán)境里就是專門做CI的機器,或者配置到Jenkins的配置項),除了用ssh key 外還可以使用 GitHub / GitLab Token作為拉取代碼時的身份憑證。

構建 Docker 鏡像

docker build 命令構建鏡像時我們需要使用 --build-arg參數傳遞 SSH 私鑰和 Git tag:

運行 dokcer build 前記得把工作目錄切換到Dockerfile所在的位置

docker build \
  --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)" \
  --build-arg GIT_TAG=c5 \
  -t go-mall:v5 .

這里我們使用的是c5 這個代碼版本: https://github.com/go-study-lab/go-mall/releases/tag/c5

為啥用這個版本呢,因為c6的代碼在容器里運行還需要連接數據庫,這個我們放到下節(jié)在K8s上運行項目上再做。

運行Go項目Docker 容器

項目的鏡像有了,接下來我們可以使用鏡像運行容器做一下測試,運行容器的命令如下,每個參數的具體作用我都寫在了注釋里,一看便知。

docker run -d  \ # -d 參數讓docker在后臺運行
-p 8080:8080 \ # 映射容器端口8080到宿主機的8080端口 
-v /tmp/applog:/home/applog/ \ # 把容器里的日志目錄掛載到本地電腦的/tmp/applog目錄上
-e ENV=test --rm \ # 指定環(huán)境變量, 關閉容器時刪除容器
--name go-mall \ # 指定容器名
go-mall:v5 # 要運行的鏡像名

運行容器后,你可以使用以下命令檢查容器是否正在運行:

docker ps

這個命令會列出所有運行中的容器。如果容器成功運行,你會看到類似下面的輸出:

圖片圖片

這里運行容器時我們指定的ENV環(huán)境變量是test,所以項目在啟動時會加載config/application.test.yaml 配置文件。

在這個配置文件里我們設置的項目應用日志的路徑是:"/home/applog/go-mall/go-mall.log"

圖片圖片

這個目錄在容器中,不過我們在運行時使用 -v /tmp/applog:/home/applog/ 把它掛載到了電腦的/tmp/applog目錄下,這里我們訪問一個測試接口看下效果。

直接訪問c5 代碼版本里的接口,然后去我們電腦的/tmp/applog 目錄下驗證一下成果。

圖片圖片

可以看到容器中的應用日志能正常地收集到外部掛載的日志文件中。

責任編輯:武曉燕 來源: 網管叨bi叨
相關推薦

2021-01-08 08:06:29

容器ELK7.10架構

2023-08-09 13:46:39

2025-01-02 14:56:42

開源.NET開發(fā)

2009-03-03 13:00:00

虛擬化技術vmwarexen

2024-04-22 09:12:36

CSSflexgrid

2011-12-08 09:43:56

虛擬化vmwareVMware Fusi

2023-11-30 08:55:15

LinuxLibreOffic

2022-09-02 17:47:46

Linux筆記應用

2019-10-22 11:11:16

大數據工具容器

2020-05-12 14:20:47

GitHub 系統(tǒng)微軟

2024-11-26 11:39:29

2024-12-09 09:25:30

2011-07-06 09:56:57

2019-08-23 11:00:00

云計算網絡安全

2023-03-08 12:35:59

綜合布線

2021-11-03 10:14:31

PowerEdge

2018-10-24 10:43:13

2021-12-13 12:56:26

Linux瀏覽器

2021-03-18 10:46:00

Linux監(jiān)控工具命令

2011-05-13 09:56:23

Ubuntu 11.0
點贊
收藏

51CTO技術棧公眾號