W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
容器部署即使用?docker
?化部署golang應(yīng)用程序,這是在云服務(wù)時代最流行的部署方式,也是最推薦的部署方式。
在以下我們的示例中,統(tǒng)一使用 ?main
作為項目名稱。
跨平臺交叉編譯是golang的特點之一,可以非常方便地編譯出我們需要的目標(biāo)服務(wù)器平臺的版本,而且是靜態(tài)編譯,非常容易地解決了運行依賴問題。
使用以下指令可以靜態(tài)編譯?Linux
?平臺?amd64
?架構(gòu)的可執(zhí)行文件:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main main.go
生成的?main
?便是我們靜態(tài)編譯的,可部署于?Linux amd64
?上的可執(zhí)行文件。
我們需要將該可執(zhí)行文件?main
?編譯生成?docker
?鏡像,以便于分發(fā)及部署。Golang的運行環(huán)境推薦使用?alpine
?基礎(chǔ)系統(tǒng)鏡像,編譯出的容器鏡像約為20MB左右。
一個參考的?Dockerfile
?文件如下:
FROM loads/alpine:3.8
LABEL maintainer="john@goframe.org"
###############################################################################
# INSTALLATION
###############################################################################
# 設(shè)置固定的項目路徑
ENV WORKDIR /app/main
# 添加應(yīng)用可執(zhí)行文件,并設(shè)置執(zhí)行權(quán)限
ADD ./main $WORKDIR/main
RUN chmod +x $WORKDIR/main
# 添加靜態(tài)資源文件
ADD resource $WORKDIR/resource
###############################################################################
# START
###############################################################################
WORKDIR $WORKDIR
CMD ./main
其中,我們的基礎(chǔ)鏡像使用了?loads/alpine:3.8
?,中國國內(nèi)的用戶推薦使用該基礎(chǔ)鏡像,基礎(chǔ)鏡像的Dockerfile地址:https://github.com/gqcn/dockerfiles ,倉庫地址:https://hub.docker.com/u/loads
隨后使用 ??docker build -t main? .
?指令編譯生成名為?main
?的?docker
?鏡像。
需要注意的是,在某些項目的架構(gòu)設(shè)計中,靜態(tài)文件和配置文件可能不會隨著鏡像進行編譯發(fā)布,而是分開進行管理和發(fā)布。
例如,使用?MVVM
?模式的項目中(例如使用vue框架),往往是前后端非常獨立的,因此在鏡像中往往并不會包含?public
?目錄。而使用了配置管理中心(例如使用?consul/etcd/zookeeper
)的項目中,也往往并不需要?config
?目錄。
因此對于以上示例的?Dockerfile
?的使用,僅作參考,根據(jù)實際情況請進行必要的調(diào)整。
使用以下指令可直接運行剛才編譯成的鏡像:
docker run main
容器的分發(fā)可以使用docker官方的平臺:https://hub.docker.com/ ,國內(nèi)也可以考慮使用阿里云:https://www.aliyun.com/product/acr
在企業(yè)級生產(chǎn)環(huán)境中,?docker
?容器往往需要結(jié)合?kubernetes
?或者?docker swarm
?容器編排工具一起使用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: