Docker 學習筆記(六):多容器管理與集群部署實踐

Docker

Docker-compose

單個 Dockerfile 可定義單容器應用,但日常工作中,Web 項目等常需 Web 服務、數據庫、負載均衡等多容器配合,手動按序啟停容器會導致維護量大、效率低。

Docker Compose 是高效的多容器管理工具,通過單個 docker-compose.yml(YAML 格式)文件定義關聯資源集,輕松管理容器。

其有兩個核心概念:

  • 服務(Service):一個應用的容器,可包含多個運行相同鏡像的容器實例。
  • 項目(Project):由一組關聯服務容器組成的完整業務單元,定義于 docker-compose.yml 中。

Compose 默認管理對象為項目,通過子命令對項目內容器進行生命周期管理。它最初由 Python 編寫,后用 Go 重寫,調用 Docker API 管理容器,支持所有兼容 Docker API 的平臺。

命令說明

[root@docker ~]# docker compose -h
Flag shorthand -h has been deprecated, please use --helpUsage:  docker compose [OPTIONS] COMMANDDefine and run multi-container applications with DockerOptions:--all-resources              Include all resources, even those not used by services--ansi string                Control when to print ANSI control characters("never"|"always"|"auto") (default "auto")--compatibility              Run compose in backward compatibility mode--dry-run                    Execute command in dry run mode--env-file stringArray       Specify an alternate environment file-f, --file stringArray           Compose configuration files--parallel int               Control max parallelism, -1 for unlimited (default -1)--profile stringArray        Specify a profile to enable--progress string            Set type of progress output (auto, tty, plain,quiet) (default "auto")--project-directory string   Specify an alternate working directory(default: the path of the, first specified, Composefile)-p, --project-name string        Project nameCommands:attach      Attach local standard input, output, and error streams to a service's running containerbuild       Build or rebuild servicesconfig      Parse, resolve and render compose file in canonical formatcp          Copy files/folders between a service container and the local filesystemcreate      Creates containers for a servicedown        Stop and remove containers, networksevents      Receive real time events from containersexec        Execute a command in a running containerimages      List images used by the created containerskill        Force stop service containerslogs        View output from containersls          List running compose projectspause       Pause servicesport        Print the public port for a port bindingps          List containerspull        Pull service imagespush        Push service imagesrestart     Restart service containersrm          Removes stopped service containersrun         Run a one-off command on a servicescale       Scale servicesstart       Start servicesstats       Display a live stream of container(s) resource usage statisticsstop        Stop servicestop         Display the running processesunpause     Unpause servicesup          Create and start containersversion     Show the Docker Compose version informationwait        Block until the first service container stopswatch       Watch build context for service and rebuild/refresh containers when files are updatedRun 'docker compose COMMAND --help' for more information on a command.
[root@docker ~]# docker compose version
Docker Compose version v2.27.0

Compose 模板

模板文件是使用 Compose 的核心,涉及到的指令關鍵字也比較多。但大家不用擔心,這里面大部分指令 跟 docker run 相關參數的含義都是類似的。

默認的模板文件名稱為 docker-compose.yml ,格式為 YAML 格式。

模板文件結構

  • version:用來定義模板文件的版本,不同版本的模板,格式也不一樣。
  • 資源列表:用來定義資源清單,包括service、secret、network、volume等。
  • 注釋行: # 開頭的注釋行。

示例:使用版本3模板,定義一個使用httpd鏡像的services。

version: "3"
services:webapp:image: httpd

實戰-Wordpress

方法一:

用docker run

[root@docker ~]# docker pull mysql[root@docker ~]# docker pull wordpress[root@docker ~]# docker run -tid --name db --restart always -v /db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -e MYSQL_DATABASE=wordpress mysql
8da76295432326d26a11844fef60042756234194b562d10a9edc5346d78e9da2
[root@docker ~]# docker run -tid --name blog -v /web:/var/www/html -p 80:80 --link db -e WORDPRESS_DB_HOST=db -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123 -e WORDPRESS_DB_NAME=wordpress wordpress
fcaa6809d5c6d860db16c2fe845bf1b27979e003ce652b27d9f637a67dadf79e[root@docker ~]# docker ps

