最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker build創(chuàng)建鏡像命令示例實(shí)踐

 更新時(shí)間:2025年08月18日 11:18:23   作者:掘鐵  
本文講解Dockerfile的核心概念、基礎(chǔ)指令、構(gòu)建流程及優(yōu)化技巧,涵蓋鏡像層結(jié)構(gòu)、構(gòu)建上下文、常用命令參數(shù),強(qiáng)調(diào)多階段構(gòu)建、輕量鏡像等最佳實(shí)踐,感興趣的朋友跟隨小編一起看看吧

一、核心概念

  • Dockerfile
    • 定義鏡像構(gòu)建步驟的文本文件,包含一系列指令和配置,用于自動(dòng)化創(chuàng)建鏡像。
  • 鏡像層(Layer)
    • Docker 鏡像由多層只讀層疊加而成,每個(gè)指令(如 RUN、COPY)會(huì)生成一個(gè)新的層。層可緩存,加速重復(fù)構(gòu)建。
  • 構(gòu)建上下文(Build Context)
    • 發(fā)送給 Docker 守護(hù)進(jìn)程的文件集合,用于構(gòu)建鏡像。默認(rèn)是 Dockerfile 所在目錄。

二、Dockerfile 基礎(chǔ)指令

1. FROM

  • 用途:指定基礎(chǔ)鏡像,所有 Dockerfile 必須以 FROM 開(kāi)頭。
  • 示例
    FROM nginx:latest  # 基于官方 Nginx 鏡像

2. RUN

  • 用途:執(zhí)行 shell 命令,生成新的鏡像層。
  • 示例
    RUN apt-get update && apt-get install -y curl  # 安裝依賴(lài)

3. COPY

  • 用途:將本地文件或目錄復(fù)制到鏡像中。
  • 示例
    COPY ./src /app/src  # 復(fù)制宿主機(jī)的 src 目錄到鏡像的 /app/src

4. ADD

  • 用途:類(lèi)似 COPY,但支持自動(dòng)解壓壓縮文件(如 .tar.gz)和遠(yuǎn)程 URL。
  • 示例
    ADD https://example.com/file.tar.gz /app/  # 下載并解壓文件

5. WORKDIR

  • 用途:設(shè)置工作目錄,后續(xù)指令(如 RUN、COPY)將在此目錄執(zhí)行。
  • 示例
    WORKDIR /app  # 切換到 /app 目錄

6. CMD

  • 用途:定義容器啟動(dòng)時(shí)默認(rèn)執(zhí)行的命令(可被覆蓋)。
  • 示例
    CMD ["node", "server.js"]  # 啟動(dòng) Node.js 服務(wù)

7. ENTRYPOINT

  • 用途:定義容器啟動(dòng)時(shí)執(zhí)行的命令(不可被覆蓋,但可通過(guò) --entrypoint 修改)。
  • 示例
    ENTRYPOINT ["python", "app.py"]  # 固定執(zhí)行 Python 腳本

8. EXPOSE

  • 用途:聲明容器監(jiān)聽(tīng)的端口(僅文檔作用,實(shí)際需通過(guò) -p 映射)。
  • 示例
    EXPOSE 8080  # 聲明應(yīng)用使用 8080 端口

9. ENV

  • 用途:設(shè)置環(huán)境變量。
  • 示例
    ENV API_URL=https://api.example.com  # 定義 API 地址

三、docker build命令詳解

基本語(yǔ)法

docker build [OPTIONS] PATH | URL | -

常用選項(xiàng)

  • -t, --tag:指定鏡像名稱(chēng)和標(biāo)簽(格式:name:tag)。
  • -f, --file:指定 Dockerfile 路徑(默認(rèn)為 PATH/Dockerfile)。
  • --no-cache:禁用緩存,強(qiáng)制重新執(zhí)行所有步驟。
  • --build-arg:傳遞構(gòu)建參數(shù)(需在 Dockerfile 中用 ARG 定義)。

示例

  1. 構(gòu)建并標(biāo)記鏡像:
    docker build -t my_app:v1 .  # 當(dāng)前目錄為構(gòu)建上下文
  2. 指定 Dockerfile 路徑:
    docker build -t my_app:v1 -f Dockerfile.prod .
  3. 傳遞構(gòu)建參數(shù):
    docker build --build-arg ENV=prod -t my_app:prod .

四、構(gòu)建流程示例

目標(biāo):構(gòu)建一個(gè) Node.js 應(yīng)用鏡像。

