docker build 和compose 學習筆記

目錄

docker build 筆記

1. 路徑解析

2. 關鍵注意事項

2.?docker compose up -d

核心區別對比

常見工作流

補充說明

1. 功能區別

2. 協作關系

場景 1:Compose 自動調用 Build

場景 2:先 Build 后 Compose

3. 關鍵區別

4. 為什么需要協作?

5. 實際工作流示例

開發階段

生產部署

總結


docker build?和?docker compose up -d?是 Docker 生態系統中兩個不同的命令,用于不同的場景。以下是它們的核心區別:


docker build 筆記

docker build -t my-app:1.0 .?

是的,docker build -t my-app:1.0 .?命令會自動讀取當前目錄下的?Dockerfile(文件名必須嚴格為?Dockerfile,大小寫敏感)。以下是詳細說明:


1. 路徑解析

  • .?表示“當前目錄”
    命令最后的?.?是構建上下文(Build Context)的路徑,Docker 會將該目錄下的所有文件(遞歸)發送給 Docker 守護進程(daemon),并在其中查找?Dockerfile

    • 例如:若在?/home/user/project?下執行命令,則默認讀取?/home/user/project/Dockerfile

  • 自定義?Dockerfile?路徑
    如果?Dockerfile?不在當前目錄,或使用了其他文件名,需通過?-f?指定:

    docker build -t my-app:1.0 -f ./subdir/CustomDockerfile .
    • 此時仍以?.(當前目錄)為構建上下文,但使用指定文件作為構建指令。


