Golang Web應用 創建docker鏡像筆記(win 平臺)

記錄的是 本地編譯好了再創建容器鏡像的方法 ,這樣子生成的鏡像文件比較小,方便分發部署

win 平臺需要設置golang交叉編譯 生成linux可執行文件

CMD下:

Set GOOS="linux"
Set GOARCH="amd64"

PowerShell下:

$env:GOOS="linux"
$env:GOARCH="amd64"

這兩個參數吃常用選項:
GOARCH 目標平臺(編譯後的目標平臺)的處理器架構(386、amd64、arm) 

GOOS 目標平臺(編譯後的目標平臺)的操作系統(darwin、freebsd、linux、windows)

然後再編譯 執行: go build .

此時會生成linux下的可執行文件

下一步,在項目根目錄下編寫 Dockerfile。

FROM alpine:latest

MAINTAINER yesicoo [email protected]

ADD GoQRS /usr/local/bin/

ENTRYPOINT ["/usr/local/bin/GoQRS"]

第一行:由於我已經編譯好了linux上的可執行文件 所以我只需要pull個最小的linux鏡像就可以直接運行了 這個鏡像很小 只有6MB。

第二行:設置鏡像的創作者和郵箱

第三行:將本地文件拷貝至即將創建好的docker容器鏡像內 GoQRS爲本次項目生成的Linux平臺可執行文件 拷貝到 /usr/local/bin 目錄下

第四行:配置容器鏡像啓動時的執行文件

這樣,一份簡單的文件就寫完成,接下來開始創建這個容器鏡像:
執行:docker build -t yesicoo/goqrs . (後面這個點不能丟)

yesicoo/goqrs 這個是生成的鏡像名稱(tag) 可以隨便取 要小寫

執行過程:

PS C:\Project\Qing\GoQR> docker build -t yesicoo/goqrs .
Sending build context to Docker daemon  17.66MB
Step 1/4 : FROM alpine:latest
latest: Pulling from library/alpine
050382585609: Pull complete
Digest: sha256:6a92cd1fcdc8d8cdec60f33dda4db2cb1fcdcacf3410a8e05b3741f44a9b5998
Status: Downloaded newer image for alpine:latest
 ---> b7b28af77ffe
 ---> Running in 0d7880f26332
Removing intermediate container 0d7880f26332
 ---> 2b333ea3cd0c
 ---> bb6bfec71739
 ---> Running in 7fa33b332550
Removing intermediate container 7fa33b332550
Successfully built b547d669b760
Successfully tagged yesicoo/goqrs:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. 

It is recommended to double check and reset permissions for sensitive files and directories.
PS C:\Project\Qing\GoQR> docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
yesicoo/goqrs latest b547d669b760 22 seconds ago 23.2MB
alpine latest b7b28af77ffe 3 hours ago 5.58MB

 

因爲是在win下面生成創建的 所以會有個平臺目錄權限的提示,這個視情況判斷是否重要。

上面的執行過程中還有一個坑!!!

因爲我是在win下進行操作的,安裝的docker也是官方的win平臺的 docker desktop。所以安裝後默認生成後的Docker主機是win平臺

默認情況下執行Build命令時會提示:

latest: Pulling from library/alpine
no matching manifest for unknown in the manifest list entries

此時需要切換到linux平臺:右擊小鯨魚托盤圖標 -> 選擇 Switch to Linux containers -> 彈出切換框 確認選擇 
等待重啓執行成功後 再執行命令 就能成功pull alpine鏡像 進行創建了 ,也就會有上面的平臺目錄權限的提示。

接下來 執行創建好的這個鏡像 

docker run -i -d --name=goqrs -p 8080:8080 yesicoo/goqrs

-- name 是給執行的容器起個名字

-p 是本地端口和容器內執行程序的端口映射

最後的參數是上面創建的時候 輸入的tag。出現一串字符串ID 那就啓動成功了 可以訪問端口進行測試

docker ps -a  查看所有容器 
docker logs -f <name> 查看輸出日誌

相關知識點文章:

Dockerfile: https://www.cnblogs.com/lighten/p/6900556.html
Golang交叉編譯:https://studygolang.com/articles/14376

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章