步驟 1:創(chuàng)建項(xiàng)目結(jié)構(gòu)

mkdir -p node-app/{src,public}
touch node-app/server.js node-app/package.json

步驟 2:編寫(xiě) Dockerfile

# 使用官方 Node.js 18 鏡像作為基礎(chǔ)
FROM node:18-alpine
# 設(shè)置工作目錄
WORKDIR /app
# 復(fù)制 package.json 和 package-lock.json
COPY package*.json ./
# 安裝依賴(lài)
RUN npm install
# 復(fù)制應(yīng)用源碼
COPY . .
# 暴露端口 3000
EXPOSE 3000
# 啟動(dòng)應(yīng)用
CMD ["node", "server.js"]

步驟 3:構(gòu)建鏡像

docker build -t node-app:latest .

步驟 4:運(yùn)行容器

docker run -p 3000:3000 node-app:latest

五、最佳實(shí)踐

減少鏡像層數(shù)
合并相關(guān)指令(如 RUN apt-get update && apt-get install -y ...),避免生成過(guò)多無(wú)用層。

使用 .dockerignore
排除構(gòu)建上下文中的無(wú)關(guān)文件(如 node_modules.git),減少傳輸大小。

.git
node_modules
*.log

多階段構(gòu)建(Multi-Stage Builds)
分離構(gòu)建環(huán)境和運(yùn)行環(huán)境,減小最終鏡像體積。

# 階段 1:構(gòu)建應(yīng)用
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
# 階段 2:運(yùn)行應(yīng)用
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/server.js"]

使用輕量級(jí)基礎(chǔ)鏡像
優(yōu)先選擇 Alpine Linux 或 distroless 鏡像,減少鏡像體積和安全風(fēng)險(xiǎn)。

FROM node:18-alpine  # 體積約 100MB,遠(yuǎn)小于默認(rèn)的 Ubuntu 鏡像

避免以 root 用戶運(yùn)行
創(chuàng)建非 root 用戶,提升容器安全性。

RUN adduser -D app_user
USER app_user

六、調(diào)試與優(yōu)化

查看構(gòu)建日志

docker build --progress=plain -t my_app:debug .  # 顯示詳細(xì)日志

跳過(guò)緩存

docker build --no-cache -t my_app:nocache .

分析鏡像層

docker history my_app:latest  # 查看各層大小和命令

掃描鏡像漏洞
使用 docker scan 或第三方工具(如 Trivy)檢查安全風(fēng)險(xiǎn)。

docker scan my_app:latest

七、常見(jiàn)問(wèn)題

  • 構(gòu)建失?。何募凑业?/strong>
    • 原因:COPYADD 指令路徑錯(cuò)誤。
    • 解決:檢查文件是否在構(gòu)建上下文中,使用絕對(duì)路徑或正確相對(duì)路徑。
  • 權(quán)限拒絕(Permission Denied)
    • 原因:容器內(nèi)進(jìn)程以非 root 用戶運(yùn)行,但文件權(quán)限不足。
    • 解決:在 Dockerfile 中使用 RUN chown 修改文件所有者。
  • 緩存未生效
    • 原因:構(gòu)建上下文文件變更導(dǎo)致緩存失效。
    • 解決:盡量保持靜態(tài)文件(如依賴(lài)包)不變,或合理拆分指令。
  • 端口無(wú)法訪問(wèn)
    • 原因:未通過(guò) -p 映射端口。
    • 解決:運(yùn)行容器時(shí)添加 -p 主機(jī)端口:容器端口,如 docker run -p 8080:80 nginx。

八、總結(jié)

  • Dockerfile 是鏡像構(gòu)建的核心,需合理設(shè)計(jì)指令順序和層結(jié)構(gòu)。
  • docker build 命令通過(guò)參數(shù)控制鏡像名稱(chēng)、上下文和緩存策略。
  • 遵循最佳實(shí)踐(如多階段構(gòu)建、輕量級(jí)鏡像)可顯著優(yōu)化構(gòu)建效率和安全性。

