一些理論 我們都知道docker這個容器工具可以幫助我們快速進行環境的部署,這對於運營人員來說,無疑是個福音,而這個工作大叔認為不應該是運營人員乾的,而是由開發人員來做,因為只有你知道你乾的是什麼,你幹了它,就應該要部署它,或者把部署的過程寫成一個腳本,讓運營人員去執行,就可以了,這也許就是dock ...
一些理論
我們都知道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和快速部署應用環境的!