Docker 初學者需要了解的幾個知識點 (五):建容器需要進一步了解的概念

之前在《Docker 初學者需要了解的幾個知識點》幾篇文章里,我們梳理了 Docker 的核心概念(如鏡像、容器、網絡等),但在實際搭建 ThinkPHP 容器環境時,又遇到了一些更具體的術語和配置場景。這些內容和實操結合緊密,能幫我們更深入理解 Docker 在開發中的應用,所以在這里補充說明,方便后續遇到類似問題時查閱。

1、數據持久化:卷(Volume)與綁定掛載(Bind Mount)

  • 問題:容器刪除后,內部數據會丟失(如代碼、數據庫文件),需要將數據 “持久化” 到主機。
  • 兩種方式
    • 綁定掛載(Bind Mount):直接將主機的目錄 / 文件映射到容器內(如你之前用的?-v $(pwd):/app,把主機當前目錄映射到容器的?/app)。
      • 優點:簡單直接,適合開發時實時同步代碼(修改主機代碼,容器內立即生效)。
      • 注意:權限可能沖突(容器內用戶與主機用戶 ID 不同時,可能導致文件無法讀寫)。
    • 卷(Volume):由 Docker 管理的主機目錄(默認在?var/lib/docker/volumes/),通過?docker volume create?創建,再用?-v 卷名:/容器內路徑?掛載。
      • 優點:Docker 自動管理權限,適合存儲數據庫數據(如 MySQL 的數據文件),避免手動處理主機目錄權限。
  • 總結:開發代碼用 “綁定掛載”(方便實時修改),數據庫等重要數據用 “卷”(安全持久)。

2、?網絡(Network)

  • 定義:Docker 網絡用于容器之間、容器與主機之間的通信。
  • 核心場景
    • 當你的環境需要多個容器(如 ThinkPHP 應用容器 + MySQL 數據庫容器),它們需要通過網絡互相訪問(如 PHP 容器連接 MySQL 容器)。
    • 容器內的服務(如 PHP 內置服務器)需要暴露端口給主機訪問(如用?-p 8000:80,將容器的 80 端口映射到主機的 8000 端口,主機通過?localhost:8000?訪問)。
  • 常用網絡類型
    • 橋接網絡(Bridge):默認網絡模式,同一橋接網絡內的容器可以通過容器名互相訪問(如?mysql?容器名可直接作為主機名被 PHP 容器訪問)。
    • 主機網絡(Host):容器直接使用主機的網絡(端口無需映射,但隔離性差)。

3、Docker Compose

  • 定義:一個用于定義和運行多容器 Docker 應用的工具(通過?docker-compose.yml?配置文件管理多個服務)。
  • 必要性:搭建 ThinkPHP 完整環境可能需要多個容器(如?phpmysqlnginx),單獨用?docker run?啟動每個容器會很繁瑣,且需要手動管理網絡和掛載。
  • 作用
    • 用一個配置文件(docker-compose.yml)定義所有服務(容器)的參數(鏡像、端口、掛載、網絡等)。
    • 通過?docker-compose up?一鍵啟動所有服務,docker-compose down?一鍵停止并清理,簡化多容器管理。

4、Dockerfile

  • 定義:一個文本文件,包含了構建自定義鏡像的一系列指令(如基于哪個基礎鏡像、安裝依賴、配置環境等)。
  • 用途:官方?php?鏡像可能缺少 ThinkPHP 所需的擴展(如?gdpdo_mysql),這時可以通過 Dockerfile 構建一個包含這些擴展的自定義?php?鏡像。
  • 示例(構建 ThinkPHP 所需的 PHP 鏡像):
    # 基于官方 PHP 鏡像(帶內置服務器的版本)
    FROM php:8.1-cli
    # 安裝 pdo_mysql 擴展(ThinkPHP 連接 MySQL 必需)
    RUN docker-php-ext-install pdo_mysql
    # 設置工作目錄
    WORKDIR /app
    

    然后用?docker build -t my-php:8.1 .?構建鏡像。

5、容器生命周期管理

  • 掌握容器的基本操作,是日常開發的基礎:
    • docker run創建并啟動容器(如?docker run -p 8000:80 my-php:8.1 php think run?啟動 ThinkPHP 內置服務器)。
    • docker ps查看運行中的容器(-a?查看所有容器,包括已停止的)。
    • docker stop <容器ID/名稱>:停止容器。
    • docker rm <容器ID/名稱>:刪除容器(-f?強制刪除運行中的容器)。
    • docker logs <容器ID/名稱>:查看容器日志(調試時常用,如查看 PHP 報錯)。
    • docker exec -it <容器ID/名稱> bash:進入容器內部(如進入 PHP 容器調試代碼、安裝臨時工具)。

