深入解析 Apache Tomcat 配置文件

前言

Apache Tomcat 作為最流行的開源 Java Web 應用服務器之一,其強大功能的背后離不開一系列精心設計的配置文件。正確理解和配置這些文件,是部署、管理和優化 Web 應用的關鍵。本篇博客將深入探討 Tomcat 的核心配置文件,涵蓋其結構、關鍵元素、最佳實踐以及常見配置場景,力求為讀者提供一份詳盡的參考指南。

目錄

  1. Tomcat 目錄結構概覽
  2. 核心配置文件詳解
    • server.xml: 服務器主配置
    • web.xml: 全局 Web 應用配置
    • context.xml: 上下文配置
    • tomcat-users.xml: 用戶與角色管理
    • catalina.policy: 安全策略
    • catalina.properties: 系統屬性與類加載
    • logging.properties: 日志系統配置
  3. 配置文件位置與優先級
  4. 高級配置與最佳實踐
  5. 常見配置場景示例
  6. 總結

1. Tomcat 目錄結構概覽

在深入配置文件之前,了解 Tomcat 的標準目錄結構至關重要:

  • bin/: 啟動、停止腳本 (startup.sh, shutdown.sh, catalina.sh)。
  • conf/: 所有配置文件的核心存放目錄,本文重點。
  • lib/: Tomcat 服務器自身及所有 Web 應用共享的 JAR 文件。
  • logs/: 服務器運行日志(catalina.out, localhost.log 等)。
  • temp/: 臨時工作目錄。
  • webapps/: 部署 Web 應用程序(WAR 文件或解壓后的目錄)的默認位置。
  • work/: JSP 編譯后生成的 Servlet 源碼和字節碼文件存放目錄。

2. 核心配置文件詳解

2.1 conf/server.xml - 服務器主配置文件

這是 Tomcat 的心臟,定義了服務器的整體架構和主要服務組件。其結構遵循一個 Server 元素包含一個 Service 元素,Service 包含 ConnectorEngineEngine 包含 HostHost 包含 Context 的層級關系。

核心元素解析:

  • <Server>: 根元素。

    • port: 指定用于關閉服務器的監聽端口(如 8005)。設置為 -1 可禁用此端口。
    • shutdown: 發送到該端口的字符串,用于觸發關閉(如 SHUTDOWN)。
  • <Service>: 定義一個服務,通常包含一個 Engine 和一個或多個 Connector

    • name: 服務名稱(如 Catalina)。
  • <Connector>: 定義客戶端與 Tomcat 之間的連接方式。這是最常修改的配置之一。

    • HTTP/HTTPS Connector:
      <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxThreads="200"minSpareThreads="10"maxSpareThreads="75"acceptCount="100"enableLookups="false"URIEncoding="UTF-8"compression="on"compressionMinSize="2048"compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json"/>
      
      • port: 監聽端口(HTTP 默認 8080)。
      • protocol: 協議(HTTP/1.1org.apache.coyote.http11.Http11NioProtocol 啟用 NIO)。
      • connectionTimeout: 連接超時時間(毫秒)。
      • redirectPort: 當需要安全連接時,重定向到的端口(通常用于 HTTPS)。
      • maxThreads: 最大工作線程數,處理請求。
      • minSpareThreads / maxSpareThreads: 最小/最大空閑線程數。
      • acceptCount: 當所有線程忙時,等待隊列的最大長度。
      • enableLookups: 是否啟用反向 DNS 查找(設為 false 提升性能)。
      • URIEncoding: URI 編碼格式(強烈建議設為 UTF-8)。
      • compression: 啟用 GZIP 壓縮(on),減少傳輸數據量。
      • compressionMinSize: 啟用壓縮的最小響應大小(字節)。
      • compressableMimeType: 指定哪些 MIME 類型的響應可被壓縮。
    • HTTPS (SSL/TLS) Connector:
      <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true"><SSLHostConfig><Certificate certificateKeystoreFile="conf/keystore.jks"certificateKeystorePassword="changeit"type="RSA" /></SSLHostConfig>
      </Connector>
      
      • SSLEnabled="true": 啟用 SSL。
      • certificateKeystoreFile: 指向包含服務器證書和私鑰的 Keystore 文件(如 JKS 格式)。
      • certificateKeystorePassword: Keystore 的密碼。
      • type: 證書密鑰類型(RSA, EC 等)。
      • 注意:現代 Tomcat 版本推薦使用 <SSLHostConfig> 子元素進行更靈活的配置。
  • <Engine>: 請求處理引擎,負責將請求路由到適當的 Host

    • name: 引擎名稱(通常為 Catalina)。
    • defaultHost: 默認的 Host 名稱(當請求的 Host 頭不匹配任何 Host 時使用)。
  • <Host>: 虛擬主機,代表一個域名或 IP 地址。

    • name: 主機名(如 localhost, www.example.com)。
    • appBase: 該主機下 Web 應用存放的目錄(相對于 CATALINA_HOME 或絕對路徑,如 webapps)。
    • unpackWARs: 是否自動解壓 WAR 文件(true/false)。
    • autoDeploy: 是否自動部署新應用或檢測到應用更新(true/false)。
    • xmlValidation: 是否驗證 context.xml 文件(通常 false 提升性能)。
    • xmlNamespaceAware: 是否啟用 XML 命名空間感知(通常 false)。
    • <Valve>: 閥門,用于攔截請求/響應,實現日志、訪問控制等功能。
      • AccessLogValve: 記錄訪問日志。
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b %D" />
        
        • pattern: 日志格式(%h=客戶端 IP, %t=時間, %r=請求行, %s=狀態碼, %b=響應字節數, %D=處理時間毫秒)。
      • RemoteAddrValve / RemoteHostValve: 基于 IP 或主機名進行訪問控制。
        <Valve className="org.apache.catalina.valves.RemoteAddrValve"allow="127\.0\.0\.1,192\.168\.1\.\d+" />
        
  • <Context>: 不推薦server.xml 中全局定義。應使用 conf/context.xmlMETA-INF/context.xml。如果在此定義,docBase 指向應用的物理路徑。

