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

