1.基本說明java
Dockfile是一個用於編寫docker鏡像生成過程的文件,其有特定的語法。在一個文件夾中,若是有一個名字爲Dockfile的文件,其內容知足語法要求,在這個文件夾路徑下執行命令:docker build --tag name:tag .,就能夠按照描述構建一個鏡像了。name是鏡像的名稱,tag是鏡像的版本或者是標籤號,不寫就是lastest。注意後面有一個空格和點。docker
Dockerfile的基本指令有十三個,分別是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。下面對這些指令的用法一一說明。shell
用法:FROM <image>centos
說明:第一個指令必須是FROM了,其指定一個構建鏡像的基礎源鏡像,若是本地沒有就會從公共庫中拉取,沒有指定鏡像的標籤會使用默認的latest標籤,能夠出現屢次,若是須要在一個Dockerfile中構建多個鏡像。緩存
用法:MAINTAINER <name> <email>tomcat
說明:描述鏡像的建立者,名稱和郵箱服務器
用法:RUN "command" "param1" "param2"網絡
說明:RUN命令是一個經常使用的命令,執行完成以後會成爲一個新的鏡像,這裏也是指鏡像的分層構建。一句RUN就是一層,也至關於一個版本。這就是以前說的緩存的原理。咱們知道docker是鏡像層是隻讀的,因此你若是第一句安裝了軟件,用完在後面一句刪除是不可能的。因此這種狀況要在一句RUN命令中完成,能夠經過&符號鏈接多個RUN語句。RUN後面的必須是雙引號不能是單引號(沒引號貌似也沒關係),command是不會調用shell的,因此也不會繼承相應變量,要查看輸入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。ui
用法:CMD command param1 param2spa
說明:CMD在Dockerfile中只能出現一次,有多個,只有最後一個會有效。其做用是在啓動容器的時候提供一個默認的命令項。若是用戶執行docker run的時候提供了命令項,就會覆蓋掉這個命令。沒提供就會使用構建時的命令。
用法:EXPOSE <port> [<port>...]
說明:告訴Docker服務器容器對外映射的容器端口號,在docker run -p的時候生效。
用法:EVN <key> <value> 只能設置一個
EVN <key>=<value>容許一次設置多個
說明:設置容器的環境變量,可讓其後面的RUN命令使用,容器運行的時候這個變量也會保留。
用法:ADD <src> <dest>
說明:複製本機文件或目錄或遠程文件,添加到指定的容器目錄,支持GO的正則模糊匹配。路徑是絕對路徑,不存在會自動建立。若是源是一個目錄,只會複製目錄下的內容,目錄自己不會複製。ADD命令會將複製的壓縮文件夾自動解壓,這也是與COPY命令最大的不一樣。
用法:COPY <src> <dest>
說明:COPY除了不能自動解壓,也不能複製網絡文件。其它功能和ADD相同。
用法:ENTRYPOINT "command" "param1" "param2"
說明:這個命令和CMD命令同樣,惟一的區別是不能被docker run命令的執行命令覆蓋,若是要覆蓋須要帶上選項--entrypoint,若是有多個選項,只有最後一個會生效。
用法:VOLUME ["path"]
說明:在主機上建立一個掛載,掛載到容器的指定路徑。docker run -v命令也能完成這個操做,並且更強大。這個命令不能指定主機的須要掛載到容器的文件夾路徑。但docker run -v能夠,並且其還能夠掛載數據容器。
用法:USER daemon
說明:指定運行容器時的用戶名或UID,後續的RUN、CMD、ENTRYPOINT也會使用指定的用戶運行命令。
用法:WORKDIR path
說明:爲RUN、CMD、ENTRYPOINT指令配置工做目錄。可使用多個WORKDIR指令,後續參數若是是相對路徑,則會基於以前的命令指定的路徑。如:WORKDIR /home WORKDIR test 。最終的路徑就是/home/test。path路徑也能夠是環境變量,好比有環境變量HOME=/home,WORKDIR $HOME/test也就是/home/test。
用法:ONBUILD [INSTRUCTION]
說明:配置當前所建立的鏡像做爲其它新建立鏡像的基礎鏡像時,所執行的操做指令。意思就是,這個鏡像建立後,若是其它鏡像以這個鏡像爲基礎,會先執行這個鏡像的ONBUILD命令。
一個使用安裝包安裝的tomcat例子:
1
2
3
4
5
6
7
8
9
10
11
|
FROM centos
MAINTAINER nobody
"xx@qq.com"
RUN mkdir -p /opt/jdk/
RUN mkdir -p /opt/tomcat/
ADD jdk1.
7
.0_79 /opt/jdk/
ADD tomcat /opt/tomcat/
ENV CATALINA_HOME /opt/tomcat
ENV JAVA_HOME /opt/jdk
EXPOSE
8080
ENV PATH $PATH:$JAVA_HOME/bin
CMD [
"/opt/tomcat/bin/catalina.sh"
,
"run"
]
|