1. 程式人生 > 其它 >使用dockerfile建立映象遇到的問題

使用dockerfile建立映象遇到的問題

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 as
builder COPY XXX/ XXX/ 拷貝其他檔案 RUN GOOS=linux等其他環境資訊 go build -a -o xxx main.go FROM xxx/distroless:nonroot COPY --from=builder 從上面將編譯好的二進位制檔案拷貝過來 ENTRYPOINT [./xxx]

這樣做之後會發現編好的映象很小。而且不用擔心有什麼linux的漏洞,因為distroless映象閹割了很多功能,所以更安全。

其他之後遇到補充