1. 程式人生 > 其它 >99%的人沒使用過它倆,Docker最佳實踐+2

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

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

  • runlike:通過容器打印出容器的啟動命令
  • whaler:通過映象匯出dockerfile

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

找回Docker容器執行的命令

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

dockerinspect$container_name

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

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

#pip
pipinstallrunlike
#bydocker
aliasrunlike="dockerrun--rm-v/var/run/docker.sock:/var/run/docker.sockassaflavie/runlike"

下面還是通過上面那個容器測試一下是否可以:這樣使用起來就方便很多了。關於runlike一些其他的選項,可以直接通過--help

學習。

從映象匯出Dockerfile

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

#aliasexportdockerimagetodockerfile
aliaswhaler="dockerrun-t--rm-v/var/run/docker.sock:/var/run/docker.sock:ropegleg/whaler"

然後通過whaler命令輸出pegleg/whaler映象的dockerfile檔案:這樣就輸出pegleg/whaler這個映象的Dockerfile大致的內容了,還是彩色的輸出呢?哈哈,有心了。從上圖可以看到輸出的dockerfile也與平常寫的不太一樣,可以在github上看下倉庫內的dockerfile檔案

FROMgolang:1.14.4ASbuilder
WORKDIR$GOPATH
RUNgoget-ugithub.com/P3GLEG/Whaler
WORKDIR$GOPATH/src/github.com/P3GLEG/Whaler
RUNexportCGO_ENABLED=0&&gobuild.
RUNcpWhaler/root/Whaler

FROMalpine:3.12.0
WORKDIR/root/
COPY--from=builder/root/Whaler.
ENTRYPOINT["./Whaler"]

由dockerfile來看,這個whaler採用的多階段構建,所以無法輸出--from=builder的構建內容,這個鍋whaler不背,我們可以換一個映象看看:這個就顯示的很自然,很有熟悉的味道了。whaler支援同時分析多個映象等等功能,這裡就不在說了,感興趣的可以自己看一下。至於whaler是怎麼實現的,其實看一下原始碼就明白了。