最近開發了一個小程序,到了部署階段,學習了部署的步驟,總結如下:
- 下載基礎鏡像
golang編譯使用的基礎鏡像有以下三種:
1.golang:onbuild
構建簡單,包含編譯是的所有運行環境,但體積較大
Dockerfile配置如下:
FROM golang:onbuild
EXPOSE 8080
2.golang:alpine
構建複雜, 需執行編譯動作,體積小
Dockerfile配置如下:
FROM golang:alpine
WORKDIR /app
ADD . /app
RUN cd /app && go build -o goapp
EXPOSE 8080
ENTRYPOINT ./goapp
3.golang:alpine AS build-env
構建複雜,體積更小,攜帶工具少,安全性更高(推薦)
Dockerfile配置如下:
FROM golang:alpine AS build-env
WORKDIR /app
ADD . /app
RUN cd /app && go build -o goapp
FROM alpine
RUN apk update && \
apk add ca-certificates && \
update-ca-certificates && \
rm -rf /var/cache/apk/*
WORKDIR /app
COPY --from=build-env /app/goapp /app
EXPOSE 8080
ENTRYPOINT ./goapp
- 對基礎鏡像打tag,上傳至私有鏡像倉庫(方便後面編譯的時候直接調用私有鏡像倉庫鏡像)
docker dag imageID 私有鏡像地址/golang:onbuild --爲鏡像打tag
docker login 私有鏡像地址 --登錄私有鏡像,此處有兩點需要注意,
一是要在daemon.json文件中添加insecure-registries,注意格式要正確,然後重啓docker,如果啓動報錯,請檢查/etc/systemconfig/docker(參考https://www.cnblogs.com/John5/p/docker.html);
{
"insecure-registries":["私有鏡像地址"]
}
二是網絡連接超時,我在hosts添加了域名解析後OK;
登陸成功後執行push語句,將鏡像上傳到鏡像倉庫
docker push 私有鏡像地址/golang:onbuild
- 修改Dockerfile
進入golang開發的項目文件根目錄,找到Dockerfile,修改參照如下
FROM 私有鏡像地址/golang:onbuild
MAINTAINER 維護者名字
EXPOSE 3333
- 執行編譯
這裏我將項目文件所在目錄掛載到docker虛機上,切換到項目文件根目錄,執行docker build -f Dockerfile . (記錄,最後這個點千萬別忘了,這代表當前目錄),然後執行docker images,你看到已經生成新的鏡像文件,拿着這個鏡像文件去部署就OK了。