1. 程式人生 > >docker~Dockerfile優化程式的部署

docker~Dockerfile優化程式的部署

回到目錄

一些理論

我們都知道docker這個容器工具可以幫助我們快速進行環境的部署,這對於運營人員來說,無疑是個福音,而這個工作大叔認為不應該是運營人員乾的,而是由開發人員來做,因為只有你知道你乾的是什麼,你幹了它,就應該要部署它,或者把部署的過程寫成一個指令碼,讓運營人員去執行,就可以了,這也許就是docker產生的原因吧!

Dockerfile是為快速構建docker image而設計的,當你使用docker build 命令的時候,docker 會讀取當前目錄下的命名為Dockerfile(首字母大寫)的純文字檔案並執行裡面的指令構建出一個docker image。

Dockerfile的組合可以用一張圖來表示

Dockerfile的一些命令

Dockerfile是將一組指令碼組合在一個檔案中,然後它讓批量執行,而指令碼中最重要的就是FROM,它告訴docker要啟動哪個映象,然後後觀的動作都是針對這個image來執行——我們要想執行一個Dockerfile檔案,可以使用下面的程式碼:

$ docker build -f /path/to/a/Dockerfile .

下面是從eshoponcontainer中擷取的一個Dockerfile檔案的內容,我們可以學習一下

FROM microsoft/aspnetcore:1.1.2
ARG source
WORKDIR /app
EXPOSE 
80 COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "Basket.API.dll"]

從上面程式碼中,我們看到Dockerfile有幾個命令,下面具體說明一下

FROM
基於哪個映象
RUN
安裝軟體用
MAINTAINER
映象建立者
CMD
Container啟動時執行的命令,但是一個Dockerfile中只能有一條CMD命令,多條則只執行最後一條CMD.
CMD主要用於container時啟動指定的服務,當Docker run command的命令匹配到CMD command時,會替換CMD執行的命令。
ENTRYPOINT
container啟動時執行的命令,但是一個Dockerfile中只能有一條ENTRYPOINT命令,如果多條,則只執行最後一條
ENTRYPOINT沒有CMD的可替換特性
USER


使用哪個使用者跑container
EXPOSE
container內部服務開啟的埠。主機上要用還得在啟動container時,做host-container的埠對映:
ADD
將檔案<src>拷貝到container的檔案系統對應的路徑<dest>
所有拷貝到container中的檔案和資料夾許可權為0755,uid和gid為0
如果檔案是可識別的壓縮格式,則docker會幫忙解壓縮

如果要ADD本地檔案,則本地檔案必須在 docker build <PATH>,指定的<PATH>目錄下

如果要ADD遠端檔案,則遠端檔案必須在 docker build <PATH>,指定的<PATH>目錄下。
 注意:使用docker build - < somefile方式進行build,是不能直接將本地檔案ADD到container中。只能ADD    url file.
ADD只有在build映象的時候執行一次,後面執行container的時候不會再重新載入了。
VOLUME
可以將本地資料夾或者其他container的資料夾掛載到container中。

WORKDIR
切換目錄用,可以多次切換(相當於cd命令),對RUN,CMD,ENTRYPOINT生效
ONBUILD
ONBUILD 指定的命令在構建映象時並不執行,而是在它的子映象中執行

好了,今天就說這麼多,總之我們要知道,Dockerfile主要用來快速生成image和快速部署應用環境的!

回到目錄