6、環境變量(Environment Variables)

  • 容器啟動時可以通過?-e?參數設置環境變量(如數據庫地址、賬號密碼),避免硬編碼到配置文件中。
  • 舉例:啟動 MySQL 容器時指定 root 密碼:

    bash

    docker run -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=tp_db mysql:8.0
    
  • ThinkPHP 中可以通過環境變量讀取配置(如?getenv('DB_HOST')),方便在開發 / 生產環境切換配置。

總結

這些概念是 Docker 應用的基礎,結合 ThinkPHP 開發場景:

  • 用?Dockerfile?構建帶必要擴展的 PHP 鏡像;
  • 用?綁定掛載?同步主機代碼到容器,實時開發;
  • 用??持久化 MySQL 數據;
  • 用?Docker Compose?管理 PHP + MySQL + Nginx 多容器;
  • 用?網絡?實現容器間通信(如 PHP 連接 MySQL);
  • 用?生命周期命令?調試和管理容器。

理解這些后,你可以更靈活地搭建、擴展和維護開發環境。

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

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

相關文章

【數據結構】棧的順序存儲(整型棧、字符棧)

【數據結構】棧的順序存儲&#xff08;整型棧、字符棧&#xff09;一、棧的結構定義二、字符棧的初始化、入棧、出棧、判斷是否棧為空、獲取棧頂元素、獲取棧的當前元素個數等操作三、整型棧的初始化、入棧、出棧、判斷是否棧為空、獲取棧頂元素、獲取棧的當前元素個數等操作一…

【大模型實戰】向量數據庫實戰 - Chroma Milvus

在 RAG&#xff08;檢索增強生成&#xff09;場景中&#xff0c;非結構化數據&#xff08;文本、圖像等&#xff09;的高效檢索是核心需求。傳統關系型數據庫難以勝任&#xff0c;而向量數據庫通過將數據轉化為向量、基于相似度快速匹配&#xff0c;成為 RAG 的關鍵支撐。本文聚…

pytorch程序語句固定開銷分析

深入探索PyTorch與Python的性能微觀世界&#xff1a;量化基礎操作的固定開銷 在深度學習的性能優化工作中&#xff0c;開發者通常將目光聚焦于模型結構、算法效率和并行計算策略。然而&#xff0c;在這些宏觀優化的背后&#xff0c;構成我們代碼的每一條基礎語句——無論是PyTo…

ABP VNext + CloudEvents:事件驅動微服務互操作性

ABP VNext CloudEvents&#xff1a;事件驅動微服務互操作性 &#x1f680; &#x1f4da; 目錄ABP VNext CloudEvents&#xff1a;事件驅動微服務互操作性 &#x1f680;一、引言 ??? TL;DR&#x1f4da; 背景與動機&#x1f3d7;? 整體架構圖二、環境準備與依賴安裝 &am…

軟件測試測評公司關于HTTP安全頭配置與測試?

瀏覽器和服務器之間那幾行看不見的HTTP安全頭配置&#xff0c;往往是抵御網絡攻擊的關鍵防線。作為軟件測試測評公司&#xff0c;我們發現超過六成的高危漏洞源于安全頭缺失或誤配。別小看這些響應頭&#xff0c;它們能直接掐斷跨站腳本、點擊劫持、數據嗅探的攻擊路徑。五條命…

Mysql集成技術

目錄 mysql的編譯安裝與部署 1.編譯安裝mysql 2.部署mysql mysql主從復制 什么是mysql主從復制&#xff1f; 1.配置master 2.配置slave 3.存在數據時添加slave2 4.GTID模式 什么是GTID模式&#xff1f; 配置GTID 5.延遲復制 6.慢查詢日志 核心作用 開啟慢查詢日志…

《MySQL進階核心技術剖析(一): 存儲引擎》

目錄 一、存儲引擎 1.1 MySQL體系結構 1.2 存儲引擎介紹 1). 建表時指定存儲引擎 2). 查詢當前數據庫支持的存儲引擎 1.3 存儲引擎特點 1.3.1 InnoDB 1.3.2 MyISAM 1.3.3 Memory 1.3.4 區別及特點 1.4 存儲引擎選擇 一、存儲引擎 1.1 MySQL體系結構 1). 連接層 最上…

sqli-labs:Less-26關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $sql"SELECT * FROM users WHERE id$id LIMIT 0,1";注入類型&#xff1a;字符串型&#xff08;單引號包裹&#xff09;、GET操作提示&#xff1a;參數需以閉合關鍵參數&#xff1a;id php輸出語句的部分代碼&am…

Spring Boot 的事務注解 @Transactional 失效的幾種情況

開發中我們經常會用到 Spring Boot 的事務注解&#xff0c;為含有多種操作的方法添加事務&#xff0c;做到如果某一個環節出錯&#xff0c;全部回滾的效果。但是在開發中可能會因為不了解事務機制&#xff0c;而導致我們的方法使用了 Transactional 注解但是沒有生效的情況&…

