使用Dockerfile創建鏡像
一般Dockerfile分爲四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啓動時的指令
1. 指令說明
指令 | 說明 |
---|---|
FROM | 指定所創建鏡像的基礎鏡像 |
MAINTAINER | 指定維護者信息 |
RUN | 運行命令 |
CMD | 指定啓動容器時默認執行的命令 |
LABEL | 指定生成鏡像的元數據標籤信息 |
EXPOSE | 聲明鏡像內服務所監聽的端口 |
ENV | 指定環境變量 |
ADD | 複製指定的<src>路徑下的內容到容器中的<dest>路徑下,<src>可以爲URL;如果爲tar文件,會自動解壓到<dest>路徑下。 |
COPY | 複製指定的<src>路徑下的內容到容器中的<dest>路徑下; 一般情況推薦使用COPY,而不是ADD |
ENTRYPOINT | 指定鏡像的默認入口 |
VOLUME | 創建數據卷掛載點 |
USER | 指定運行容器時的用戶名或UID |
WORKDIR | 配置工作目錄 |
ARG | 指定鏡像內使用的參數(例如版本號信息等) |
ONBUILD | 配置當所創建的鏡像作爲其他鏡像的基礎鏡像時,所執行的創建操作指令 |
STOPSIGNAL | 容器退出的信號值 |
HEALTHCHECK | 如何進行健康檢查 |
SHELL | 指定使用shell時的默認shell類型 |
2. 創建鏡像
編寫完成Dockerfile之後,執行docker build命令來創建鏡像。
基本格式爲 docker build [選項] 內容路徑
如果要制定生成鏡像的標籤信息,可以使用-t選項。
docker build -t myfirstimage ./
3. 使用.dockerignore文件
使用.dockerignore文件(每行添加一條匹配模式)來讓Docker忽略匹配模式路徑
# comment
/temp
//temp
tmp?
~
- 最佳實踐
精簡鏡像用途:儘量讓每個鏡像的用途都比較集中、單一,避免構造大而複雜、功能多的鏡像;
選用合適的基礎鏡像:過大的基礎鏡像會造成生成臃腫的鏡像,一般推薦較爲小巧的debian鏡像;
提供足夠清晰的命令註釋和維護者信息:Dockerfile也是一種代碼,需要考慮方面後續擴展和其他人使用;
正確使用版本號:使用明確的版本號信息,如1.0,2.0,而非latest,將避免內容不一致可能引發的慘案;
減少鏡像層數:如果希望所生成的鏡像層數儘量少,則儘量合併指令,例如多個RUN指令可以合併成一條
;
及時刪除臨時文件和緩存文件:特別是在執行apt-get指令後,/var/cache/apt下面會緩存一些安裝包;
提高生成速度: 如合理使用緩存,減少內容目錄下的文件,或使用.dockerignore文件指定等;
調整合理的指令順序:在開啓緩存的情況下,內容不變的指令儘量放在前面,這樣可以儘量複用;
減少外部源的干擾: 如果確實要從外部引入數據,需要指定持久的地址,並帶有版本信息,讓他人可以重複而不出錯。****
小結:
φ(❐❐✧ 人醜就要多讀書