Dockerfile構建Docker鏡像

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"]



可以發現ENTRYPOINT就像一個執行程序一樣執行了一個命令
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


其它指令不再說明,感興趣的可自己查閱資料























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章