dockerfile建立映象
2018-10-13 Docker
使用Dockerfile建立映象
Dockerfile
是什麼:一個文字格式的配置檔案
能做什麼:快速建立自定義映象
由哪幾部分構成:
- 基礎映象資訊
- 維護者資訊
- 映象操作指令
- 容器啟動時執行指令
舉例:
# escape=\ (backlash) # This Dockerfile uses the ubuntu: xeniel image # VERSION 2 - EDITION 1 # Author: docker_user # Command format: Instruction [arguments / command] # Base image to use, this must be set as the first line # (第一部分:基礎映象資訊)使用FROM指令指明所基於的映象名稱 FROM ununtu:xeniel # Maintainer:docker_user <docker_user at email.com>(@docker_user) # (第二部分:維護者資訊)使用LABEL指令說明維護者資訊 LABEL manintainer qinglin<
[email protected]> # Commands to update the image # (第三部分:映象操作指令) eg:RUN指令將對映象執行跟隨的命令,每執行一條RUN指令,映象新增新一層,並提交 RUN echo "deb http://archive.ununtu.com/ununtu/ xeniel main universe" >> /etc/apt/sorces.list RUN apt-get update && apt-get install -y nginx RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new container # (第四部分:容器啟動時執行指令)容器啟動時執行指令 CMD /usr/sbin/nginx
Dockerfile中指令說明
dockerfile中指令分類有幾種?
-
配置指令
-
操作指令
ARG VERSION=9.3 FROM debian:$(VERSION)
LABEL VERSION = “1.0.0-rc3” LABEL author = “qinglin” “date”=“2018-10-13” LABEL description = “MEMECT”
最佳實踐:從需求出發,定製適合、高效的映象
- 吃透每個指令的含義和執行效果,編寫簡單的例子進行測試,在寫Dockerfile
- 參考DockerHub種優秀映象的Dockefile來編寫高效的Dockerfile
生成映象過程中,從以下方面進行思考,完善所生成映象:
精簡映象用途:儘量讓每個映象的用途比較集中單一
選用合適的基礎映象:容器的核心是應用。推薦使用瘦身果的應用的映象(node:slim),或比較小巧的系統映象(alpine/busybox/debian)
提供註釋和維護者資訊:Dockerfile也是一種程式碼,考慮後續的擴充套件和他人的使用
正確使用版本號:使用明確的版本號資訊,而非依賴預設的latest,避免環境不一致導致的問題
減少映象層數:儘量合併RUN、ADD、COPY指令
恰當使用多步驟建立:通過多步驟建立,可以將編譯和執行等過程分開,保證生成的映象只包括執行應用所需要的最小化環境
使用.dockerignore檔案:docker build時建立的路徑和檔案,避免傳送不必要的資料內容,加快映象生成過程
及時刪除臨時檔案和快取檔案:特別是apt-get指令之後,/var/cache/apt/下面快取了一些安裝包
提高生成速度:合理使用cache,減少內容目錄下的檔案,或使用dockerignore檔案指定
調整合理的指定順序:在開啟cache的情況下,內容不變的指令儘量放在前面,這樣可以儘量複用
減少外部源的干擾:如果從外部引入資料,需要指定持久的地址,並帶版本資訊等,讓他人可複用而不出錯