Dockerfile構建Docker鏡像
Dockerfile是一個文本文件,其中包含了若干條指令,這些指令描述了構建鏡像的過程。
這裏先以一個簡單的示例來說明:
vi Dockerfile
在編輯器中輸入以下指令
FROM nginx
RUN echo '<h1>My nginx docker image</h1>' /usr/share/nginx/html/index.html
FROM:表示基礎鏡像
RUN:執行的命令
保存退出後,輸入以下命令來構建鏡像
docker build -t nginx:example .
-t:自定義鏡像名稱和標籤
. :Dockerfile路徑,這裏表示當前路徑
啓動容器
訪問宿主機ip:端口查看結果
一、Dockerfile常用指令
1. FROM 指定基礎鏡像
FROM <image>
FROM <image:tag>
FROM <image>@<digest>
例如:FROM nginx
2. MAINTAINER 指定維護者信息
例如:
MAINTAINER 口乞酉昔<[email protected]>
3. ADD 複製宿主機文件到容器
ADD <src>...<dest>
例如我把eureka-0.0.1.jar 拷貝到容器 /dev/apps目錄,並重命名爲app.jar
ADD eureka-0.0.1.jar /dev/apps/app.jar
src可以爲宿主機文件也可以爲一個URL或者一個壓縮包,當爲URL時不以斜槓結尾會被認爲是一個文件會對相應文件拷貝到容器中,如果結尾是一個斜槓,那麼會被認爲是一個目錄,會將該目錄下的所有文件拷貝到容器中。當爲壓縮包的時候,會把該文件拷貝到容器中並自動解壓。
4.ARG設置構建參數
ARG常用於設置構建參數,這些參數在容器運行時是不會存在的。
例如
ARG user1
設置一個變量,在啓動容器的時候傳入參數
docker build -t myimage --build-arg user1=root .
也可以設置默認值
ARG user1=root
引用變量
USER $user1
引用變量加默認值
USER $(user1:root)
5. ENV 設置環境變量
ENV <key> <value>
例如
ENV JAVA_HOME /path/java1.7
6. EXPOSE 聲明暴露的端口
例如
EXPOSE 80 8080 1521
7. COPY 複製文件
COPY的用法和ADD用法類似,不同的是,COPY不支持URL和壓縮包
COPY <src> <dest>
8. CMD 容器啓動執行的命令
CMD用來指定容器啓動後執行的命令,一個Dockerfile只有一個CMD命令,如果有多個,那麼只會執行最後一個,如果啓動容器的時候指定了參數,那麼CMD命令會被覆蓋。
CMD ["executable","param1","param2"](推薦參數)
CMD ["param1","param2"](爲ENTRYPOINT指令提供預設參數)
CMD command param1 param2(在shell中執行)
例如
此時發現在啓動容器的時候寫入命令,Dockerfile中的被覆蓋掉
9. ENTRYPOINT 切入點
ENTRYPOINT和CMD指令類似,都是指定Docker容器啓動時執行的命令,可以多次設置,只有最後一條會被執行,不同的是,該命令在容器啓動的時候輸入參數並不會覆蓋掉該命令,其就像一個執行命令一樣來執行你的參數,例如
ENTRYPOINT ["/bin/echo"]
10. RUN 執行命令
RUN <command>
RUN ["executable","param1","params"]
RUN <command>在shell終端中執行,在linux中默認是/bin/sh -c,在windows中是cmd /s /c,使用這種格式,就像直接在命令行中輸入命令一樣,RUN ["executable","param1","param2"] 使用exec執行,這種方式類似於函數調用,例如["/bin/bash","-c","echo hello"],該方式必須使用雙引號,不能使用單引號。RUN可以有多條。
11. LABEL 爲鏡像添加元數據
格式爲<key>=<value> <key>=<value>... 使用""" 和 "\"轉換命令行,示例
LABEL version="1.0"
LABEL description="This is my \
label."
12. USER設置用戶
該命令用於設置啓動鏡像時的用戶或者UID寫在該指令後的RUN、CMD、ENTRYPOINT指令都將使用該用戶執行命令
USER myusername
13. VOLUME 指定掛載點
該指令使容器中的某目錄與宿主機的某目錄關聯起來,掛載點可被多個容器共享
VOLUME /tmp
14. WORKDIR 指定工作目錄
切換目錄命令,類似於cd命令,寫在指令後的RUN、CMD、ENTRYPOINT指令都將該目錄作爲當前目錄執行程序
WORKDIR /usr/lib/apps