Docker部署Go項(xiàng)目發(fā)布鏡像到倉庫
正文
大家都知道Go編譯后是可執(zhí)行的二進(jìn)制文件,一般我們的項(xiàng)目會(huì)部署在Linux中,Docker也是現(xiàn)在常用的部署方案,伸縮擴(kuò)容、遷移都更方便。該篇文章教大家使用Docker來部署go項(xiàng)目,最后把Docker鏡像發(fā)布啊鏡像倉庫(這里使用阿里云鏡像倉庫),公司內(nèi)部一般發(fā)布到公司私有鏡像倉庫,方便其他服務(wù)器拉取鏡像部署等。
一、安裝 Docker
linux服務(wù)器使用curl下載快速安裝的shell腳本
curl -fsSL get.docker.com -o get-docker.sh
下載完成后,可以ls命令查看一下。已經(jīng)存在的話,使用sh命令執(zhí)行這個(gè)腳本
sh get-docker.sh
注意如果不是root用戶,需要使用sudo su獲取超級(jí)管理員權(quán)限。
安裝完成后啟動(dòng)一下Docker Server
systemctl start docker
使用docker version命令能看到Client和Server就啟動(dòng)成功了。
二、使用 Docker 部署 Go 項(xiàng)目
這里我使用一個(gè)自己開發(fā)的Gin項(xiàng)目,首先在項(xiàng)目跟目錄下創(chuàng)建一個(gè)Dockerfile文件

寫入以下內(nèi)容:
# 指定基礎(chǔ)的go編譯鏡像
FROM golang:alpine as build
# 指定go的環(huán)境變量
ENV GOPROXY=https://goproxy.cn \
GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 指定工作空間目錄,會(huì)自動(dòng)cd到這個(gè)目錄
WORKDIR /build
# 把項(xiàng)目的依賴配置文件拷貝到容器中,并下載依賴
COPY go.mod .
COPY go.sum .
RUN go mod download
# 把項(xiàng)目的其他所有文件拷貝到容器中
COPY . .
# 編譯成可執(zhí)行二進(jìn)制文件
RUN go build -o app .
# 指定新的運(yùn)行環(huán)境,最終的運(yùn)行會(huì)基于這個(gè)壞境,使得最終的鏡像非常小
FROM scratch as deploy
# 把編譯環(huán)境中打包好的可執(zhí)行文件和配置文件拷貝到當(dāng)前鏡像
COPY --from=build /build/app /
COPY --from=build /build/conf ./conf
CMD ["/app"]
在項(xiàng)目根目錄使用以下命令來構(gòu)建鏡像
docker build -t gotodo .
構(gòu)建好后使用docker images來查看我們打包好的鏡像

最終運(yùn)行容器:
docker run -itd -p 7000:7000 gotodo
三、上傳鏡像到鏡像倉庫
把我們構(gòu)建好的鏡像上傳到鏡像倉庫,方便我們跨服務(wù)器部署或伸縮容等,這里我使用阿里云個(gè)人免費(fèi)鏡像倉庫演示,公司內(nèi)部一般搭建私有的鏡像倉庫(與阿里云鏡像倉庫同理)。
首先去阿里云申請(qǐng)并創(chuàng)建下個(gè)人免費(fèi)鏡像倉庫,具體申請(qǐng)方法可百度等,很簡單。
創(chuàng)建時(shí)代碼源選擇本地倉庫
創(chuàng)建好后如下:

我們參考3.將鏡像推送到Registry
- 首先用
docker login在本地登錄 - 再使用
docker tag對(duì)我們剛才的鏡像重新打一個(gè)tag

- 使用
docker push把重新打好tag的鏡像上傳到倉庫

上傳完成后可以在阿里云上看到版本等

最后其他服務(wù)器想拉取這個(gè)鏡像也很簡單,直接
docker pull registry.cn-hangzhou.aliyuncs.com/junkaione/gotodo:v1.0.0
運(yùn)行容器
docker run -itd -p 7000:7000 registry.cn-hangzhou.aliyuncs.com/junkaione/gotodo:v1.0.0
到此,使用 Docker 來部署我們的 Go 項(xiàng)目,及把打包后的鏡像上傳到鏡像倉庫的文章就結(jié)束了,更多關(guān)于Docker部署Go發(fā)布鏡像倉庫的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker-compose如何定義一個(gè)橋接網(wǎng)絡(luò),并為該網(wǎng)絡(luò)配置一個(gè)IP地址池
在DockerCompose中定義橋接網(wǎng)絡(luò)并配置IP地址池,可以實(shí)現(xiàn)服務(wù)的自動(dòng)IP地址分配,通過定義網(wǎng)絡(luò)、指定子網(wǎng)范圍、設(shè)置網(wǎng)關(guān)和啟用自動(dòng)分配功能,可以輕松管理服務(wù)的網(wǎng)絡(luò)配置,確保IP地址在子網(wǎng)范圍內(nèi)且不與其他網(wǎng)絡(luò)沖突,以避免網(wǎng)絡(luò)沖突2025-01-01
利用docker搭建php7和nginx運(yùn)行環(huán)境全過程(官方鏡像)
docker提供了在服務(wù)端分布式的部署應(yīng)用,這樣的好處是方便維護(hù)和升級(jí)。下面這篇文章主要給大家介紹了利用docker搭建php7和nginx運(yùn)行環(huán)境的相關(guān)資料,搭建過程中運(yùn)用的是官方鏡像,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05