到此這篇關(guān)于Docker build創(chuàng)建鏡像命令示例實(shí)踐的文章就介紹到這了,更多相關(guān)Docker build創(chuàng)建鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在wsl-ubuntu中如何通過(guò) docker 啟動(dòng) gpu-jupyter

    在wsl-ubuntu中如何通過(guò) docker 啟動(dòng) gpu-jupyter

    這篇文章主要介紹了在wsl-ubuntu中如何通過(guò) docker 啟動(dòng) gpu-jupyter,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Docker?Buildx實(shí)現(xiàn)掛載緩存卷的3種高階應(yīng)用場(chǎng)景

    Docker?Buildx實(shí)現(xiàn)掛載緩存卷的3種高階應(yīng)用場(chǎng)景

    本文主要介紹了緩存卷掛載的3種高階應(yīng)用場(chǎng)景,涵蓋多階段構(gòu)建、跨平臺(tái)編譯與CI/CD流水線中的實(shí)戰(zhàn)技巧,提升鏡像構(gòu)建效率與資源利用率,顯著縮短構(gòu)建時(shí)間,感興趣的可以了解一下
    2026-05-05
  • Docker容器開(kāi)啟設(shè)置自動(dòng)啟動(dòng)的實(shí)現(xiàn)方法

    Docker容器開(kāi)啟設(shè)置自動(dòng)啟動(dòng)的實(shí)現(xiàn)方法

    通過(guò)在Docker中設(shè)置容器的默認(rèn)啟動(dòng)命令,我們可以實(shí)現(xiàn)在容器啟動(dòng)時(shí)自動(dòng)啟動(dòng)服務(wù)的功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Docker-compose一鍵部署gitlab中文版的方法步驟

    Docker-compose一鍵部署gitlab中文版的方法步驟

    這篇文章主要介紹了Docker-compose一鍵部署gitlab中文版的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • docker運(yùn)行nginx綁定配置文件失敗原因以及問(wèn)題解決

    docker運(yùn)行nginx綁定配置文件失敗原因以及問(wèn)題解決

    最近工作中在使用docker運(yùn)行nginx的時(shí)候遇到了些問(wèn)題,下面分享給大家,這篇文章主要給大家介紹了關(guān)于docker運(yùn)行nginx綁定配置文件失敗原因以及問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 使用Docker部署Jenkins并實(shí)現(xiàn)自動(dòng)化部署的全流程

    使用Docker部署Jenkins并實(shí)現(xiàn)自動(dòng)化部署的全流程

    本文介紹了使用Docker部署Jenkins并實(shí)現(xiàn)自動(dòng)化部署的完整路徑,涵蓋Docker環(huán)境準(zhǔn)備與選擇、Jenkins容器部署與權(quán)限設(shè)置、DockerSocket與Docker-in-Docker兩種方案對(duì)比、Jenkins初始化與插件配置、憑證管理、Jenkinsfile自動(dòng)化部署流水線、多分支流水線配置等等內(nèi)容
    2026-05-05
  • docker?搭建?ElasticSearch過(guò)程解析

    docker?搭建?ElasticSearch過(guò)程解析

    這篇文章主要介紹了docker搭建ElasticSearch的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,,需要的朋友可以參考下
    2023-08-08
  • Docker部署postgresql的方法實(shí)現(xiàn)

    Docker部署postgresql的方法實(shí)現(xiàn)

    本文主要介紹了Docker部署postgresql的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Docker卸載清除報(bào)錯(cuò)rm:Device or resource busy問(wèn)題及解決

    Docker卸載清除報(bào)錯(cuò)rm:Device or resource busy問(wèn)題及解決

    本文介紹了如何卸載已安裝的Docker,并解決了在刪除Docker數(shù)據(jù)目錄時(shí)遇到的Deviceorresourcebusy錯(cuò)誤,提出了解決方案,即取消掛載目錄或根據(jù)提示進(jìn)行操作
    2026-04-04
  • 如何使用Docker部署Go Web應(yīng)用的實(shí)現(xiàn)

    如何使用Docker部署Go Web應(yīng)用的實(shí)現(xiàn)

    這篇文章主要介紹了如何使用Docker部署Go Web應(yīng)用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

阳谷县| 台江县| 海城市| 怀化市| 原平市| 永昌县| 洛隆县| 华蓥市| 永福县| 竹溪县| 阿鲁科尔沁旗| 唐山市| 井研县| 平和县| 鲜城| 大悟县| 晋城| 大姚县| 上虞市| 天镇县| 濮阳县| 台中市| 陈巴尔虎旗| 图片| 宁国市| 子长县| 嘉荫县| 道孚县| 岗巴县| 和硕县| 贡觉县| 礼泉县| 雷山县| 奎屯市| 大厂| 格尔木市| 莒南县| 津市市| 湛江市| 金昌市| 新乡市|