#C語言——刷題攻略:牛客編程入門訓練(四):運算

&#x1f31f;菜鳥主頁&#xff1a;晨非辰的主頁 &#x1f440;學習專欄&#xff1a;《C語言刷題合集》 &#x1f4aa;學習階段&#xff1a;C語言方向初學者 ?名言欣賞&#xff1a;"代碼行數決定你的下限&#xff0c;算法思維決定你的上限。" 目錄 1. BC25 牛牛買電…

阻抗分析中的軟件解調計算

接上篇 重溫無功功率測量-CSDN博客 已知被測阻抗兩端電壓與流過 通過兩個ADC同步采集到。 激勵頻率10k, 采樣率1M, 每周期100個點 關鍵是:采樣率除以激勵頻率, 得是4的倍數... 所以ADC不能自由運行, 得用一個timer來觸發. 因為要進行同相分量正交分量計算。 1&#xff1a;直…

ubuntu 鏡像克隆

一、克隆 1、準備 一個u盤&#xff08;制作啟動盤&#xff09; 一個移動固態硬盤&#xff08;大于要克隆系統盤的1.2倍&#xff09; 2、使用 rufus生成系統啟動盤 &#xff08;1&#xff09;下載ubuntu iso 桌面版 https://cn.ubuntu.com/download &#xff08;2&#x…

Axure下拉菜單:從基礎交互到高保真元件庫應用

在Web端產品設計中&#xff0c;下拉菜單&#xff08;Dropdown Menu&#xff09; 是用戶與系統交互的核心組件之一&#xff0c;它通過隱藏次要選項、節省頁面空間的方式&#xff0c;提升信息密度與操作效率。無論是基礎下拉菜單、圖標式下拉菜單&#xff0c;還是復雜的多級下拉菜…

復現YOLOV5+訓練指定數據集

一、復現YOLOV5代碼 1.github下載&#xff1a;https://github.com/MIPIT-Team/SSA-YOLO 2.配置環境&#xff1a;創建虛擬環境yolo5 conda create -n yolo5 python3.9 #對應文件夾下pip install -r requirements.txt報錯&#xff1a;ERROR: pips dependency resolver does no…

Agents-SDK智能體開發[4]之集成MCP入門

文章目錄說明一 Agents SDK接入MCP1.1 MCP技術回顧1.2 MCP基礎實踐流程1.2.1 天氣查詢服務器Server創建流程1.2.2 服務器依賴安裝和代碼編寫1.2.3 環境配置文件1.2.4 客戶端代碼編寫1.3 測試運行二 MCPAgents SDK基礎調用2.1 weather_server.py2.2 client_agent.py2.3 運行測試…

Camera相機人臉識別系列專題分析之十九:MTK ISP6S平臺FDNode傳遞三方FFD到APP流程解析

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: Camera相機人臉識別系列專題分析之十九:MTK平臺FDNode傳遞三方FFD到APP流程解析 目錄 一、背景 二、:OcamMeta傳遞FFD到APP 2.1:OcamMeta 2.2 :OcamMeta::process更新FFD 2.…

【實時Linux實戰系列】構建實時監測與報警系統

在實時系統中&#xff0c;監測與報警系統是確保系統正常運行和及時響應異常情況的關鍵組件。實時監測與報警系統能夠實時收集系統數據&#xff0c;分析關鍵事件&#xff0c;并在檢測到異常時發出警報。這種系統廣泛應用于工業自動化、醫療設備監控、網絡安全等領域。掌握實時監…

PHP入門及數據類型

PHP數據類型 PHP標記 //HTML風格 <?phpecho "hello world"; ?> //簡短風格 <?echo "hello world"; ?>數據類型 PHP 最初源于 Perl 語言&#xff0c;與 Perl 類似&#xff0c;PHP 對數據類型采取較為寬松的態度。PHP 規定&#xff0c;變量數…

沸點 | 嬴圖參加世界人工智能大會

2025 WAIC于 7 月 26 日至 28 日在上海舉行。大會展覽面積突破 7 萬平方米&#xff0c;800 余家企業參展。嬴圖作為圖數據庫領域的領先企業&#xff0c;攜前沿技術與創新應用精彩亮相。?大會期間&#xff0c;嬴圖創始人兼CEO孫宇熙與來自全球的頂尖學者、企業代表共同探討人工…

2. 字符設備驅動

一、設備號 1.1. 什么是設備號 設備號是用來標記一類設備以及區分這類設備中具體個體的一組號碼。 設備號由主設備號和次設備號組成。主設備號的作用為標記一類設備、用于標識設備驅動程序,而次設備號的作用是為了區分這類設備中的具體個體設備及用于標識同一驅動程序下的具…