2.2 conf/web.xml - 全局 Web 應用配置

此文件定義了所有部署在該 Tomcat 實例上的 Web 應用的默認行為。它遵循 Servlet 規范。

關鍵配置:

  • <servlet> / <servlet-mapping>: 定義內置 Servlet 及其映射。

    • default: 處理靜態資源(HTML, CSS, JS, 圖片)。
    • jsp: 處理 JSP 文件。
    • 例如,可以配置 default servlet 的 sendfileSize(啟用 sendfile 優化大文件傳輸)或 listings(是否允許目錄瀏覽,生產環境務必設為 false)。
  • <mime-mapping>: 定義文件擴展名與 MIME 類型的映射(如 .css -> text/css)。

  • <welcome-file-list>: 定義歡迎文件列表(如 index.html, index.jsp)。

  • <session-config>: 配置會話。

    • <session-timeout>: 會話超時時間(分鐘)。
    • <cookie-config>: 配置會話 Cookie。
      • <http-only>: 防止 JavaScript 訪問 Cookie(推薦 true)。
      • <secure>: 僅通過 HTTPS 傳輸 Cookie(HTTPS 環境下推薦 true)。
      • <same-site>: 防止 CSRF(可設為 LaxStrict)。
  • <security-constraint>: 定義安全約束(如需要認證的角色)。

  • <error-page>: 定義全局錯誤頁面(如 404, 500 錯誤碼對應的頁面)。

2.3 conf/context.xml - 上下文配置

此文件為所有 Web 應用提供默認的 Context 配置。也可以在 META-INF/context.xml(應用內)或 conf/[enginename]/[hostname]/ 目錄下創建 [appname].xml 文件進行更細粒度的配置。

常用配置:

  • <WatchedResource>: 指定 Tomcat 監控的文件,當文件改變時自動重新加載應用(開發環境有用)。

    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    
  • <Resources>: 配置靜態資源處理(如啟用緩存、設置緩存時間)。

    <Resources cachingAllowed="true" cacheMaxSize="100000" />
    
  • <JarScanner>: 配置 JAR 包掃描(可跳過某些 JAR 以加快啟動)。

    <JarScanner scanClassPath="false" />
    
  • <Manager>: 配置會話管理器(如持久化會話到文件或數據庫)。

  • <Environment>: 定義 JNDI 環境條目(可在應用中通過 JNDI 查找)。

  • <ResourceLink>: 創建對全局資源的鏈接(見 GlobalNamingResources)。

