成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

項目構建Docker鏡像的思路

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

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

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

整個Dockerfile的明細如下:

圖片圖片

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

  • SSH_PRIVATE_KEY
  • GIT_TAG

它們需要我們執行docker build 時把代碼的tag版本號還有自己的SSH 私鑰傳給鏡像,這樣就能讓Docker拉取對應版本的代碼了。在Docker中拉取代碼使用的是機器上的私鑰(這里的機器指的是咱們自己的電腦,在公司的系統環境里就是專門做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的代碼在容器里運行還需要連接數據庫,這個我們放到下節在K8s上運行項目上再做。

運行Go項目Docker 容器

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

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

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

docker ps

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

圖片圖片

這里運行容器時我們指定的ENV環境變量是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開發

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

大數據工具容器

2024-12-09 09:25:30

2024-11-26 11:39:29

2011-07-06 09:56:57

2020-05-12 14:20:47

GitHub 系統微軟

2019-08-23 11:00:00

云計算網絡安全

2023-03-08 12:35:59

綜合布線

2013-02-21 10:13:25

2021-11-03 10:14:31

PowerEdge

2011-05-13 09:56:23

Ubuntu 11.0

2021-03-18 10:46:00

Linux監控工具命令

2021-12-13 12:56:26

Linux瀏覽器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91久久精品日日躁夜夜躁国产 | 亚洲成人在线视频播放 | 视频1区2区 | 中文在线www | 久久精品亚洲精品国产欧美kt∨ | 午夜网站视频 | 国产精品久久久久久久久久 | 中文字幕日韩欧美一区二区三区 | 99re视频在线免费观看 | 久久99久久99久久 | 亚洲精品aⅴ | 在线看亚洲 | 欧美福利 | 91成人在线视频 | 午夜精品久久久久久久久久久久久 | 久久爆操 | 韩国精品在线观看 | 蜜桃视频在线观看免费视频网站www | 国产女人叫床高潮大片免费 | 欧美视频在线看 | 久久高潮 | 国产a区 | 欧美日韩久久 | 九九综合| 中文区中文字幕免费看 | 精品久久久久久久久久久久久 | 中文字幕在线免费观看 | 一区二区三区韩国 | 欧美精品久久久久 | 亚洲小视频 | 日本成人久久 | 日本精品久久 | 在线观看日韩 | 久久精品免费观看 | 美女国产 | 国产资源在线观看 | 亚洲伊人精品酒店 | 亚洲精品1区 | 欧洲成人| 九九导航 | 国产视频一区二区三区四区五区 |