1. 程式人生 > >dockerfile建立映象

dockerfile建立映象

2018-10-13 Docker

使用Dockerfile建立映象

Dockerfile

是什麼:一個文字格式的配置檔案

能做什麼:快速建立自定義映象

由哪幾部分構成:

  1. 基礎映象資訊
  2. 維護者資訊
  3. 映象操作指令
  4. 容器啟動時執行指令

舉例:

# 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中指令分類有幾種?

  1. 配置指令

  2. 操作指令

    ARG VERSION=9.3 FROM debian:$(VERSION)

    LABEL VERSION = “1.0.0-rc3” LABEL author = “qinglin” “date”=“2018-10-13” LABEL description = “MEMECT”

最佳實踐:從需求出發,定製適合、高效的映象

  1. 吃透每個指令的含義和執行效果,編寫簡單的例子進行測試,在寫Dockerfile
  2. 參考DockerHub種優秀映象的Dockefile來編寫高效的Dockerfile

生成映象過程中,從以下方面進行思考,完善所生成映象:

精簡映象用途:儘量讓每個映象的用途比較集中單一

選用合適的基礎映象:容器的核心是應用。推薦使用瘦身果的應用的映象(node:slim),或比較小巧的系統映象(alpine/busybox/debian)

提供註釋和維護者資訊:Dockerfile也是一種程式碼,考慮後續的擴充套件和他人的使用

正確使用版本號:使用明確的版本號資訊,而非依賴預設的latest,避免環境不一致導致的問題

減少映象層數:儘量合併RUN、ADD、COPY指令

恰當使用多步驟建立:通過多步驟建立,可以將編譯和執行等過程分開,保證生成的映象只包括執行應用所需要的最小化環境

使用.dockerignore檔案:docker build時建立的路徑和檔案,避免傳送不必要的資料內容,加快映象生成過程

及時刪除臨時檔案和快取檔案:特別是apt-get指令之後,/var/cache/apt/下面快取了一些安裝包

提高生成速度:合理使用cache,減少內容目錄下的檔案,或使用dockerignore檔案指定

調整合理的指定順序:在開啟cache的情況下,內容不變的指令儘量放在前面,這樣可以儘量複用

減少外部源的干擾:如果從外部引入資料,需要指定持久的地址,並帶版本資訊等,讓他人可複用而不出錯