2. 關鍵注意事項

  1. Dockerfile?必須存在
    如果當前目錄沒有?Dockerfile,會報錯:

    ERROR: Cannot locate specified Dockerfile: Dockerfile
  2. 構建上下文的影響

    • Docker 會將上下文目錄的所有文件發送給守護進程(可能導致傳輸量大)。

    • 通過?.dockerignore?文件可排除不需要的文件(類似?.gitignore)。

  3. 鏡像標簽(-t
    -t my-app:1.0?為生成的鏡像指定名稱和標簽,后續可通過?docker run my-app:1.0?運行。


2.?docker compose up -d

作用
根據?docker-compose.yml?文件啟動和管理多容器應用(包括構建鏡像、創建網絡、掛載卷等)。

關鍵特點

  • 輸入:需要一個?docker-compose.yml?文件(定義多容器服務的配置)。

  • 輸出:啟動一個或多個容器(基于現有鏡像或自動構建鏡像)。

  • 典型用途

    • 啟動復雜的多服務應用(如 Web + 數據庫 + Redis)。

    • 管理容器間的依賴關系和網絡配置。

    • 一鍵啟停整個應用環境。

示例

docker compose up -d  # 根據 docker-compose.yml 啟動所有服務(-d 表示后臺運行)

核心區別對比

特性docker builddocker compose up -d
作用對象單個鏡像多容器應用(服務、網絡、卷等)
輸入文件Dockerfiledocker-compose.yml
輸出結果生成鏡像啟動容器(可能包含構建鏡像的步驟)
典型場景構建自定義鏡像部署完整的多服務環境
依賴關系不涉及其他容器可定義服務間的依賴(如數據庫先啟動)
網絡/卷管理自動創建網絡和卷

常見工作流

  1. 開發階段

    • 用?docker build?構建鏡像。

    • 用?docker compose up?測試多服務交互。

  2. 生產部署

    • 直接使用?docker compose up -d(如果?docker-compose.yml?中已定義鏡像來源)。

  3. 調試

    • docker build?失敗時檢查?Dockerfile

    • docker compose up?失敗時檢查服務配置或日志。


補充說明

  • 如果?docker-compose.yml?中包含?build?字段,docker compose up?會自動構建鏡像(相當于隱式調用?docker build)。

  • -d?參數表示“后臺運行”(detached mode),不加則會附著到容器日志輸出。

  • 推薦組合使用:先?build?測試鏡像,再通過?compose?編排完整環境。

1. 功能區別

命令/工具docker builddocker compose
核心職責構建鏡像(從?Dockerfile?生成鏡像)編排多容器應用(定義和運行多服務環境)
輸入文件Dockerfiledocker-compose.yml
操作對象單個鏡像多個容器、網絡、存儲卷等資源
典型場景將代碼打包成可運行的鏡像一鍵啟動完整的應用棧(如 Web + DB + Redis)

2. 協作關系

場景 1:Compose 自動調用 Build

如果?docker-compose.yml?中定義了?build?字段,運行?docker compose up?時會自動觸發?docker build

services:webapp:build: .  # 根據當前目錄的 Dockerfile 構建鏡像ports:- "8000:8000"

執行命令:

docker compose up -d  # 自動構建鏡像并啟動容器
場景 2:先 Build 后 Compose
  1. 手動構建鏡像

    docker build -t my-app:1.0 .
  2. 在 Compose 中引用已有鏡像

    services:webapp:image: my-app:1.0  # 直接使用已構建的鏡像ports:- "8000:8000"
  3. 啟動服務

    docker compose up -d

3. 關鍵區別

維度docker builddocker compose
層級底層命令(鏡像構建)高層工具(應用編排)
依賴只需要?Dockerfile依賴?docker-compose.yml?和鏡像
是否管理容器是(創建、啟動、停止容器)
網絡/卷不涉及自動管理網絡和存儲卷

4. 為什么需要協作?

  • 開發效率
    docker compose?通過一個命令即可完成鏡像構建(如果需要)和容器啟動,簡化流程。

  • 環境一致性
    docker-compose.yml?可定義完整的服務依賴(如數據庫先于應用啟動),避免手動操作錯誤。

  • 復用性
    構建好的鏡像(docker build?生成)可被多個 Compose 項目共享。


5. 實際工作流示例

開發階段
  1. 編寫?Dockerfile?定義應用環境。

  2. 編寫?docker-compose.yml?配置服務依賴。

  3. 運行:

    docker compose up --build  # 強制重新構建鏡像并啟動
生產部署
  1. 構建生產鏡像:

    docker build -t my-app:prod .
  2. 通過 Compose 部署:

    # docker-compose.prod.yml
    services:app:image: my-app:prod  # 直接使用構建好的鏡像deploy:replicas: 3
  3. 啟動:

    docker compose -f docker-compose.prod.yml up -d

總結

  • docker build?是構建鏡像的工具docker compose?是編排多容器應用的工具

  • Compose?可以依賴 Build(通過?build:?字段),但也可以直接使用已存在的鏡像(通過?image:?字段)。

  • 兩者結合使用能實現從代碼到完整應用環境的無縫管理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915835.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java學習第六十六部分——分布式系統架構

目錄 一、前言提要 二、核心目標 三、核心組件與技術 1. 服務拆分與通信 2. 服務注冊與發現 3. 配置中心 4. 負載均衡 5. 熔斷、降級與限流 6. API 網關 7. 分布式數據管理 8. 分布式追蹤與監控 9. 容器化與編排 四、典型Java分布式技術棧組合 五、關鍵…

Pycharm的Terminal打開后默認是python環境

Pycharm的Terminal打開后默認是python環境解決方案Pycharm的Terminal打開后默認是python環境,無法執行pip等命令,也沒辦法退出 解決方案 點擊Settings -> Tools -> Terminal 可以看到當前默認打開的是torch19py38環境中的python.exe(…

LVS——nat模式

一、搭建nat模式下LVS的實驗環境1.創建四臺虛擬機client——客戶端:192.168.134.111/24(nat模式)LVS——調度器【雙網卡】:192.168.134.112/24(nat模式)、172.25.254.111/24(僅主機模式&#xf…

ElasticSearch是什么

ElasticSearch是什么 ElasticSearch 是一個基于 Apache Lucene 的開源分布式搜索引擎,用于全文搜索、日志分析、實時數據分析等場景。它以高性能、分布式架構和易用性著稱,支持 JSON 格式的數據存儲和查詢,廣泛應用于日志監控、搜索服務、企業…

linxu CentOS 配置nginx

1、準備要發布的文件夾sudo mkdir -p /var/www/myfiles # 創建文件夾(如果不存在) sudo chmod -R 755 /var/www/myfiles # 設置權限(確保 Nginx 可以讀取) sudo chown -R nginx:nginx /var/www/myfiles # 修改所有者&#xff0…

內網穿透利器:基于HTTPHTTPS隧道的代理工具深度解析

內網穿透利器:基于HTTP/HTTPS隧道的代理工具深度解析 一、引言 在滲透測試和內網滲透中,HTTP/HTTPS隧道技術是突破網絡邊界的關鍵手段。它通過將TCP流量封裝在HTTP協議中,穿透防火墻/NACL策略,實現內網橫向移動。本文以reGeorg為…

容器編排K8S

k8s概述 容器部署優勢:部署方便,不依賴底層環境,升級鏡像 本質是一個容器編排工具,golang語言開發 master master管理節點:kube-api-server請求接口,kube-scheduler調度器,kube-controller-manager控制器/管理器,etcd分布式存儲數據庫 work node服務節點:kubelet代理保…

C語言:深入理解指針(1)

1. 內存和地址在了解指針前,我們需要知道內存和地址是什么。1.1 內存首先來看內存。舉個例子:當你在酒店找房間時,你并不是一層一層一間一間找,而是通過酒店為每間房子設置的門牌號直接找到你的房間,這樣的效率就會快很…

完整的 SquareStudio 注冊登錄功能實現方案:已經燒錄到開發板正常使用

根據你的需求,我將提供完整的實現方案,解決按鈕同時執行多個動作的問題,并確保注冊登錄功能正常工作。所需文件結構需要創建和修改的文件如下:ui_events.h - 事件處理函數聲明events.c - 實際的事件處理邏輯ui.c - UI 初始化和事件…

OkHttp 與 Chuck 結合使用:優雅的 Android 網絡請求調試方案

前言在 Android 應用開發過程中,網絡請求調試是日常工作中不可或缺的一部分。Chuck 是一個輕量級的 OkHttp 攔截器,能夠在應用內直接顯示網絡請求和響應的詳細信息,無需連接電腦或使用額外工具。本文將詳細介紹如何將 OkHttp 與 Chuck 結合使…

AI學習--本地部署ollama

AI小白,記錄下本地部署ollama1.下載安裝ollama下載地址ollama官方地址https://ollama.com/download根據系統下載即可下面是我下載的地址 https://release-assets.githubusercontent.com/github-production-release-asset/658928958/e8384a9d-8b1e-4742-9400-7a0ce2a…

docker 設置鏡像倉庫代理

1. 創建 Docker 服務的代理配置文件sudo mkdir -p /etc/systemd/system/docker.service.d2.創建文件 /etc/systemd/system/docker.service.d/http-proxy.conf,內容如下:[Service] Environment"HTTP_PROXYhttp://192.168.0.111:7890" Environme…

ffmpeg rtsp 丟包處理

直接用 demux 在有些網絡中,丟包畫屏; 再ffmpeg和ffplay中,可以指定 tcp 方式,所以代碼直接設置陶瓷坯方式; // 設置RTSP選項優化接收數據流防止數據包丟失 av_dict_set(&options, "rtsp_transport", …

aosp15實現SurfaceFlinger的dump輸出帶上Layer詳細信息踩坑筆記

背景: 針對上一篇文章 aosp15上SurfaceFlinger的dump部分新特性-無Layer信息輸出如何解決? 給大家布置了一個小作業,那就是需要實現dumpsys SurfaceFlinger相關輸出中可以攜帶上所有的Layer的詳細信息需求,今天來帶大家詳細實現一…

Linux 網絡調優指南:廢棄的 tcp_tw_recycle 與安全替代方案

一、問題起源:消失的內核參數 當你在 Debian 10 系統執行 sysctl 命令時,若看到報錯: sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: 沒有那個文件或目錄 這并非配置錯誤,而是Linux 內核演進的結果。自 4.12 版本起,內核正式移除了 tcp_tw_recycle 參數——…

刪除有序數組中的重復項

class Solution {public int removeElement(int[] nums, int val) {// 暴力法int n nums.length;for (int i 0; i < n; i) {if (nums[i] val) {for (int j i 1; j < n; j) {nums[j - 1] nums[j];}i--;n--;}}return n;} }代碼邏輯解析首先獲取數組長度n&#xff0c;…

【Pytest】從配置到固件的使用指南

掌握高效測試的關鍵技巧&#xff0c;打造專業級自動化測試框架一、Pytest框架的核心優勢 Pytest作為Python最強大的測試框架之一&#xff0c;以其簡潔靈活的語法和豐富的擴展能力深受開發者喜愛。相比unittest&#xff0c;Pytest提供了更直觀的測試編寫方式和更強大的功能集&am…

[matlab]matlab上安裝xgboost安裝教程簡單版

【前言】 網上基于MATLAB的xgboost安裝教程太少了&#xff0c;以至于幾乎搜不到&#xff0c;為此做了一個簡單安裝教程【安裝前提】 有matlab軟件&#xff0c;版本越高越好&#xff0c;我用的是2023a。理論支持matlab2018a及其以上&#xff0c;因此需要自己提前安裝好matlab【安…

基于多種機器學習的成都市二手房房價分析與價格預測【城市可換、算法模型多種對比】

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目背景數據來源與采集方式數據預處理與清洗流程探索性數據分析&#xff08;EDA&#xff09;模型構建與預測方法項目意義與應用前景相關可視化展示總結每文一語有需要本項目的代碼或文檔以及…

PostgreSQL 事務ID環繞問題

事務ID&#xff08;XID&#xff09;基本概念 從Transactions and Identifiers可知&#xff1a; 事務 ID&#xff0c;例如 278394&#xff0c;會根據 PostgreSQL 集群內所有數據庫使用的全局計數器按順序分配給事務。此分配會在事務首次寫入數據庫時進行。這意味著編號較低的 x…