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