本文介紹如何在本地制作Docker鏡像,并以鏡像方式將Go應用部署到Serverless 應用引擎 SAE(Serverless App Engine)。
前提條件
開通阿里云容器鏡像ACR服務并創建實例,個人版實例和企業版實例皆可。
步驟一:準備項目
下載Demo。
Demo內的Dockerfile內容如下:
# Golang版本;Alpine鏡像的體積較小。 FROM golang:1.16.6-alpine3.14 as builder # 替換Alpine鏡像,方便安裝構建包。 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 安裝構建階段的依賴。 RUN apk --update add gcc libc-dev upx ca-certificates && update-ca-certificates # 將代碼復制到構建鏡像中。 # 注意地址不要在GOPATH中。 ADD . /workspace WORKDIR /workspace # 掛載構建緩存。 # GOPROXY防止下載失敗。 RUN --mount=type=cache,target=/go \ env GOPROXY=https://goproxy.cn,direct \ go build -buildmode=pie -ldflags "-linkmode external -extldflags -static -w" \ -o /workspace/gin-hello-world # 運行時鏡像。 # Alpine兼顧了鏡像大小和運維性。 FROM alpine:3.14 EXPOSE 8080 # 方便運維人員安裝需要的包。 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 創建日志目錄等。 # RUN mkdir /var/log/onepilot -p && chmod 777 /var/log/onepilot && touch /var/log/onepilot/.keep # 復制構建產物。 COPY --from=builder /workspace/gin-hello-world /app/ # 指定默認的啟動命令。 CMD ["/app/gin-hello-world"]
在Demo所在目錄,執行以下命令,構建鏡像。
docker build . -t gin-example
本地驗證。
指定端口映射,格式為
主機端口:容器端口
,運行鏡像。docker run -p 127.0.0.1:8080:8080/tcp gin-example
執行以下命令,查看請求是否返回正常。
curl http://127.0.0.1:8080/
輸出如下:
步驟二:制作鏡像
在容器鏡像服務控制臺創建鏡像倉庫。
個人版和企業版實例均適用本文的操作,本文以個人版實例為例。具體操作,請參見以下文檔:
個人版實例:構建倉庫與鏡像
企業版實例:使用企業版實例構建鏡像
構建并推送鏡像。
您可以在目標鏡像倉庫的基本信息頁面的鏡像指南頁簽查詢具體命令。更多信息,請參見以下文檔:
個人版實例:使用個人版實例推送拉取鏡像
企業版實例:使用企業版實例推送和拉取鏡像
執行以下命令,構建鏡像。
docker build --tag go-demo:v1 .
執行以下命令,登錄遠端鏡像倉庫。
docker login --username=<鏡像倉庫登錄名> registry.<regionId>.aliyuncs.com
示例如下:
docker login --username=****@188077086902**** registry.cn-hangzhou.aliyuncs.com
在返回結果中輸入密碼,如果顯示
login succeeded
,則表示登錄成功。如何設置密碼,請參見設置鏡像倉庫登錄密碼。執行以下命令,給鏡像打標簽。
docker tag <ImageId> registry.<regionId>.aliyuncs.com/****/go-demo:<鏡像版本號>
ImageId
:鏡像ID。registry.<regionId>.aliyuncs.com/****/go-demo
:鏡像倉庫地址。
示例如下:
docker tag go-demo:v1 registry.cn-hangzhou.aliyuncs.com/****/go-demo:v1
執行以下命令,推送鏡像至個人版實例。
docker push registry.<regionId>.aliyuncs.com/****/go-demo:<鏡像版本號>
示例如下:
docker push registry.cn-hangzhou.aliyuncs.com/****/go-demo:v1
成功推送后,您可以登錄容器鏡像服務控制臺,在目標鏡像倉庫的鏡像版本頁面查看推送的版本。
步驟三:部署鏡像
以下僅介紹本文相關的配置項,其余信息,請參見通過鏡像部署Web應用。
在SAE控制臺>應用管理>Web應用,從頂部菜單欄選擇地域,然后單擊創建應用。
設置應用部署方式為選擇鏡像部署,并單擊設置鏡像,選擇您已準備好的應用鏡像倉庫和鏡像版本。為定位到所需的鏡像倉庫,請單擊我的阿里云鏡像,并選擇鏡像倉庫所在的鏡像服務版本和命名空間。
將HTTP監聽端口設置為鏡像對外提供服務的端口。
單擊一鍵創建應用,并等待應用部署完成。
步驟四:訪問應用
SAE為您的應用提供默認的訪問地址,您可以通過公網訪問應用或通過私網訪問應用;在實際的生產環境中,建議您為應用關聯自定義域名,并使終端用戶通過自定義域名訪問應用。