在這里插入圖片描述

測試

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

方法二:

用docker compose

# 先刪除之前的環境
[root@docker ~]# docker rm -f $(docker ps -aq)
fcaa6809d5c6
8da762954323# 通過docker compose實現多個容器一起啟動
[root@docker wordpress]# vim docker-compose.yml
[root@docker wordpress]# cat docker-compose.yml
services:blog:				#服務名字,相當于docker run的時候指定的一個名稱image: wordpress:latest		#必選,鏡像的名字restart: alwayslinks:- dbports:		#可選,等價于 docker container run 里的 -p 選項指定端口映射- "80:80"environment:	#可選,等價于 docker run 里的 --env 選項設置環境變量- WORDPRESS_DB_HOST=db- WORDPRESS_DB_USER=root- WORDPRESS_DB_PASSWORD=123- WORDPRESS_DB_NAME=wordpressdb:image: mysql:latestrestart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=123- MYSQL_DATABASE=wordpress# 寫完檢查下語法
[root@docker wordpress]# docker compose config -q# 后端運行
[root@docker wordpress]# docker compose up -d
[+] Running 3/3? Network wordpress_default   Created                                                                                                 0.3s? Container wordpress-db-1    Started                                                                                                 0.5s? Container wordpress-blog-1  Started                        
# 查看 
[root@docker wordpress]# docker ps

在這里插入圖片描述

測試

在這里插入圖片描述

docker圖形界面管理

DockerUI 容器管理器的安裝與使用

簡介:

DockerUI是一個易用且輕量化的 Docker 管理工具,通過 Web 界面的操作,更方便對于 Docker 指令不 熟悉的用戶更容易操作 Docker。

功能:
  • Docker主機管理:數據卷管理,鏡像管理,容器管理,構建管理,倉庫配置管理,網絡配置管理

  • Docker Swarm集群管理:集群概要信息,節點管理,Service管理,任務管理,密碼管理,配置管 理

鏡像:

使用的鏡像來自于@joinsunsoft ,他發布在Docker Hub的鏡像地址為:http s://hub.docker.com/r/joinsunsoft/docker.ui

安裝
[root@docker ~]# docker pull joinsunsoft/docker.ui# 啟動容器并映射8999端口:
[root@docker ~]# docker run -d --name docker.ui --restart always -v /var/run/docker.sock:/var/run/docker.sock -p 8999:8999 joinsunsoft/docker.ui
14357a64e8df7b96764e6aa23d4fd094056c9421eef8a642d5c322c9411a0177
測試

瀏覽器訪問192.168.108.30:8999

默認用戶名密碼:ginghan/123456

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

可以管理鏡像容器

在這里插入圖片描述

# 拉取httpd和busybox
[root@docker ~]# docker pull httpd[root@docker ~]# docker pull busybox# 回到ui界面

在這里插入圖片描述

在這里插入圖片描述

[root@docker ~]# docker run -itd busybox
81080c93ff6619e4c1c16d6c66b934b5a1dda2a1ff6ed3a1d85de62650de2e49

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

Docker 圖形化界面管理工具 Portainer

安裝
# 創建存儲卷
[root@docker ~]# docker volume create portainer_data
portainer_data
[root@docker ~]# docker volume ls
DRIVER    VOLUME NAME
local     12d86d6267f1848241d91473cbace4209d3fb5c7098a183114400b7c9924471f
local     558dac1cf2e863b38f0d6c81f1ef451eef72bfe615d5150b89601ab02f20509e
local     portainer_data# 通過docker安裝Portainer
[root@docker ~]# docker pull portainer/portainer-ce:latest[root@docker ~]# docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
f11d6bd62d48d632a9596f493911c7297b19663280fe1ac0c01747d326bc7d4c
訪問

瀏覽器 https://192.168.108.30:9443訪問 Portainer,首次訪問需要創建管理員賬號

在這里插入圖片描述

設置密碼

在這里插入圖片描述

訪問
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

使用

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

Docker swarm

概念

集群化:從 “單主機” 到 “整體資源池”

