五、Dockerfile:用於定義 Docker 映象內容的指令碼檔案。
Dockerfile基本結構
一個典型的 Dockerfile 由一系列指令組成,每個指令用於執行特定的任務,如指定基礎映象、複製檔案、執行命令等。常用的 Dockerfile 指令包括:
-
FROM
- 指定構建新映象所基於的基礎映象。
- 示例:
FROM ubuntu:20.04
-
LABEL
- 為映象新增後設資料。
- 示例:
LABEL maintainer="you@example.com"
-
RUN
- 在映象構建時執行命令,通常用於安裝軟體包。
- 示例:
RUN apt-get update && apt-get install -y python3
-
COPY
- 將本地檔案或目錄複製到映象中。
- 示例:
COPY . /app
-
ADD
- 功能類似於 COPY,但可以處理 URL 和解壓 tar 檔案。
- 示例:
ADD https://example.com/file.tar.gz /app/
-
CMD
- 指定容器啟動時要執行的命令,可以被
docker run
提供的命令替代。 - 示例:
CMD ["python3", "app.py"]
- 指定容器啟動時要執行的命令,可以被
-
ENTRYPOINT
- 配置容器啟動時的主程序,通常用於不可替代的命令。
- 示例:
ENTRYPOINT ["python3", "app.py"]
-
ENV
- 設定環境變數。
- 示例:
ENV APP_HOME /app
-
EXPOSE
- 宣告容器監聽的埠,但不會實際開啟埠,需要使用
docker run -p
對映。 - 示例:
EXPOSE 8080
- 宣告容器監聽的埠,但不會實際開啟埠,需要使用
-
VOLUME
- 定義匿名卷或指定卷,以便持久化資料。
- 示例:
VOLUME /data
-
WORKDIR
- 設定工作目錄,後續命令會在這個目錄下執行。
- 示例:
WORKDIR /app
-
USER
- 指定執行後續命令的使用者。
- 示例:
USER appuser
-
ARG
- 定義構建引數,可以在
docker build
時傳遞。 - 示例:
ARG VERSION=1.0
- 定義構建引數,可以在
-
HEALTHCHECK
- 配置容器健康檢查命令。
- 示例:
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
寫一個簡單的django專案的Dockerfile構建
首先我們要有一個基本的django專案目錄結構:
根據目錄結構,可以寫出Dockerfile檔案
FROM python:3.9 # 設定環境變數 ENV PYTHONUNBUFFERED=1 # 建立工作目錄 WORKDIR /app # 複製專案的依賴檔案 COPY requirements.txt /app/ # 安裝專案的依賴 RUN pip install --no-cache-dir -r requirements.txt # 複製專案程式碼 COPY . /app/ # 暴露Django的預設埠 EXPOSE 8000 # 執行Django開發伺服器 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]