使用Dockerfile創(chuàng)建自定義鏡像的詳細步驟
一、什么是 Dockerfile?
Dockerfile 是一個文本文件,定義了如何構(gòu)建 Docker 鏡像的指令腳本。每條指令都會創(chuàng)建鏡像的一層。
二、自定義鏡像的基本步驟
示例項目結(jié)構(gòu):
myapp/ ├── Dockerfile ├── app.py ├── requirements.txt
三、Dockerfile 示例(以 Python 項目為例)
# 1. 使用官方基礎(chǔ)鏡像 FROM python:3.11-slim # 2. 設(shè)置工作目錄 WORKDIR /app # 3. 拷貝代碼和依賴 COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # 4. 拷貝應用代碼 COPY app.py ./ # 5. 設(shè)置環(huán)境變量(可選) ENV TZ=Asia/Shanghai # 6. 定義啟動命令 CMD ["python", "app.py"]
四、構(gòu)建鏡像
在包含 Dockerfile 的目錄下執(zhí)行:
docker build -t my-python-app .
說明:
-t:指定鏡像名稱.:當前目錄為構(gòu)建上下文(包含 Dockerfile)
五、運行自定義鏡像
docker run -d -p 5000:5000 my-python-app
容器運行后可以訪問服務(如 Flask):
http://localhost:5000
六、常用 Dockerfile 指令總結(jié)
| 指令 | 作用 |
|---|---|
| FROM | 指定基礎(chǔ)鏡像(必須第一行) |
| WORKDIR | 設(shè)置容器內(nèi)工作目錄 |
| COPY | 拷貝文件到容器 |
| RUN | 執(zhí)行命令(如安裝依賴) |
| ENV | 設(shè)置環(huán)境變量 |
| EXPOSE | 聲明端口(不映射,僅用于說明) |
| CMD | 容器啟動時默認執(zhí)行命令 |
| ENTRYPOINT | 設(shè)置主執(zhí)行命令(可與 CMD 結(jié)合) |
七、優(yōu)化建議(生產(chǎn)環(huán)境)
| 優(yōu)化項 | 示例或說明 |
|---|---|
| 使用 .dockerignore | 避免將 .git, venv, node_modules 等傳入鏡像上下文 |
| 使用多階段構(gòu)建(如 Java 項目) | 構(gòu)建依賴在第一個階段,運行用最小鏡像 |
| 固定基礎(chǔ)鏡像版本 | 避免使用 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"]
九、構(gòu)建并推送鏡像到鏡像倉庫(如 Docker Hub)
docker build -t myname/myapp:v1.0 . docker login docker push myname/myapp:v1.0
十、總結(jié)一句話:
使用 Dockerfile 構(gòu)建鏡像是容器化的第一步,只需定義清晰的構(gòu)建步驟,即可快速打造可部署、可復用的鏡像,支持跨環(huán)境一致運行。
以上就是使用Dockerfile創(chuàng)建自定義鏡像的詳細步驟的詳細內(nèi)容,更多關(guān)于Dockerfile創(chuàng)建自定義鏡像的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Docker Compose引用環(huán)境變量的方法示例
在項目中,往往需要在 docker-compose.yml 文件中使用環(huán)境變量來控制不同的條件和使用場景。本文集中介紹 docker compose 引用環(huán)境變量的方式,感興趣的小伙伴們可以參考一下2018-12-12
docker-compose中l(wèi)ink和external_links的區(qū)別及說明
拆分docker-compose.yml導致depends_on、links和external網(wǎng)絡(luò)配置失效,因compose限制及Portainer命名沖突,解決方案為使用external_links或手動創(chuàng)建網(wǎng)絡(luò)2025-09-09
Docker容器網(wǎng)絡(luò)基礎(chǔ)概述
這篇文章主要介紹了Docker容器網(wǎng)絡(luò)基礎(chǔ)概述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09

