1. 在Goland中連接本地或遠程Docker daemon
1.1 在File->Setting->Build->Docker中配置連接地址
Docker為C/S架構,安裝在服務器上的Docker daemon守護程序為server端,我們可使用Goland的Docker插件作為client端訪問daemon.
如果出現connection fail,則可能是daemon的端口未配置正確,需要進行如下配置。
1.2 打開docker daemon的tcp訪問端口
- 在終端中打開並修改docker的配置文件:
sudo vim /lib/systemd/system/docker.service
- 用#注釋原有的ExecStart,並加入如下配置:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
- 重新加載守護進程:
systemctl daemon-reload
- 重啟docker服務:
systemctl restart docker.service
- 測試2375端口是否已經開啟:
curl http://127.0.0.1:2375/info
1.3 在Goland中查看和使用docker
2. 編譯工程與創建鏡像
2.1 創建Dockerfile
- goland中無創建Dockerfile的內置選項,直接對項目右鍵New->File,然后輸入Dockerfile即可
2.2 多階段構建Docker鏡像
- 向創建的空Dockerfile輸入以下信息,並注意調用配置文件時所使用的相對路徑,鏡像執行時,以main.go所在的目錄為工作目錄,路徑的相對關系以其為參考
- 在多階段構建過程中,使用了多個FROM指令,確保不同階段的生成結果不直接傳遞到下一階段,從而減小Docker鏡像的體積
# 構建:使用golang:1.14版本
FROM golang:1.14 as build
# 容器環境變量添加
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
# 設置當前工作區
WORKDIR /go/release
# 把全部文件添加到/go/release目錄
ADD . .
# 編譯: 把main.go編譯為可執行的二進制文件, 並命名為app
RUN GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -ldflags="-s -w" -installsuffix cgo -o app main.go
# 運行: 使用scratch作為基礎鏡像
FROM scratch as prod
# 在build階段, 復制時區配置到鏡像的/etc/localtime
COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 在build階段, 復制./app目錄下的可執行二進制文件到當前目錄
COPY --from=build /go/release/app /
# 在build階段, 復制yaml配置文件到當前目錄, 此處需要注意調用該配置文件時使用的相對路徑, main.go在當前目錄下執行
COPY --from=build /go/release/config.yaml /
# 啟動服務
CMD ["/app"]
2.3 Goland配置Dockerfile運行環境
- 在Edit Configurations中創建dockerfile配置項,然后安裝下圖對鏡像和容器的名稱、宿主機和容器的端口映射進行設置
- 設置完畢后,點擊界面在右上角的運行按鈕,完成鏡像的構建與容器的安裝,最終將自動運行容器程序
3. 構建
- 完成dockerfile的配置后,開始執行鏡像打包與容器創建過程,該過程需要耗費一定的時間,詳情如下所示:
- 至此,完成的鏡像構建與容器創建的全部過程
4. 重新編譯
- 當項目文件改動時,需要重新構建docker鏡像與容器,此時使用Redeploy即可實現,它將覆蓋原有的舊文件