DockerFile的編寫和注意的一些知識點

2021-09-23 00:24:06 字數 3037 閱讀 4829

cmd,run,entrypoint之類的差別。

volumn和-v之間的差別。

expose和-p的對應等。

今天上午寫了乙個指令碼,可以傳引數進image,讓啟動的container具有不同的行為。

另外是一些常用的方便命令:

刪除所有正在執行的容器(先停止,再刪除)。

docker stop $(docker ps -q) && docker rm $(docker ps -a -q)
啟動映象(包括埠對映,目錄掛載-如果windows,那不是掛windows目錄,是虛擬機器目錄,命令容器,傳遞引數)

如果在dockerfile中同時寫了entrypoint和cmd,docker在build過程中會將cmd中指定的內容作為entrypoint的引數。

那麼如果,我們希望每個容器都固定的執行乙個config指令碼,然後再執行特定的程式時,利用entrypoint和cmd可以如何做到呢?從上述分析可以很自然的想到,將entrypoint解析cmd引數,並以命令執行。

cmd命令的引數格式,一般寫成 字串陣列的方式,如上面的例子。如:

cmd  ["echo","hello world"]

雖然也可寫成cmd echo hello word 方式,但這樣docker會在指定的命令前加  /bin/sh -c 執行,有時有可能會出問題。 所以推薦採用資料結構的方式來存放命令。

dockerfile 中的 entrypoint 和 cmd

看似一樣,都是實現 container 啟動命令,但是需要注意:

1、都有兩種方式,陣列方式,以及 shell 方式?

12

["sh","-c","echo hello"]

sh -c'echo hello'

2、entrypoint 除了指定 container 入口之外,更重要的作用是: 通過它可以讓乙個 container 像乙個 executable 一樣。比如?

1entrypoint ["/bin/sh"]

之後 build 出來的映象就像乙個 sh 程式檔案一樣,執行該 image,就像執行 sh 程式。

3、如果 entrypoint 指定了,並且採用了陣列方式,即["exectable", "para1", "para2"],那麼 cmd 指定的內容會被視為 entrypoint 陣列中最後的乙個引數

4、如果 entrypoint 使用 shell 方式,那麼它會覆蓋所有的 cmd 以及docker run後面指定的 command

5、docker run後面指定的 command 會取代 cmd 的內容

(十)DockerFile的編寫

dockerfile是用來構建docker映象的構建檔案,是由一系列命令和引數構成的指令碼。編寫dockerfile檔案 docker build docker run 下圖官方版docker版centos的dockerfile檔案 scrath是一切映象的根映象,cmd是會執行後面的命令 每條保留...

Dockerfile編寫記錄

dockerfile 近期幫朋友製作了docker映象以方便使用,在製作的過程中經歷了相容問題,映象size臃腫,映象內多服務問題,下面開始碼例項。from euleros workdir opt add opencv 4.1.0.tar.gz opt run rpm rpmbuilddb yum ...

Dockerfile編寫語法

docker映象本質上就是乙個個基礎映象的堆疊,為了做出我們想要的映象,我們需要考慮最終映象所需的所有基礎環境,然後一層層堆疊.也就是不斷以基礎映象搭建上層映象.先看例子 version 1.0.0 create time 2015 12 25 11 04 author description 基於...