Docker Swarm 的核心是管理 Docker Host 集群,先理解 “集群化(Clustering)” 的價值:

  • 集群定義:由網絡互聯的多臺服務器組成,協同工作時像 “單個系統”,同時具備高可用、負載均衡、并行處理能力(這是與 “一堆獨立服務器” 的核心區別)。
  • 為什么需要集群:
    • 避免資源浪費:獨立服務器無法動態適配應用資源波動(如早高峰內存需求高、下午低),提前分配主機易導致利用率低;
    • 減少人工干預:獨立服務器宕機時,需手動遷移受影響應用;集群可自動處理故障,保障業務彈性;
    • 簡化管理思維:無需關注 “應用跑在某臺主機”,只需定義 “應用需多少 CPU / 內存”,集群管理工具(如 Swarm)會自動調度資源。
  • 集群擴容 / 縮容:通過添加 / 刪除主機節點實現,操作后集群仍保持 “整體” 屬性,不改變使用邏輯。

Docker Swarm Mode:內置的集群能力

  • 版本里程碑:Docker v1.12 后,Swarm 功能完全集成到 Docker Engine 中,無需額外安裝軟件(如之前依賴的 Consul/etcd/Zookeeper 等外部數據庫),啟動 “Swarm Mode” 即可使用集群能力。
  • 優勢:對比 Kubernetes,Swarm 集群創建更簡單(無額外配置),適合作為容器編排的入門學習工具。
  • 兼容性:同一 Docker 主機可同時運行 “Swarm 服務(service)” 和 “獨立容器”,不沖突。

Swarm 核心概念拆解

Swarm(集群實例)
  • 定義:由多個運行 Docker Engine 的主機組成的 “集群單元”,當某臺主機初始化 Swarm 或加入現有 Swarm 時,即啟動 “Swarm Mode”。
  • 能力邊界:未啟動 Swarm Mode 時,Docker 僅能執行單容器命令;啟動后,新增 “編排 service” 的能力(如管理多副本容器、故障自愈)。
Node(節點)
  • 定義:Swarm 中的每臺 Docker Engine 主機都是一個 Node,分兩種角色,且一臺主機僅占一種角色:

    角色核心職責關鍵特性
    Manager Node(管理節點)1. 接收部署命令,拆解任務并分配給 Worker; 2. 維護集群狀態(如 service 期望副本數); 3. 多管理節點時自動選舉 Leader(執行編排)- 生產環境需 3/5/7 個(奇數,防腦裂); - 默認同時是 Worker,可配置為 “僅管理節點”(專職集群管理)
    Worker Node(工作節點)1. 接收并執行 Manager 派發的任務; 2. 定期向 Manager 匯報自身資源(CPU / 內存)和任務狀態僅負責運行容器,不參與集群管理
Service(服務)
  • 定義:對 “應用部署需求” 的抽象描述(如 “用 httpd:latest 鏡像,啟動 3 個副本,提供 HTTP 服務”),是 Swarm 編排的最小單元。
  • 核心邏輯:Manager 確保 Service 始終處于 “期望狀態”,舉例:
    1. 部署 httpd 服務(3 副本),Manager 分析節點資源后,分配 2 個副本到 Worker1、1 個到 Worker2;
    2. 若 Worker2 宕機,Manager 監控到故障,立即在 Worker3 上新建 1 個 httpd 副本,維持 “3 副本” 的期望狀態(故障自愈)。

部署swarm集群

創建三節點集群

swarm-manager 是 manager node,swarm-worker1 和 swarm-worker2 是 worker node。

在這里插入圖片描述

# 在 swarm-manager 上執行如下命令創建 swarm
[root@swarm-manager ~]# docker swarm init --advertise-addr 192.168.108.30
Swarm initialized: current node (t2wuubtvlwx0qngw3qi6kp6zc) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-24dky4f5899mt9hvc4i2h27xqf1ep0sd88b3i1gv7v9izx7xrb-cd03s0sgd0i1l7y3sav2k79da 192.168.108.30:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instruct                          ions.# 執行 docker node ls 查看當前 swarm 的 node,目前只有一個 manager。
[root@swarm-manager ~]# docker node ls
ID                            HOSTNAME        STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
t2wuubtvlwx0qngw3qi6kp6zc *   swarm-manager   Ready     Active         Leader           26.1.3

