DockerFile 詳解

DockerFile 詳解

Dockerfile由一行行命令語句組成,並且支持用“#”開頭作爲註釋,一般的,Dockerfile分爲四部分:基礎鏡像信息,維護者信息,鏡像操作指令和容器啓動時執行的指令。

Dockerfile指令

1、FROM

格式:FROM <image>或 FROM <image>:<tag>

第一條指令必須爲FROM指令,並且,如果在同一個Dockerfile中創建多個鏡像時,可以使用多個FROM指令(每個鏡像一次)

2、MAINTAINET

格式:MAINTAINET <name>

指定維護者的信息

3、RUN

格式:RUN <command> 或 RUN ["", "", ""]

每條指令將在當前鏡像基礎上執行,並提交爲新的鏡像。(可以用“\”換行)

4、CMD

格式:CMD ["","",""]

指定啓動容器時執行的命令,每個Dockerfile只能有一條CMD指令,如果指定了多條指令,則最後一條執行。(會被啓動時指定的命令覆蓋)

5、EXPOSE

格式:EXPOSE <port>  [ <port> ...]

告訴Docker服務端暴露端口,在容器啓動時需要通過 -p 做端口映射

6、ENV

格式:ENV <key> <value>

指定環境變量,會被RUN指令使用,並在容器運行時保存

7、ADD

格式:ADD  <src>  <dest>

複製指定的到容器的中,可以是Dockerfile所在的目錄的一個相對路徑;可以是URL,也可以是tar.gz(自動解壓)

8、COPY

格式:COPY <src>  <dest>

複製本地主機的 ( 爲 Dockerfile 所在目錄的相對路徑)到容器中的 (當使用本地目錄爲源目錄時,推薦使用 COPY)

9、ENTRYPOINT

格式:ENTRYPOINT ["","",""]

配置容器啓動後執行的命令,並且不可被 docker run 提供的參數覆蓋。(每個 Dockerfile 中只能有一個 ENTRYPOINT ,當指定多個時,只有最後一個起效)

10、VOLUME

格式:VOLUME ["/mnt"] 

創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放數據庫和需要保持的數據等

11、USER

格式:USER daemon

指定運行容器時的用戶名或 UID,後續的 RUN 也會使用指定用戶。

12、WORKDIR

格式:WORKDIR /path/to/workdir

爲後續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目錄。(可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑, 則會基於之前命令指定的路徑)

13、ONBUILD

格式:ONBUILD [INSTRUCTION]

配置當所創建的鏡像作爲其它新創建鏡像的基礎鏡像時,所執行的操作指令

例子

將需要使用的jdk(jdk1.7.0_79)和已經編譯好的包( websocket.jar)放到和dockerfile相同的文件夾下面,dockerfile如下:

FROM centos
# 鏡像是centos
MAINTAINER CrissChan
# 維護者CrissChan
COPY jdk1.7.0_79 jdk1.7.0_79
# 複製JDK
ADD websocket.jar app.jar
# 將項目的添加到容器中,並修改名字爲app.jar
ENV JAVA_HOME=/jdk1.7.0_79
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 配置jdk環境
EXPOSE 8080
# 容器對外提供服務的端口是8080
ENTRYPOINT ["java","-jar","/app.jar"]
#啓動容器後啓動app.jar的應用

編譯並生成鏡像 (. 表示當前路徑)

docker build -t yaolin/websocket .

查看生成的鏡像

docker images

創建容器並運行

docker run -p 192.168.0.105:8080:8080 --name websocket  crisschan/websocket
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章