天天看點

99%的人沒使用過它倆,Docker最佳實踐+2

作者:雲原生生态圈

Docker最佳實踐

最近發現兩個非常好用的工具,一個是runlike,一個是whaler

  • runlike:通過容器列印出容器的啟動指令
  • whaler:通過鏡像導出dockerfile
99%的人沒使用過它倆,Docker最佳實踐+2

聽起來是不是想說N...B...哈哈,那就走起?

找回Docker容器運作的指令

平時可能因為測試或者一些規範的操作方式導緻啟動一個容器,忘記了這個容器的啟動指令是什麼了,又需要找回來在别的機器上建立的時候,就很麻煩,可能很多人會想到通過docker inspect分析輸出的json檔案中的volume、ports、Env等

docker inspect $container_name
           

這個指令應該是很熟悉的,檢視容器的基本資訊。

99%的人沒使用過它倆,Docker最佳實踐+2

雖然這樣也能找到運作容器的指令,但是依舊還需要時間去整理,是以這裡分享一個可以直接列印運作指令的工具runlike[1],在runlike傳遞一個容器名稱,就會直接列印出該容器的運作指令。runlike使用起來非常友善,可以直接通過pip安裝,也可以通過容器方式免安裝使用:

# pip

pip install runlike

# by docker

alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"

下面還是通過上面那個容器測試一下是否可以:

99%的人沒使用過它倆,Docker最佳實踐+2

這樣使用起來就友善很多了。關于runlike一些其他的選項,可以直接通過--help學習。

從鏡像導出Dockerfile

平時可能會建構很多不同的鏡像,比如維護一些基礎Docker鏡像、想檢視一些公開倉庫的Docker鏡像是怎麼建構的,或因為長時間不維護找不到當時建構鏡像的Dockerfile,或者因為網絡無法檢視時,能從鏡像導出Dockerfile就顯得很重要,這裡可以通過whaler[2]來快速的導出. 這裡我們依舊不安裝,通過容器化的方式使用dfimage指令,便于使用,我們将該指令寫成指令别名

# alias export docker image to dockerfile
alias whaler="docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock:ro pegleg/whaler"
           

然後通過whaler指令輸出pegleg/whaler鏡像的dockerfile檔案:

99%的人沒使用過它倆,Docker最佳實踐+2

這樣就輸出pegleg/whaler這個鏡像的Dockerfile大緻的内容了,還是彩色的輸出呢?哈哈,有心了。從上圖可以看到輸出的dockerfile也與平常寫的不太一樣,可以在github上看下倉庫内的dockerfile檔案

FROM golang:1.14.4 AS builder

WORKDIR $GOPATH

RUN go get -u github.com/P3GLEG/Whaler

WORKDIR $GOPATH/src/github.com/P3GLEG/Whaler

RUN export CGO_ENABLED=0 && go build .

RUN cp Whaler /root/Whaler

FROM alpine:3.12.0

WORKDIR /root/

COPY --from=builder /root/Whaler .

ENTRYPOINT ["./Whaler"]

由dockerfile來看,這個whaler采用的多階段建構,是以無法輸出--from=builder的建構内容,這個鍋whaler不背,我們可以換一個鏡像看看:

99%的人沒使用過它倆,Docker最佳實踐+2

這個就顯示的很自然,很有熟悉的味道了。whaler支援同時分析多個鏡像等等功能,這裡就不在說了,感興趣的可以自己看一下。至于whaler是怎麼實作的,其實看一下源碼就明白了。

99%的人沒使用過它倆,Docker最佳實踐+2
99%的人沒使用過它倆,Docker最佳實踐+2

你可能還喜歡

99%的人沒使用過它倆,Docker最佳實踐+2
99%的人沒使用過它倆,Docker最佳實踐+2

參考資料

[1]runlike: https://github.com/lavie/runlike/

[2]whaler: https://github.com/P3GLEG/Whaler