防火墻設置,三個節點都要執行

[root@swarm-manager ~]# firewall-cmd --set-default-zone=trusted
success
[root@swarm-worker1 ~]# firewall-cmd --set-default-zone=trusted
success
[root@swarm-worker2 ~]# firewall-cmd --set-default-zone=trusted
success

復制前面的 docker swarm join 命令,在 swarm-worker1 和 swarm-worker2 上執行,將它們添 加到 swarm 中。

[root@swarm-worker1 ~]# docker swarm join --token SWMTKN-1-24dky4f5899mt9hvc4i2h27xqf1ep0sd88b3i1gv7v9izx7xrb-cd03s0sgd0i1l7y3sav2k79da 192.168.108.30:2377
This node joined a swarm as a worker.[root@swarm-worker2 ~]# docker swarm join --token SWMTKN-1-24dky4f5899mt9hvc4i2h27xqf1ep0sd88b3i1gv7v9izx7xrb-cd03s0sgd0i1l7y3sav2k79da 192.168.108.30:2377
This node joined a swarm as a worker.# 兩個 worker node 已經添加進來了
[root@swarm-manager ~]# docker node ls
ID                            HOSTNAME        STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
t2wuubtvlwx0qngw3qi6kp6zc *   swarm-manager   Ready     Active         Leader           26.1.3
m8w1ijonr4jrp006rg5o7fgft     swarm-worker1   Ready     Active                          26.1.3
qiw3ydp7o20a65rlfare0g0a8     swarm-worker2   Ready     Active                          26.1.3

可以通過 docker swarm join-token worker 再次查看docker swarm init 提示的添加 worker 的完整命令。

