docker?build?和compose?學習筆記
docker build
和 docker compose up -d
是 Docker 生態(tài)系統(tǒng)中兩個不同的命令,用于不同的場景。以下是它們的核心區(qū)別:
docker build 筆記
docker build -t my-app:1.0 .
是的,docker build -t my-app:1.0 .
命令會自動讀取當前目錄下的 Dockerfile
(文件名必須嚴格為 Dockerfile
,大小寫敏感)。以下是詳細說明:
1. 路徑解析
.
表示“當前目錄”:
命令最后的.
是構建上下文(Build Context)的路徑,Docker 會將該目錄下的所有文件(遞歸)發(fā)送給 Docker 守護進程(daemon),并在其中查找Dockerfile
。例如:若在
/home/user/project
下執(zhí)行命令,則默認讀取/home/user/project/Dockerfile
。
自定義
Dockerfile
路徑:
如果Dockerfile
不在當前目錄,或使用了其他文件名,需通過-f
指定:
docker build -t my-app:1.0 -f ./subdir/CustomDockerfile .
此時仍以
.
(當前目錄)為構建上下文,但使用指定文件作為構建指令。
2. 關鍵注意事項
Dockerfile
必須存在:
如果當前目錄沒有Dockerfile
,會報錯:
ERROR: Cannot locate specified Dockerfile: Dockerfile
構建上下文的影響:
Docker 會將上下文目錄的所有文件發(fā)送給守護進程(可能導致傳輸量大)。
通過
.dockerignore
文件可排除不需要的文件(類似.gitignore
)。
鏡像標簽(
-t
):-t my-app:1.0
為生成的鏡像指定名稱和標簽,后續(xù)可通過docker run my-app:1.0
運行。
2.docker compose up -d
作用:
根據 docker-compose.yml
文件啟動和管理多容器應用(包括構建鏡像、創(chuàng)建網絡、掛載卷等)。
關鍵特點:
輸入:需要一個
docker-compose.yml
文件(定義多容器服務的配置)。輸出:啟動一個或多個容器(基于現有鏡像或自動構建鏡像)。
典型用途:
啟動復雜的多服務應用(如 Web + 數據庫 + Redis)。
管理容器間的依賴關系和網絡配置。
一鍵啟停整個應用環(huán)境。
示例:
docker compose up -d # 根據 docker-compose.yml 啟動所有服務(-d 表示后臺運行)
核心區(qū)別對比
特性 | docker build | docker compose up -d |
---|---|---|
作用對象 | 單個鏡像 | 多容器應用(服務、網絡、卷等) |
輸入文件 | Dockerfile | docker-compose.yml |
輸出結果 | 生成鏡像 | 啟動容器(可能包含構建鏡像的步驟) |
典型場景 | 構建自定義鏡像 | 部署完整的多服務環(huán)境 |
依賴關系 | 不涉及其他容器 | 可定義服務間的依賴(如數據庫先啟動) |
網絡/卷管理 | 無 | 自動創(chuàng)建網絡和卷 |
常見工作流
開發(fā)階段:
用
docker build
構建鏡像。用
docker compose up
測試多服務交互。
生產部署:
直接使用
docker compose up -d
(如果docker-compose.yml
中已定義鏡像來源)。
調試:
docker build
失敗時檢查Dockerfile
。docker compose up
失敗時檢查服務配置或日志。
補充說明
如果
docker-compose.yml
中包含build
字段,docker compose up
會自動構建鏡像(相當于隱式調用docker build
)。-d
參數表示“后臺運行”(detached mode),不加則會附著到容器日志輸出。推薦組合使用:先
build
測試鏡像,再通過compose
編排完整環(huán)境。
1. 功能區(qū)別
命令/工具 | docker build | docker compose |
---|---|---|
核心職責 | 構建鏡像(從 Dockerfile 生成鏡像) | 編排多容器應用(定義和運行多服務環(huán)境) |
輸入文件 | Dockerfile | docker-compose.yml |
操作對象 | 單個鏡像 | 多個容器、網絡、存儲卷等資源 |
典型場景 | 將代碼打包成可運行的鏡像 | 一鍵啟動完整的應用棧(如 Web + DB + Redis) |
2. 協(xié)作關系
場景 1:Compose 自動調用 Build
如果 docker-compose.yml
中定義了 build
字段,運行 docker compose up
時會自動觸發(fā) docker build
:
services: webapp: build: . # 根據當前目錄的 Dockerfile 構建鏡像 ports: - "8000:8000"
執(zhí)行命令:
docker compose up -d # 自動構建鏡像并啟動容器
場景 2:先 Build 后 Compose
手動構建鏡像:
docker build -t my-app:1.0 .
在 Compose 中引用已有鏡像:
services: webapp: image: my-app:1.0 # 直接使用已構建的鏡像 ports: - "8000:8000"
啟動服務:
docker compose up -d
3. 關鍵區(qū)別
維度 | docker build | docker compose |
---|---|---|
層級 | 底層命令(鏡像構建) | 高層工具(應用編排) |
依賴 | 只需要 Dockerfile | 依賴 docker-compose.yml 和鏡像 |
是否管理容器 | 否 | 是(創(chuàng)建、啟動、停止容器) |
網絡/卷 | 不涉及 | 自動管理網絡和存儲卷 |
4. 為什么需要協(xié)作?
開發(fā)效率:
docker compose
通過一個命令即可完成鏡像構建(如果需要)和容器啟動,簡化流程。環(huán)境一致性:
docker-compose.yml
可定義完整的服務依賴(如數據庫先于應用啟動),避免手動操作錯誤。復用性:
構建好的鏡像(docker build
生成)可被多個 Compose 項目共享。
5. 實際工作流示例
開發(fā)階段
編寫
Dockerfile
定義應用環(huán)境。編寫
docker-compose.yml
配置服務依賴。運行:
docker compose up --build # 強制重新構建鏡像并啟動
生產部署
構建生產鏡像:
docker build -t my-app:prod .
通過 Compose 部署:
# docker-compose.prod.yml services: app: image: my-app:prod # 直接使用構建好的鏡像 deploy: replicas: 3
啟動:
docker compose -f docker-compose.prod.yml up -d
總結
docker build
是構建鏡像的工具,docker compose
是編排多容器應用的工具。Compose 可以依賴 Build(通過
build:
字段),但也可以直接使用已存在的鏡像(通過image:
字段)。兩者結合使用能實現從代碼到完整應用環(huán)境的無縫管理。
到此這篇關于docker build 和compose 學習筆記的文章就介紹到這了,更多相關docker build 和compose內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
win10子系統(tǒng)ubuntu(WSL) 安裝Docker的教程(圖文詳解)
現在 Docker 有專門的 Win10 專業(yè)版系統(tǒng)的安裝包,需要開啟Hyper-V,具體開啟方法文中給大家介紹的很詳細,這篇文章主要介紹了win10子系統(tǒng)ubuntu(WSL) 安裝Docker,需要的朋友可以參考下2019-10-10Docker給容器添加新端口映射的兩種方法及常用命令舉例詳解
Docker是一個開源的應用容器引擎,允許開發(fā)者打包和發(fā)布應用到任何流行的Linux機器上,并實現虛擬化,這篇文章主要介紹了Docker給容器添加新端口映射的兩種方法及常用命令的相關資料,需要的朋友可以參考下2025-03-03