Dockerfile常用指令介紹
Dockerfile是一個文本文件,用于定義Docker鏡像的構建過程。下面介紹一些最常用的Dockerfile指令及其用法:
基礎指令
-
FROM - 指定基礎鏡像
FROM python:3.9-slim
這是Dockerfile的第一個指令,用于指定構建鏡像的基礎鏡像。
-
MAINTAINER (已棄用) / LABEL - 設置鏡像元數據
LABEL maintainer="yourname@example.com"
用于添加鏡像的作者或其他元數據信息。
-
RUN - 在鏡像中執行命令
RUN apt-get update && apt-get install -y python3-dev
用于在構建鏡像時執行命令,通常用于安裝軟件包。
-
COPY - 復制文件到鏡像
COPY ./app /app
第一個參數是源路徑,表示要復制的文件或目錄
第二個參數是目標路徑(destination path),表示文件將被復制到鏡像中的位置
從構建上下文復制文件或目錄到鏡像中。 -
ADD - 更高級的復制指令
ADD ./app.tar.gz /app
類似于COPY,但可以處理遠程URL和自動解壓壓縮文件。
環境配置
-
ENV - 設置環境變量
ENV PYTHONUNBUFFERED 1
為鏡像設置環境變量,這些變量在容器運行時也會存在。
-
WORKDIR - 設置工作目錄
WORKDIR /app
設置RUN、CMD、ENTRYPOINT、COPY和ADD命令的工作目錄。
容器運行時配置
- CMD - 設置容器啟動時默認執行的命令
CMD ["python", "app.py"]
每個 Dockerfile 只能有一個 CMD 指令
如果指定多個,只有最后一個會生效
可以被 docker run 命令后的參數覆蓋
-
ENTRYPOINT - 設置容器入口點
ENTRYPOINT ["python", "app.py"] CMD ["--help"]
設置容器啟動時執行的命令,且不會被docker run命令覆蓋,但可以追加參數。
-
EXPOSE - 聲明容器端口
EXPOSE 8000
聲明容器運行時提供服務的端口,但不會自動映射端口。
-
VOLUME - 創建掛載點
VOLUME /data
創建可以從本地主機或其他容器掛載的掛載點。
用戶和權限
- USER - 設置運行命令的用戶
設置RUN、CMD和ENTRYPOINT命令執行的用戶。USER appuser
健康檢查
- HEALTHCHECK - 設置健康檢查
為容器設置健康檢查命令。HEALTHCHECK --interval=5m --timeout=3s \CMD curl -f http://localhost/ || exit 1
簡單示例
下面是一個簡單的Python Flask應用的Dockerfile示例:
這個Dockerfile的工作流程是:
- 基于Python 3.9的輕量級鏡像
- 設置工作目錄為/app
- 復制requirements.txt并安裝依賴
- 復制應用代碼到鏡像中
- 暴露5000端口
- 設置Flask應用的環境變量
- 定義容器啟動時運行的命令
學習Dockerfile最好的方法是實踐,建議你嘗試構建一些簡單的鏡像,然后逐步學習更復雜的用法。
FROM python:3.9-slim# 設置工作目錄
WORKDIR /app# 安裝依賴
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt# 復制應用代碼
COPY . .# 暴露端口
EXPOSE 5000# 設置環境變量
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0# 運行應用
CMD ["flask", "run"]