Dockerfile

Dockerfile

1.什麼是Dockerfile

Dockerfile 是一個文本文件,裏面包含了打包Docker鏡像所需要用到的命令。Docker 可以通過讀取 Dockerfile 裏面的命令來自動化地構建Docker鏡像。通過執行 docker build 就可以啓動這樣的一個自動化流程。

docker build -t runoob/ubuntu:v1 . 

2.容器鏡像層的理解

Docker鏡像由只讀層組成,每個層都代表一個Dockerfile指令,這些層是堆疊的,每一層都是前一層變化的增量。運行鏡像並生成容器時,可以在基礎鏡像的頂部添加新的可寫層(“容器層”)。對正在運行的容器所做的所有更改(例如寫入新文件,修改現有文件和刪除文件)都將寫入此可寫容器層
在這裏插入圖片描述

3.構建上下文

當你觸發docker build 命令時,當前目錄就被稱爲構建上下文(build context)。默認情況下 Dockerfile文件就在這個目錄下, 但是可以通過 -f 參數來指定Dockerfile的位置。不管Dockerfile在哪裏,當前目錄中的所有文件和目錄都會作爲構建上下文發送到 docker daemon 進程。

4.如何編寫Dockerfile

  1. 1 目標

    更快的構建速度
    更小的Docker鏡像大小
    更少的Docker鏡像層  #只有 ONLY, COPY,ADD這三個命令增加層數,其他的命令只會創建一些臨時的鏡像,並不會增加構建的鏡像的層數
    充分利用鏡像緩存     # 構建映像時,Docker會逐步按指定的順序執行Dockerfile中的每個指令。在檢查每條指令時,Docker會在其緩存中查找可以重用的現有鏡像,而不是重複創建新的鏡像
    增加Dockerfile可讀性
    讓Docker容器使用起來更簡單
    
  2. 2 總結

    編寫.dockerignore文件
    容器只運行單個應用
    將多個RUN指令合併爲一個
    基礎鏡像的標籤不要用latest
    每個RUN指令後刪除多餘文件
    選擇合適的基礎鏡像(alpine版本最好)
    設置WORKDIR和CMD  #WORKDIR指令可以設置默認目錄,也就是運行RUN / CMD / ENTRYPOINT指			       令的地方。
    使用ENTRYPOINT (可選)
    在entrypoint腳本中使用exec
    COPY與ADD優先使用前者
    合理調整COPY與RUN的順序  # 把變化最少的部分放在Dockerfile的前面,這樣可以充分利用鏡像緩                       存。build時不會反覆加載
    設置默認的環境變量,映射端口和數據卷
    使用LABEL設置鏡像元數據
    添加HEALTHCHECK
    

示例:

dockerfile
FROM node:7-alpine
ENV PROJECT_DIR=/app
WORKDIR $PROJECT_DIR
COPY package.json $PROJECT_DIR  
RUN npm install  
COPY . $PROJECT_DIR
ENV MEDIA_DIR=/media \  
NODE_ENV=production \
APP_PORT=3000
VOLUME $MEDIA_DIR  
EXPOSE $APP_PORT
ENTRYPOINT ["./entrypoint.sh"]  
CMD ["start"]  
dockerfile
FROM node:7-alpine
WORKDIR /app
COPY package.json /app  
RUN npm install  
COPY . /app
ENTRYPOINT ["./entrypoint.sh"]  
CMD ["start"]  
# 1.指定基本鏡像爲Linux(alipine Docker鏡像是隻有5M的輕量級Linux系統)
FROM alpine:3.5

# 在alipine下安裝python和pip,這個app是用Python寫的,所以需要安裝Python環境,通常是複製文件和安裝依賴
RUN apk add --update py2-pip

# 安裝app所需的Python所必須的
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt

# 複製應用必須的文件到鏡像中
COPY app.py /usr/src/app/
COPY templates/index.html /usr/src/app/templates/

# 設置需要暴露的端口號
EXPOSE 5000

# 設置應用通過cmd啓動Python應用程序
CMD ["python", "/usr/src/app/app.py"]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章