使用 Dockerfile 創建自定義鏡像的過程非常清晰,通常包括定義基礎鏡像、安裝依賴、復制代碼、設置環境變量和啟動命令等步驟。下面詳細講解從零創建自定義鏡像的完整流程。
一、什么是 Dockerfile?
Dockerfile 是一個文本文件,定義了如何構建 Docker 鏡像的指令腳本。每條指令都會創建鏡像的一層。
二、自定義鏡像的基本步驟
📁 示例項目結構:
myapp/
├── Dockerfile
├── app.py
├── requirements.txt
三、Dockerfile 示例(以 Python 項目為例)
# 1. 使用官方基礎鏡像
FROM python:3.11-slim# 2. 設置工作目錄
WORKDIR /app# 3. 拷貝代碼和依賴
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt# 4. 拷貝應用代碼
COPY app.py ./# 5. 設置環境變量(可選)
ENV TZ=Asia/Shanghai# 6. 定義啟動命令
CMD ["python", "app.py"]
四、構建鏡像
在包含 Dockerfile
的目錄下執行:
docker build -t my-python-app .
說明:
-t
:指定鏡像名稱.
:當前目錄為構建上下文(包含 Dockerfile)
五、運行自定義鏡像
docker run -d -p 5000:5000 my-python-app
容器運行后可以訪問服務(如 Flask):
http://localhost:5000
六、常用 Dockerfile 指令總結
指令 | 作用 |
---|---|
FROM | 指定基礎鏡像(必須第一行) |
WORKDIR | 設置容器內工作目錄 |
COPY | 拷貝文件到容器 |
RUN | 執行命令(如安裝依賴) |
ENV | 設置環境變量 |
EXPOSE | 聲明端口(不映射,僅用于說明) |
CMD | 容器啟動時默認執行命令 |
ENTRYPOINT | 設置主執行命令(可與 CMD 結合) |
七、優化建議(生產環境)
優化項 | 示例或說明 |
---|---|
? 使用 .dockerignore | 避免將 .git , venv , node_modules 等傳入鏡像上下文 |
? 使用多階段構建(如 Java 項目) | 構建依賴在第一個階段,運行用最小鏡像 |
? 固定基礎鏡像版本 | 避免使用 latest ,例如:python:3.11.7 |
? 添加元信息 | 使用 LABEL 記錄鏡像作者、版本等 |
? 適當清理緩存 | pip install --no-cache-dir 等防止鏡像過大 |
八、示例:Java Spring Boot 項目 Dockerfile
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
COPY target/myapp.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
九、構建并推送鏡像到鏡像倉庫(如 Docker Hub)
docker build -t myname/myapp:v1.0 .
docker login
docker push myname/myapp:v1.0
十、總結一句話:
使用 Dockerfile 構建鏡像是容器化的第一步,只需定義清晰的構建步驟,即可快速打造可部署、可復用的鏡像,支持跨環境一致運行。