99%的人沒使用過它倆,Docker最佳實踐+2
最近發現兩個非常好用的工具,一個是runlike
,一個是whaler
runlike
:通過容器打印出容器的啟動命令whaler
:通過映象匯出dockerfile
聽起來是不是想說N...B...
哈哈,那就走起?
找回Docker容器執行的命令
平時可能因為測試或者一些規範的操作方式導致啟動一個容器,忘記了這個容器的啟動命令是什麼了,又需要找回來在別的機器上建立的時候,就很麻煩,可能很多人會想到通過docker inspect
分析輸出的json檔案中的volume
、ports
、Env
等
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
是怎麼實現的,其實看一下原始碼就明白了。