2.4 conf/tomcat-users.xml - 用戶與角色管理

用于配置訪問 Tomcat Manager 和 Host Manager 應用的用戶憑據。

<tomcat-users xmlns="http://tomcat.apache.org/xml"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"version="1.0"><role rolename="manager-gui"/><role rolename="admin-gui"/><user username="admin" password="s3cr3tP@ssw0rd!" roles="manager-gui,admin-gui"/>
</tomcat-users>
  • 角色 (Roles):
    • manager-gui: 訪問 Manager Web 應用(部署、啟動、停止應用)。
    • manager-script: 訪問 Manager 的文本接口(用于腳本)。
    • manager-jmx: 通過 JMX 訪問 Manager。
    • manager-status: 僅查看服務器狀態。
    • admin-gui: 訪問 Host Manager Web 應用(管理虛擬主機)。
    • admin-script: 訪問 Host Manager 的文本接口。
  • 重要安全提示生產環境必須修改默認密碼,并考慮使用更安全的身份驗證機制(如集成 LDAP)。
2.5 conf/catalina.policy - 安全策略文件 (Java Security Manager)

當啟用 Java Security Manager 時(通過 catalina.sh-security 參數),此文件定義了代碼權限。配置復雜且可能影響性能,生產環境較少使用,但了解其結構很重要。

  • 基于 grant 語句,為代碼庫 (codeBase) 或簽名者 (signedBy) 授予特定權限 (java.io.FilePermission, java.net.SocketPermission 等)。
  • 通常包含對 Tomcat 自身和 webapps 目錄的廣泛授權。
2.6 conf/catalina.properties - 系統屬性與類加載

定義 Tomcat 運行時的系統屬性和類加載器行為。