[root@swarm-manager ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-24dky4f5899mt9hvc4i2h27xqf1ep0sd88b3i1gv7v9izx7xrb-cd03s0sgd0i1l7y3sav2k79da 192.168.108.30:2377

運行第一個 Service

部署一個運行 httpd 鏡像的 service

[root@swarm-manager ~]# docker service create --name web_server httpdxzlkc6a9md74ca23xg4khsh85
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service xzlkc6a9md74ca23xg4khsh85 converged# --name : service 命名
# httpd :鏡像的名字# 查看當前 swarm 中的 service
[root@swarm-manager ~]# docker service ls
ID             NAME         MODE         REPLICAS   IMAGE          PORTS
xzlkc6a9md74   web_server   replicated   1/1        httpd:latest# 查看service 每個副本的狀態
[root@swarm-manager ~]# docker service ps web_server
# 下圖可以看到容器web_server在swarm-worker2上運行# 驗證httpd 容器已經運行
# 去swarm-worker2上驗證
[root@swarm-worker2 ~]# docker ps

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

如何實現 Service 伸縮

增加 service 的副本數就可以

[root@swarm-manager ~]# docker service scale web_server=5
web_server scaled to 5
overall progress: 5 out of 5 tasks
1/5: running
2/5: running
3/5: running
4/5: running
5/5: running
verify: Service web_server converged

副本數增加到 5,通過 docker service ls 和 docker service ps 查看副本的詳細信息。

[root@swarm-manager ~]# docker service ls
ID             NAME         MODE         REPLICAS   IMAGE          PORTS
xzlkc6a9md74   web_server   replicated   5/5        httpd:latest
[root@swarm-manager ~]# docker service ps web_server

在這里插入圖片描述

5 個副本已經分布在 swarm 的所有三個節點上。

數增加到 5,通過 docker service ls 和 docker service ps 查看副本的詳細信息。

[root@swarm-manager ~]# docker service ls
ID             NAME         MODE         REPLICAS   IMAGE          PORTS
xzlkc6a9md74   web_server   replicated   5/5        httpd:latest
[root@swarm-manager ~]# docker service ps web_server

[外鏈圖片轉存中…(img-XERJfLCW-1757517387121)]

5 個副本已經分布在 swarm 的所有三個節點上。

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

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

相關文章

C++類和對象初識

面向過程 1.1 面向過程特點 1.2 通俗解釋:煮方便面 1.3 面向過程實現代碼 1.4 特點總結面向對象 2.1 面向對象特點 2.2 通俗解釋:對象協作思維 2.3 面向對象實現代碼 2.4 特點總結面向對象和面向過程總結C 面向對象介紹 4.1 面向對象三大基本特征封裝&am…

C++ Int128 —— 128位有符號整數類實現剖析

🧠 C Int128 —— 128位有符號整數類實現剖析 引用:openppp2/ppp/Int128.h 🏗? 1. 存儲結構設計 #mermaid-svg-2JDFsdz6MTbX253D {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-sv…

【C 語言生成指定范圍隨機數(整數 + 小數):原理、實現與避坑指南】

概述 在 C 語言開發中,生成指定范圍的隨機數是高頻需求(如游戲隨機道具、數據模擬、測試用例生成等)。但很多新手會卡在 “范圍控制”“隨機數重復”“小數生成” 等問題上。本文結合實戰場景,從原理到代碼詳細講解如何生成 1100、…

一個簡單的langgraph agent系統

本文基于langgraph的預制件 Agent Chat UI和《搭建一個本地langgraph服務》中的本地服務構建一個簡單的agent系統。 說明:Agent Chat UI需要nodejs版本18及以上,而nodejs18需要的glibc版本為2.28,本人使用操作系統為ubuntu18.04,g…

通過SSH來推送本地文件夾到Github

配置SSH git使用SSH配置, 初始需要以下三個步驟 使用秘鑰生成工具生成rsa秘鑰和公鑰 將rsa公鑰添加到代碼托管平臺 將rsa秘鑰添加到ssh-agent中,為ssh client指定使用的秘鑰文件 具體操作如下: 第一步:檢查本地主機是否已經存在…

視頻轉webp批量處理工具哪個好?這里有答案

你是不是也遇到過這樣的困擾:手機里存滿了精彩的短視頻,想做成動圖分享到社交媒體,卻發現轉換后的GIF文件巨大無比,畫質還慘不忍睹?要怎么把手機視頻轉webp,才能既保持高清畫質,又能大幅減小文件…

【Fastjson】Fastjson2 在不同 Modules 模塊包下,@JSONField name映射無法反序列化的 BUG 及解決

問題:在使用 alibaba fastjson2 做 JSONField 字段名映射時,在同模塊包下 Flink Jar 任務正常映射,本地測試正常映射,但是將兩個模塊包上傳至 Flink Cluster 之后,出現反序列化異常,子模塊無法反序列化父模…

Go語言基礎---數據類型間的故事

Go語言基礎—數據類型間的故事 目錄 前言基本數據類型 整形字節特殊整形unsafe.Sizeof數字字面量語法浮點型布爾值字符串byte和rune類型 運算符 算術運算符關系運算符邏輯運算符位運算符賦值運算符 前言 Go語言是Google開發的一種靜態強類型、編譯型語言。Go語言語法與C相近…

dedecms軟件等級★號改成圖片圖標顯示的辦法

我們在用到dedecms織夢的軟件模型&#xff0c;在調用軟件星級的時候&#xff0c;要把默認的星號改為圖片&#xff0c;這個要怎么操作呢&#xff1f;1、軟件模型管理里面-字段管理-字段配置softrankislink一行改為&#xff1a;<field:softrank itemname軟件等級 typeint isnu…

windows下安裝claude code+國產大模型glm4.5接入(無需科學上網)

下載安裝node.js https://nodejs.org/en/download 安裝版.msi 直接下載安裝即可 免安裝版.zip 1.解壓下載的壓縮包 2.創建數據緩存存儲目錄cache和全局安裝工具目錄global 3.配置環境變量 【我的電腦】右鍵選中【屬性】-> 找到【高級系統設置】-> 右下角【環境變量…

嵌入式 - ARM4

裸機實現LED閃爍一、啟動代碼1. 異常向量表配置1. .global匯編器指令&#xff0c;全局定義標簽_start&#xff0c;作為匯編程序的默認起點2. 配置標簽配置標簽時可以前置加_ &#xff0c;以便和普通標簽或系統標簽做區分3. 異常向量表ARM架構規定異常向量表位置固定&#xff0c…

《C++ 108好庫》之2 多線程庫thread,mutex,condition_variable,this_thread

《C 108好庫》之之2 多線程庫thread&#xff0c;mutex&#xff0c;condition_variable&#xff0c;this_thread《C 108好庫》之2 多線程庫thread&#xff0c;mutex&#xff0c;condition_variable&#xff0c;this_threadstd::thread類??互斥量&#xff08;Mutex&#xff09;…

Android系統框架知識系列(二十):專題延伸:JVM vs ART/Dalvik - Android運行時演進深度解析

?關鍵詞?&#xff1a;運行時優化、AOT編譯、JIT編譯、內存管理、電池效率、性能分析一、Android運行時演進背景1. 移動環境的特殊挑戰Android運行時環境的演進源于移動設備的獨特限制&#xff1a;?移動設備約束條件?&#xff1a;?有限的內存資源?&#xff1a;早期設備僅1…

ubuntu 22 安裝輕量級桌面Xfce并使用xrdp遠程桌面連接

1.安裝Xfce:sudo apt install xubuntu-desktop -y2.安裝xrdp:sudo apt install xrdp -y3.配置xrdp&#xff0c;nano /etc/xrdp/xrdp.ini:[Globals] ... port3389 ; 遠程連接端口&#xff0c;默認是3389&#xff0c;可以改成自己喜歡的端口... ; ; Session types ;; Some sess…

【Flask】測試平臺開發,數據看板開發-第二十一篇

概述&#xff1a;在前面我們已經實現了我們的產品創建管理&#xff0c;應用管理管理&#xff0c;需求提測管理但是每周提測了多少需求&#xff0c;創建了哪些產品&#xff0c;我們是不是看著不是很直觀&#xff0c;接下來我們就需要開發一個數據看板功能&#xff0c;實現能夠看…

我是程序員,不是程序猿:請別把我當猴耍——拒絕被低估,用專業贏得尊重

摘要 本文旨在深度剖析“程序員”與“程序猿”一字之差背后所反映的職業尊嚴與身份認同問題。我們生活在一個技術驅動的時代&#xff0c;但對技術創造者的認知卻常常被“程序猿”、“碼農”等標簽簡單化、甚至矮化。本文將從正名開始&#xff0c;辨析“程序員”的專業內涵&…

C++中vector刪除操作的安全隱患與最佳實踐

std::vector 是C標準模板庫&#xff08;STL&#xff09;中最常用的動態數組容器&#xff0c;提供了高效的隨機訪問和動態擴容能力。然而&#xff0c;其刪除操作如果使用不當&#xff0c;會引入嚴重的安全隱患&#xff0c;包括未定義行為、內存泄漏和數據競爭等問題。本文將深入…

Unix/Linux 系統中的 `writev` 系統調用

<摘要> 本文對 Unix/Linux 系統中的 writev 系統調用進行了全面深入的解析。內容涵蓋了其產生的背景&#xff08;從傳統 write 的局限性到分散/聚集 I/O 概念的引入&#xff09;、核心概念&#xff08;如 struct iovec、系統調用流程&#xff09;。重點剖析了其設計意圖&…

深入理解 Android targetSdkVersion:從 Google Play 政策到依賴沖突

深入理解 Android targetSdkVersion&#xff1a;從 Google Play 政策到依賴沖突 作為 Android 開發者&#xff0c;你很可能在 Android Studio 中見過這條提示&#xff1a;Google Play requires that apps target API level 33 or higher。它像一個盡職的提醒者&#xff0c;時常…

灰匣(GrayBox)1.0.0 發布【提升系統權限APP】

灰匣是一個提升系統權限的工具&#xff0c;可以配合Root、三方軟件&#xff08;Shizuku&#xff09;以及【設備管理員】&#xff08;設備所有者&#xff09;實現一些高級功能及底層接口&#xff0c;可以自動隔離&#xff08;凍結/禁用&#xff09;不必要的應用&#xff0c;如某…