使用dockerfile建立映象遇到的問題
阿新 • • 發佈:2021-09-06
1、在dockerfile裡面使用本地映象
假設本地有golang:1.16映象,你想使用,你可能回這麼寫
FROM golang:1.16
但是這樣的話,docker會去docker.io拉取golang:1.16而不是使用本地的映象
那應該怎麼辦呢,其實很簡單。修改下tag,改成docker.io上的映象tag,如docker.io/golang:1.16。即前面加上倉庫地址,可以是docker.io也可以是個人私有倉庫
這樣的話docker就會使用本地的映象了。所以在dockerfile裡面使用映象要記得加上倉庫地址哦
2、除錯busybox、distroless等映象
busybox和distroless是linux的閹割版,不包含bash的。所以
docker run -ti xxx /bin/bash是不管用的。那怎麼辦呢
如果用distroless可以通過debug標籤,下載debug版本的
然後使用/busybox/sh 就可以了
distroless映象很小,但是裡面有/busybox這個目錄下有常用的一些命令,可以通過如/busybox/sh -c "mkdir xxx"來執行建立目錄的操作。
busybox類似。不多說
3、使用distroless映象來執行golang應用
單單使用distroless映象是無法完成golang程式的編譯的,我們需要藉助下其他映象。如官方提供的golang
FROM xxx/golang:1.16 asbuilder COPY XXX/ XXX/ 拷貝其他檔案 RUN GOOS=linux等其他環境資訊 go build -a -o xxx main.go FROM xxx/distroless:nonroot COPY --from=builder 從上面將編譯好的二進位制檔案拷貝過來 ENTRYPOINT [./xxx]
這樣做之後會發現編好的映象很小。而且不用擔心有什麼linux的漏洞,因為distroless映象閹割了很多功能,所以更安全。
其他之後遇到補充