關鍵屬性:

  • shared.loader / common.loader: 定義類加載器的搜索路徑。
    • common.loader: Tomcat 內部類和所有應用共享的類($CATALINA_HOME/lib/*.jar)。
    • shared.loader: Tomcat 內部類不使用,但所有應用共享的類($CATALINA_BASE/lib/*.jar)。可用于放置所有應用共用的第三方庫。
  • tomcat.util.scan.StandardJarScanFilter.jarsToSkip: 指定在掃描 JAR 包以查找 TLD、注解等時要跳過的 JAR 列表,顯著加快啟動時間
  • tomcat.util.scan.StandardJarScanFilter.jarsToScan: 指定必須掃描的 JAR(即使在 jarsToSkip 中)。
  • log4j.configurationFile: (如果使用 Log4j) 指定 Log4j 配置文件位置。
2.7 conf/logging.properties - JULI 日志配置

Tomcat 使用其增強版的 Java Util Logging (JULI)。此文件配置日志記錄器、處理器和格式。

結構:

  • handlers: 定義全局處理器(如 java.util.logging.ConsoleHandler, org.apache.juli.FileHandler)。
  • .level: 根日志記錄器的級別(FINE, INFO, WARNING, SEVERE)。
  • org.apache.catalina.core.ContainerBase.[enginename].[hostname].level: 為特定組件設置日志級別。
  • org.apache.catalina.core.ContainerBase.[enginename].[hostname].handlers: 為特定組件指定處理器。
  • java.util.logging.FileHandler.pattern: 定義日志文件命名模式(如 %h/catalina.%g.log)。
  • java.util.logging.FileHandler.limit / count: 單個日志文件大小限制和循環文件數量。
  • java.util.logging.SimpleFormatter.format: 定義日志輸出格式。

3. 配置文件位置與優先級

Tomcat 遵循特定的配置覆蓋優先級:

  1. conf/server.xml: 最高優先級,直接定義全局服務和連接器。
  2. conf/[enginename]/[hostname]/[appname].xml: 為特定主機上的特定應用提供 Context 配置,優先級高于 conf/context.xml
  3. conf/context.xml: 為所有應用提供默認 Context 配置。
  4. WEB-INF/web.xml (應用內): 定義應用自身的 Servlet、Filter、Listener 等,優先級高于 conf/web.xml 的全局默認值
  5. conf/web.xml: 提供所有應用的全局默認 Servlet 映射、MIME 類型等。

關鍵點Context 配置可以從多個來源組合。例如,conf/context.xml 提供基礎,[appname].xml 可以覆蓋或添加特定設置,應用內的 META-INF/context.xml 也可以提供配置(但通常不推薦,因為它隨應用部署)。


4. 高級配置與最佳實踐

  • 性能調優:
    • 線程池: 根據應用負載調整 ConnectormaxThreads, minSpareThreads
    • 連接器: 優先使用 NIOAPR/native 協議。
    • 壓縮: 啟用 compression 減少帶寬。
    • JAR 掃描: 在 catalina.properties 中合理配置 jarsToSkip
    • 會話超時: 根據業務需求設置合理的 session-timeout
  • 安全性:
    • 禁用默認管理應用: 生產環境刪除或重命名 webapps/managerwebapps/host-manager,或嚴格限制訪問 IP。
    • 強密碼: 為 tomcat-users.xml 中的用戶設置強密碼。
    • HTTPS: 生產環境務必使用 HTTPS,正確配置 SSL/TLS(考慮使用 Let’s Encrypt 證書)。
    • 安全頭: 使用 FilterValve 添加安全頭(如 X-Content-Type-Options, X-Frame-Options, Content-Security-Policy)。
    • 最小權限: 避免使用 root 用戶運行 Tomcat。
  • 高可用與監控:
    • 集群: 使用 mod_jk/mod_proxy 與 Apache/Nginx 配合實現負載均衡和故障轉移。
    • JMX: 啟用 JMX 遠程監控(注意安全配置)。
    • 健康檢查: 配置 manager/status 端點用于健康檢查。
  • 外部化配置: 將數據庫連接等敏感信息通過 JNDI (context.xml) 或環境變量注入,避免硬編碼。

5. 常見配置場景示例

場景 1: 配置 HTTPS

  1. 生成或獲取 SSL 證書(.crt, .key)并導入 Keystore (keystore.jks)。
  2. server.xml 中添加或修改 HTTPS Connector,指向 Keystore。
  3. (可選)在 web.xml 中添加 <security-constraint> 強制重定向 HTTP 到 HTTPS。

場景 2: 數據庫連接池 (JNDI)

  1. 將數據庫驅動 JAR 放入 lib/ 目錄。
  2. conf/context.xml[appname].xml 中定義 Resource:
    <Resource name="jdbc/MyDB" auth="Container" type="javax.sql.DataSource"maxTotal="100" maxIdle="30" maxWaitMillis="10000"username="dbuser" password="dbpass" driverClassName="com.mysql.cj.jdbc.Driver"url="jdbc:mysql://localhost:3306/mydb"/>
    
  3. 在應用的 WEB-INF/web.xml 中添加 resource-ref:
    <resource-ref><description>DB Connection</description><res-ref-name>jdbc/MyDB</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth>
    </resource-ref>
    
  4. 在代碼中通過 JNDI 查找: Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MyDB");

場景 3: 自定義錯誤頁面

  1. conf/web.xml 或應用的 web.xml 中添加:
    <error-page><error-code>404</error-code><location>/error/404.html</location>
    </error-page>
    <error-page><exception-type>java.lang.Exception</exception-type><location>/error/500.jsp</location>
    </error-page>
    
  2. 確保 /error/404.html/error/500.jsp 文件存在于應用的根目錄下。

6. 總結

深入理解 Tomcat 的配置文件是駕馭這頭“貓”的關鍵。server.xml 勾勒出服務器的骨架,web.xmlcontext.xml 定義了應用的默認行為,tomcat-users.xml 管理著訪問的鑰匙。通過合理配置這些文件,不僅能確保應用穩定運行,更能實現性能優化、安全保障和靈活部署。

核心要點回顧

  • 理解層級與優先級:清楚不同配置文件的作用范圍和覆蓋關系。
  • 安全第一:及時修改默認密碼,禁用不必要的管理應用,優先使用 HTTPS。
  • 性能調優:根據實際負載調整線程、連接器和緩存設置。
  • 日志清晰:配置有意義的訪問日志和應用日志,便于問題排查。
  • 外部化敏感信息:使用 JNDI 或環境變量管理數據庫密碼等。

希望本篇詳盡的指南能幫助您更自信地配置和管理您的 Tomcat 服務器。實踐是掌握的最佳途徑,建議在測試環境中大膽嘗試各種配置。祝您配置順利!

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

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

相關文章

ThinkPHP8學習篇(一):安裝與配置

ThinkPHP有非常多的功能庫&#xff0c;我的學習策略很明確&#xff1a;不貪多求全&#xff0c;只掌握最核心的20%功能&#xff0c;解決80%的業務需求。所有學習都圍繞一個目標&#xff1a;夠用就行。遇到復雜問題時&#xff0c;再具體學習對應的內容。 作為ThinkPHP學習的第一…

【Python練習】075. 編寫一個函數,實現簡單的語音識別功能

075. 編寫一個函數,實現簡單的語音識別功能 075. 編寫一個函數,實現簡單的語音識別功能 安裝依賴庫 示例代碼 代碼說明 示例輸出 注意事項 使用 PocketSphinx 進行離線語音識別 注意事項 實現方法 使用SpeechRecognition庫實現語音識別 使用PyAudio和深度學習模型 使用Vosk離…

chrome的數據采集插件chat4data的使用

簡介&#xff1a; Chat4Data是一款Chrome擴展插件&#xff0c;支持AI網頁數據采集與分析。用戶可通過Chrome應用商店安裝后&#xff0c;在網頁上選擇區塊和字段進行數據抓取&#xff0c;設置采集頁數后導出結果。該工具適用于結構化數據提取&#xff0c;操作簡便&#xff0c;為…

《人形機器人的覺醒:技術革命與碳基未來》——類人關節設計:人工肌肉研發進展及一款超生物肌肉Hypermusclet的設計與制造

目錄&#xff1a;一、人工股肉的不同種類及工作原理和比較優勢二、人工肌肉研發的重點難點及成果進展和趨勢三、人工肌肉主要研發機構及其研發成果四、人工肌肉主要性能檢測表征能力及標準體系建設五、人工肌肉主要制造商及其產品性能優勢和供應能力六、人工肌肉在機器人市場應…

【人工智能】AI代理的倫理迷局:自主智能體的責任歸屬之謎

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 在人工智能時代,AI代理作為自主決策的代表,正深刻改變著人類社會。然而,其倫理困境日益凸顯:當AI代理做出自主決策時,誰應為其后果負責…

C語言數據結構(6)貪吃蛇項目1.貪吃蛇項目介紹

1. 游戲背景 貪吃蛇是久負盛名的游戲&#xff0c;它也和俄羅斯方塊&#xff0c;掃雷等游戲位列經典游戲的行列。 在編程語言的教學中&#xff0c;我們以貪吃蛇為例&#xff0c;從設計到代碼實現來提升學生的編程能力和邏輯能力。 2. 游戲效果演示 3. 項目目標 使用C語言…

神經網絡的并行計算與加速技術

神經網絡的并行計算與加速技術一、引言隨著人工智能技術的飛速發展&#xff0c;神經網絡在眾多領域展現出了巨大的潛力和廣泛的應用前景。然而&#xff0c;神經網絡模型的復雜度和規模也在不斷增加&#xff0c;這使得傳統的串行計算方式面臨著巨大的挑戰&#xff0c;如計算速度…

工廠方法模式:從基礎到C++實現

引言 在軟件開發中&#xff0c;設計模式是解決常見問題的經過驗證的方案。其中&#xff0c;工廠方法模式是一種創建型設計模式&#xff0c;廣泛應用于需要動態創建對象的場景。本文將詳細介紹工廠方法模式的核心概念、應用場景&#xff0c;并通過C代碼示例展示其具體實現。 核心…

我的世界進階模組開發教程——傷害(2)

上一篇文章簡要的講述了傷害,這一篇文章就來講一下機械動力的傷害 機械動力源碼 DamageTypeBuilder 類定義與成員變量 public class DamageTypeBuilder {protected final ResourceKey<DamageType> key; // 傷害類型的唯一資源標識符

web前端第一次作業

一、用戶注冊界面作業要求: 1.用戶名為文本框&#xff0c;名稱為 UserName&#xff0c;長度為 15&#xff0c;最大字符數為 20 2.密碼為密碼框&#xff0c;名稱為 UserPass&#xff0c;長度為 15&#xff0c;最大字符數為 20 3.性別為兩個單選按鈕&#xff0c;名稱為 sex&#…

Jenkins 節點連接故障定位及解決方案總結 - PKIX path validation failed

一、故障現象 Jenkins 節點通過 Java Web 方式連接時&#xff0c;報錯&#xff1a; java.io.IOException: Failed to connect to https://xxxx.zte.com.cn/yyyy/tcpSlaveAgentListener/: PKIX path validation failed: java.security.cert.CertPathValidatorException: validit…

c++ --- priority_queue的使用以及簡單實現

C --- priority_queue前言一、priority_queue的使用二、priority_queue的簡單實現1.整體結構2.主要方法pushpoptopemptysize三、構造迭代器區間構造默認構造四、仿函數前言 priority_queue是C容器之一&#xff0c;意為優先級隊列&#xff0c;雖說叫做隊列&#xff0c;但是其底…

MySQL梳理三:查詢與優化

MySQL查詢優化完整指南&#xff1a;從理論到實踐 本文從MySQL查詢的基礎機制出發&#xff0c;深入探討單表查詢訪問方法、聯表查詢策略、成本計算原理、基于規則的優化技術&#xff0c;最后通過實際案例展示慢SQL的診斷和優化過程。 目錄 一、單表查詢的訪問方法二、聯表查詢機…

從零開始的python學習(九)P129+P130+P131+P132+P133

本文章記錄觀看B站python教程學習筆記和實踐感悟&#xff0c;視頻鏈接&#xff1a;【花了2萬多買的Python教程全套&#xff0c;現在分享給大家&#xff0c;入門到精通(Python全棧開發教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…

LCL濾波器及其電容電流前饋有源阻尼設計軟件【LCLAD_designer】

本文主要介紹針對阮新波著《LCL型并網逆變器的控制技術》書籍 第二章&#xff08;LCL濾波器設計&#xff09;及第五章&#xff08;LCL型并網逆變器的電容電流反饋有源阻尼設計&#xff09;開發的一款交互式軟件【LCL&AD_designer】&#xff0c;開發平臺MATLAB_R2022b/app d…

【Conda】配置Conda鏡像源

Conda 鏡像源配置指南 適用系統&#xff1a;Windows 10&#xff08;含 Miniconda / Anaconda&#xff09; & Linux&#xff08;Ubuntu / CentOS / Debian 等&#xff09;1. 為什么要設置鏡像源 在中國大陸直接訪問 repo.anaconda.com 經常遇到速度慢、連接超時、SSL 錯誤等…

八股取士--docker

基礎概念類 1. 什么是Docker&#xff1f;它解決了什么問題&#xff1f; 解析&#xff1a; Docker是一個開源的容器化平臺&#xff0c;用于開發、交付和運行應用程序。 主要解決的問題&#xff1a; 環境一致性&#xff1a;解決"在我機器上能跑"的問題資源利用率&#…

C++:STL中的棧和隊列的適配器deque

學習完string類、容器vector和容器list&#xff0c;再去學習其他容器的學習成本就非常低&#xff0c;容器的使用方法都大差不差&#xff0c;而棧和隊列的底層使用了適配器&#xff0c;去模擬實現就沒有那么麻煩&#xff0c;適配器也是一種容器&#xff0c;但是這種容器兼備棧和…

9類主流數據庫 - 幫你更好地進行數據庫選型!

作者&#xff1a;唐叔在學習 專欄&#xff1a;數據庫學習 標簽&#xff1a;數據庫選型、MySQL、Redis、MongoDB、大數據存儲、NoSQL、數據庫優化、數據架構、AI數據庫 大家好&#xff0c;我是你們的老朋友唐叔&#xff01;今天咱們來聊聊程序員吃飯的家伙之一 —— 數據庫。在這…

推送本地項目到Gitee遠程倉庫

文章目錄前言前面已加學習了下載gitee軟件&#xff0c;網址在上一篇文章。在gitee創建賬號與倉庫。現在來學習如何講本地項目推送到Gitee遠程倉庫一、流程總結前言 前面已加學習了下載gitee軟件&#xff0c;網址在上一篇文章。在gitee創建賬號與倉庫。現在來學習如何講本地項目…