day056-Dockerfile案例與Docker Compose

文章目錄

  • 0. 老男孩思想-老男孩名言警句
  • 1. Dockerfile指令:ENV與ARG的區別?
  • 2. 創建WordPress鏡像
    • 2.1 CA證書
      • 2.1.1 客戶端訪問HTTPS站點(阿里云鏡像源)過程
      • 2.1.2 查看Windows的CA證書
      • 2.1.3 ubuntu查看CA證書是否安裝
    • 2.2 準備apt下載源
    • 2.3 編寫Dockerfile文件
    • 2.4 nginx配置文件和容器啟動腳本
    • 2.5 構建鏡像和啟動容器
  • 3. 面試題:容器怎么暴露日志
  • 4. Dockerfile多階段構建
    • 4.1 未使用多階段構建的Dockerfile
    • 4.2 使用多階段構建的Dockerfile
  • 5. Docker Compose
    • 5.1 安裝docker compose
    • 5.2 編寫docker-compose測試文件
    • 5.3 執行docker-compose文件,啟動容器
    • 5.4 案例-小鳥飛飛
      • 5.4.1 編寫docker-compose文件
      • 5.4.2 運行docker-compose
  • 6. 踩坑記錄
    • 1. apt update時報錯

0. 老男孩思想-老男孩名言警句

  • 成功絕非偶然,而是正確選擇和持續努力后的必然
  • 成功最有效的途徑就是不斷的和有經驗的、成功的人學習
  • 學習成功人士的思維和習慣,是成功的捷徑
  • 要做別人不敢做、做不到的事,才能從競爭者勝出
  • 自己最不想改變的,往往是自己最需要改變的;要多接收、多學習他人的思維或習慣
  • 找一份能讓自己快速成長的企業,比多1-2千工資更重要

在這里插入圖片描述

1. Dockerfile指令:ENV與ARG的區別?

  • ENV:定義全局的環境變量,在腳本和容器中生效
  • ARG:定義局部環境變量,僅在docker build時生效;使用–build-arg指定變量值

2. 創建WordPress鏡像

  • 基礎鏡像:ubuntu,nginx+php+代碼

2.1 CA證書

CA(Certificate Authority,證書頒發機構)證書是數字證書體系的核心,用于驗證網站、服務器、軟件等的身份,并確保 HTTPS 加密通信的安全。

2.1.1 客戶端訪問HTTPS站點(阿里云鏡像源)過程

  1. 服務端發送證書:阿里云服務器將SSL證書(由CA機構簽發)發送給客戶端
  2. 客戶端那驗證證書有效性:客戶端使用本地預裝的CA證書包:
    1. 驗證簽名:確認服務端證書是由受信任的CA簽發
    2. 驗證有效性:檢查證書是否過期、域名是否匹配等
  3. 建立加密通道:驗證通過后才開始加密數據傳輸

2.1.2 查看Windows的CA證書

  • 管理員打開PowerShell:Get-ChildItem -Path Cert:\LocalMachine\Root | Format-List Subject, Thumbprint, NotAfter

在這里插入圖片描述

2.1.3 ubuntu查看CA證書是否安裝

  • dpkg -s ca-certificates |grep Status
  • 如果已安裝,會顯示:Status:install ok installed

2.2 準備apt下載源

  • ubuntu容器有可能是精簡版本,可能沒有安裝CA證書包;

    • 這時apt下載源需要使用http地址
[root@docker01 /server/dockerfile/04-wordpress]# cat sources.list 
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse# deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

2.3 編寫Dockerfile文件

[root@docker01 /server/dockerfile/04-wordpress]# cat Dockerfile 
FROM ubuntu:22.04
LABEL author=skx desc="WordPress鏡像:nginx+php" # 變量
# 時區
ENV TZ=Asia/Shanghai
# 站點目錄
ENV CODE=/app/code/blog# 發送apt源文件和代碼
ADD sources.list /etc/apt
# 指定時區;若不提前指定,則在安裝php時會有交互式選項   
# 安裝軟件
# 暴露日志
RUN apt update \&& DEBIAN_FRONTEND=noninteractive apt install -y tzdata \&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \&& echo $TZ > /etc/timezone \&& apt install -y nginx \&& apt install -y php8.1-common php8.1-bcmath php8.1-cli php8.1-curl php8.1-dev php8.1-fpm php8.1-gd php8.1-mysql php8.1-mbstring php8.1-redis \&& mkdir -p ${CODE} \&& ln -sf /var/log/nginx/access.log /dev/stdout \&& ln -sf /var/log/nginx/error.log /dev/stderr \&& sed -i 's#^listen =.*#listen = 127.0.0.1:9000#g' /etc/php/8.1/fpm/pool.d/www.conf # 上傳文件
ADD blog.oldboy.cn.conf /etc/nginx/conf.d
ADD entry.sh /
ADD wordpress.tar.gz ${CODE}# 修改權限
RUN chown -R www-data:www-data ${CODE} 
# 暴露端口
EXPOSE 80 443# 容器啟動命令
CMD ["/entry.sh"]

2.4 nginx配置文件和容器啟動腳本

[root@docker01 /server/dockerfile/04-wordpress]# cat blog.oldboy.cn.conf 
server {listen 80;server_name blog.oldboy.cn;root /app/code/blog/wordpress;location / {index index.php;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param HTTPS on;include fastcgi_params;}
}
#################################################################
[root@docker01 /server/dockerfile/04-wordpress]# cat entry.sh 
#!/bin/bash
##############################################################
# File Name:entry.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:
##############################################################
php-fpm8.1
nginx -g 'daemon off;'

在這里插入圖片描述

2.5 構建鏡像和啟動容器

docker build -t web:wp .
docker run -d --name wp -p 80:80 web:wp
  • 添加hosts解析

在這里插入圖片描述

  • 瀏覽器訪問

在這里插入圖片描述

3. 面試題:容器怎么暴露日志

  • 將容器中服務的日志文件軟鏈接到/dev/stdout,或/dev/stderr,就是輸出到標準輸出和標準錯誤輸出
  • docker就會收集到這些信息,并可以用docker logs查看
# 以nginx容器為例
ln -sf /var/log/nginx/access.log /dev/stdout 
ln -sf /var/log/nginx/error.log /dev/stderr
  • 或者,在Dockerfile中加上:tail -F logs/*;
    • 表示一直輸出日志到屏幕,也會被docker捕獲

4. Dockerfile多階段構建

Docker 多階段構建(Multi-Stage Builds)是一種優化 Docker 鏡像大小的技術,允許在單個 Dockerfile中使用多個 FROM指令,每個階段(Stage)可以獨立構建,并僅將必要的文件復制到最終鏡像中,丟棄中間階段的冗余內容。

在這里插入圖片描述

  • 以編譯tengine為例

4.1 未使用多階段構建的Dockerfile

[root@docker01 /server/dockerfile/05-tengine]# cat Dockerfile 
#正常的一個tengine的鏡像(編譯安裝) 未使用多階段提交
#######################
#1. pull ubuntu image##
#######################
FROM ubuntu:20.04 
LABEL maintainer="Tengine docker admin  <youjiu_linux@qq.com>"  author="oldboylidao996"
ENV  Web_User        "nginx"
ENV  Web_Server      "tengine"
ENV  Web_Version     "3.1.0"
ENV  Server_Dir      "/app/tools/tengine-3.1.0"
ENV  Server_Dir_Soft "/app/tools/tengine"
#######################
####ENV vars###########
#######################
#######################
#2. 編譯安裝     ######
#######################
#如果是阿里云服務器可以走內網  mirrors.cloud.aliyuncs.com
#sed命令修改為 sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.cloud.aliyuncs.com#g'   /etc/apt/sources.list
RUN    sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g'   /etc/apt/sources.list \&& apt-get update \&& apt-get install  -y wget  libssl-dev make gcc pcre2-utils   libpcre3-dev  zlib1g-dev RUN    wget -P /tmp/ http://tengine.taobao.org/download/${Web_Server}-${Web_Version}.tar.gz  \&& cd /tmp \&& tar xf ${Web_Server}-${Web_Version}.tar.gz \&& cd ${Web_Server}-${Web_Version} \&&  ./configure --prefix=${Server_Dir}  \--user=${Web_User} \--group=${Web_User} \--with-http_ssl_module \--with-http_v2_module   \--with-http_realip_module \--with-http_stub_status_module \--with-http_mp4_module \--with-stream  \--with-stream_ssl_module   \--with-stream_realip_module   \--add-module=modules/ngx_http_upstream_check_module/ \--add-module=modules/ngx_http_upstream_session_sticky_module 
#編譯
RUN     cd /tmp/ \&& cd ${Web_Server}-${Web_Version} \&&  make -j `nproc` \&&  make install 
#后續操作
RUN     groupadd  ${Web_User} \&&  useradd   -g ${Web_User}  ${Web_User} \&&  ln -s ${Server_Dir}   ${Server_Dir_Soft} \&&  ln -s ${Server_Dir_Soft}/sbin/nginx  /sbin/ \&&  rm -fr /var/cache/*  /var/lib/apt/* /tmp/* \&&  ln -sf /dev/stdout /app/tools/tengine/logs/access.log \&&  ln -sf /dev/stderr /app/tools/tengine/logs/error.logEXPOSE 80 443CMD  ["nginx","-g","daemon off;"]

4.2 使用多階段構建的Dockerfile

  • From 鏡像名稱 AS 別名
  • 復制中間鏡像內容只能使用COPY --from,指定鏡像別名
  • 環境變量不能跨鏡像使用
#######################
#1. pull ubuntu image##
#######################
FROM ubuntu:20.04 AS temp
LABEL maintainer="Tengine docker admin  <youjiu_linux@qq.com>"  author="oldboylidao996"
ENV  Web_User        "nginx"
ENV  Web_Server      "tengine"
ENV  Web_Version     "3.1.0"
ENV  Server_Dir      "/app/tools/tengine-3.1.0"
ENV  Server_Dir_Soft "/app/tools/tengine"#######################
####ENV vars###########
#######################
#######################
#2. 編譯安裝     ######
#######################
#如果是阿里云服務器可以走內網  mirrors.cloud.aliyuncs.com
#sed命令修改為 sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.cloud.aliyuncs.com#g'   /etc/apt/sources.list
RUN    sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g'   /etc/apt/sources.list \&& apt-get update \&& apt-get install  -y wget  libssl-dev make gcc pcre2-utils   libpcre3-dev  zlib1g-dev RUN    wget -P /tmp/ http://tengine.taobao.org/download/${Web_Server}-${Web_Version}.tar.gz  \&& cd /tmp \&& tar xf ${Web_Server}-${Web_Version}.tar.gz \&& cd ${Web_Server}-${Web_Version} \&&  ./configure --prefix=${Server_Dir}  \--user=${Web_User} \--group=${Web_User} \--with-http_ssl_module \--with-http_v2_module   \--with-http_realip_module \--with-http_stub_status_module \--with-http_mp4_module \--with-stream  \--with-stream_ssl_module   \--with-stream_realip_module   \--add-module=modules/ngx_http_upstream_check_module/ \--add-module=modules/ngx_http_upstream_session_sticky_module 
#編譯
RUN     cd /tmp/ \&& cd ${Web_Server}-${Web_Version} \&&  make -j `nproc` \&&  make install FROM ubuntu:20.04 
LABEL maintainer="Tengine docker admin  <youjiu_linux@qq.com>"  author="oldboylidao996"
ENV  Web_User        "nginx"
ENV  Web_Server      "tengine"
ENV  Web_Version     "3.1.0"
ENV  Server_Dir      "/app/tools/tengine-3.1.0"
ENV  Server_Dir_Soft "/app/tools/tengine"  #從中間鏡像復制內容到最終鏡像
COPY --from=temp /app/  /app/
#準備信息RUN sed -ri 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g'   /etc/apt/sources.list \&& apt-get update \&& apt install -y libssl-dev pcre2-utils   libpcre3-dev  zlib1g-dev \&&    groupadd  ${Web_User} \&&  useradd   -g ${Web_User}  ${Web_User} \&&  ln -s ${Server_Dir}   ${Server_Dir_Soft} \&&  ln -s ${Server_Dir_Soft}/sbin/nginx  /sbin/ \&&  rm -fr /var/cache/*  /var/lib/apt/* /tmp/* \&&  ln -sf /dev/stdout /app/tools/tengine/logs/access.log \&&  ln -sf /dev/stderr /app/tools/tengine/logs/error.logEXPOSE 80 443CMD  ["nginx","-g","daemon off;"]

5. Docker Compose

Docker Compose 是用于定義和運行多容器應用程序的工具。

在這里插入圖片描述

  • docker-compose相當于docker run命令,可以指定docker run的選項,如-p,-v,–restart等

5.1 安裝docker compose

  • docker compose軟件:docker-compose-linux-x86_64-2.30.3 鏈接: https://pan.baidu.com/s/1aWWsRTrBkpM9BjjFcj5FLw?pwd=f95j 提取碼: f95j
[root@docker01 ~]# chmod +x docker-compose-linux-x86_64-2.30.3 
[root@docker01 ~]# mv docker-compose-linux-x86_64-2.30.3 /bin/docker-compose
[root@docker01 ~]# docker-compose -v
Docker Compose version v2.30.3

5.2 編寫docker-compose測試文件

[root@docker01 ~]# mkdir -p /server/docker-compose/01-test
[root@docker01 /server/docker-compose/01-test]# cat docker-compose.yml 
#version: "3.3"
services:ngx:image: "nginx:1.24"container_name: ngx_testports:- 18888:80restart: alwaysvolumes:- "./index.html:/usr/share/nginx/html/index.html"
[root@docker01 /server/docker-compose/01-test]# echo 520SunKexu >index.html

5.3 執行docker-compose文件,啟動容器

[root@docker01 /server/docker-compose/01-test]# docker-compose up -d
[+] Running 2/2? Network 01-test_default  Created                                                            0.1s ? Container ngx_test       Started                                                            1.2s
[root@docker01 /server/docker-compose/01-test]# docker-compose ps
NAME       IMAGE        COMMAND                   SERVICE   CREATED         STATUS         PORTS
ngx_test   nginx:1.24   "/docker-entrypoint.…"   ngx       5 minutes ago   Up 4 minutes   0.0.0.0:18888->80/tcp, [::]:18888->80/tcp
  • 瀏覽器訪問:

在這里插入圖片描述

5.4 案例-小鳥飛飛

  • 基礎鏡像:nginx,代碼
  • 使用之前的Dockerfile文件,自定義構建鏡像

在這里插入圖片描述

5.4.1 編寫docker-compose文件

[root@docker01 /server/docker-compose/02-bird]# cat docker-compose.yaml
services:bird:image: "web:bird_v2" # 指定鏡像名字;本地沒有該鏡像,需要使用Dockerfile構建build: # 構建鏡像context: . # 指定Dockerfile文件位置;就在本地dockerfile: Dockerfile # Dockerfile文件名稱container_name: bird_v2ports:- 80:80restart: always 

5.4.2 運行docker-compose

# 先構建鏡像
[root@docker01 /server/docker-compose/02-bird]# docker-compose build
[+] Building 0.5s (10/10) FINISHED                                                   docker:default=> [bird internal] load build definition from Dockerfile                                      0.0s=> => transferring dockerfile: 489B                                                           0.0s=> [bird internal] load metadata for docker.io/library/nginx:alpine                           0.0s=> [bird internal] load .dockerignore                                                         0.0s=> => transferring context: 2B                                                                0.0s=> [bird 1/4] FROM docker.io/library/nginx:alpine                                             0.0s=> [bird internal] load build context                                                         0.0s=> => transferring context: 91.96kB                                                           0.0s=> [bird 2/4] RUN mkdir -p /app/code/bird                                                     0.2s=> [bird 3/4] ADD bird.tar.gz /app/code/bird                                                  0.1s=> [bird 4/4] ADD default.conf /etc/nginx/conf.d/                                             0.0s=> [bird] exporting to image                                                                  0.0s=> => exporting layers                                                                        0.0s=> => writing image sha256:02c222e4257e82e73d6c2126eff63f534083205079c39c51fda1572251642820   0.0s=> => naming to docker.io/library/web:bird_v2                                                 0.0s=> [bird] resolving provenance for metadata file                                              0.0s
# 再運行docker-compose
[root@docker01 /server/docker-compose/02-bird]# docker-compose up -d
[+] Running 2/2? Network 02-bird_default  Created                                                            0.1s ? Container bird_v2        Started                                                            0.3s
  • 瀏覽器訪問

在這里插入圖片描述

  • 刪除容器
    • 不刪除鏡像
[root@docker01 /server/docker-compose/02-bird]# docker-compose down
[+] Running 2/1? Container bird_v2        Removed                                                            0.2s ? Network 02-bird_default  Removed                                                            0.1s

6. 踩坑記錄

1. apt update時報錯

在這里插入圖片描述

  • 沒有CA證書
  • apt下載源需要使用http地址

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

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

相關文章

gcc 源碼分析:從IR-RTL 到匯編輸出

在完成了IR-RTL的優化與寄存器分配后就來到匯編代碼的輸出&#xff1a;實現如下&#xff1a;class pass_final : public rtl_opt_pass { public:pass_final (gcc::context *ctxt): rtl_opt_pass (pass_data_final, ctxt){}/* opt_pass methods: */unsigned int execute (functi…

STC89C52系列單片機內部結構詳解

STC89C52 是基于 MCS-51 內核的增強型單片機&#xff0c;其內部結構集成了多種功能模塊&#xff0c;具備強大的數據處理和控制能力&#xff0c;是嵌入式系統中常用的一種微控制器。本文將結合內部結構框圖&#xff0c;詳細介紹 STC89C52 的各個核心組成部分及其功能作用。一、中…

Linux防火墻管理和基礎服務(FTP/SFTP)

防火墻管理# 開放端口firewalld-cmd --add-port880/tcp --permanent# 移除端口或阻止端口firewalld-cmd --remove-port880/tcp --permanent# 重啟服務systemctl restart firewalld# 查看防火墻開放哪些端口&#xff08;查看當前區域的規則&#xff09;firewall-cmd --lis…

Selenium+Java 自動化測試入門到實踐:從環境搭建到元素操作

在自動化測試領域&#xff0c;Selenium 憑借其強大的跨瀏覽器兼容性和靈活的 API&#xff0c;成為 Web 應用測試的首選工具。而 Java 作為一門穩定且廣泛應用的編程語言&#xff0c;與 Selenium 結合能構建出高效、可維護的自動化測試框架。本文將從環境搭建開始&#xff0c;逐…

Hugging Face 模型的緩存和直接下載有什么區別?

Hugging Face 模型的緩存和直接下載&#xff08;下載到本地文件夾&#xff09;是兩種不同的模型管理方式&#xff0c;它們在使用場景、存儲結構和效率上各有優劣。 以下是它們之間的主要區別&#xff1a; Hugging Face 緩存 (Cache) 當您通過 transformers 庫中的 from_pretrai…

JavaScript AJAX 實現,演示如何將 Token 添加到 Authorization

以下是一個完整的原生 JavaScript AJAX 實現&#xff0c;演示如何將 Token 添加到 Authorization 頭部的示例&#xff1a;基礎實現html復制代碼<!DOCTYPE html> <html> <head><title>AJAX Token 示例</title><script>// 獲取當前用戶的 To…

開發語言的優劣勢對比及主要應用領域分析

開發語言是程序員用來編寫軟件指令的工具。每種語言都有自己的設計哲學、語法&#xff08;規則&#xff09;和應用場景&#xff0c;但沒有“放之四海而皆準”的最佳語言。以下是主流和重要開發語言的介紹&#xff0c;按主要應用領域分類&#xff1a; 一、全能型語言 (可在多個領…

Java學習-------事務失效

在 Java 開發中&#xff0c;事務是保證數據一致性和完整性的關鍵機制&#xff0c;尤其在涉及多步數據庫操作的業務場景中不可或缺。然而&#xff0c;在實際開發過程中&#xff0c;事務常常會出現 “失效” 的情況 —— 預期的回滾沒有發生&#xff0c;數據出現不一致。 Java 事…

JavaScript 01 JavaScript 是什么

1.1 JavaScript 是什么JavaScript 是一門世界上最流行的腳本語言&#xff08;基本所有平臺的所有軟件都會用到它&#xff09;。“1994年&#xff0c;網景公司(Netscape)發布了Navigator瀏覽器0.9版。這是歷史上第一個比較成熟的網絡瀏覽器&#xff0c;轟動一時。但是&#xff0…

Bun v1.2.19發布,node_modules隔離,sql比node快6倍

大家好,我是農村程序員,獨立開發者,行業觀察員,前端之虎陳隨易。我會在這里分享關于 獨立開發、編程技術、思考感悟 等內容,歡迎關注。 技術群與交朋友請在個人網站聯系我,網站 1??:https://chensuiyi.me,網站 2??:https://me.yicode.tech。 如果你覺得本文有用…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 主頁布局實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解主頁布局實現 視頻在線地址&#xff1a; …

# 微調需要準備哪些環境配置?

微調需要準備哪些環境配置&#xff1f; 如果沒有 GPU&#xff0c;即便是微調較小的大語言模型&#xff08;LLMs&#xff09;&#xff0c;過程也會比較慢。如果你已經有了現成的 GPU&#xff0c;那就可以直接開工了。不過&#xff0c;并不是所有人都能負擔得起 GPU—— 這種情況…

ClickHouse物化視圖避坑指南:原理、數據遷移與優化

摘要ClickHouse物化視圖通過預計算和自動更新機制&#xff0c;顯著提升大數據分析查詢性能&#xff0c;尤其適合高并發聚合場景。本文將深入解析其技術原理、生產實踐中的優化策略&#xff0c;以及數據遷移的實戰經驗。一、物化視圖核心概念ClickHouse的物化視圖(Materialized …

Springboot3整合Elasticsearch8(elasticsearch-java)

1、Elasticsearch的JAVA客戶端選擇 Elasticsearch官方支持的客戶端 客戶端名稱簡介使用建議Elasticsearch Java API Client&#xff08;新客戶端&#xff09;官方推薦的新客戶端&#xff0c;基于 JSON Mapping&#xff08;如 ElasticsearchClient 類&#xff09;&#xff0c;…

OpenCV 官翻8 - 其他算法

文章目錄高動態范圍成像引言曝光序列源代碼示例圖像說明結果色調映射圖像曝光融合附加資源高級圖像拼接 API&#xff08;Stitcher 類&#xff09;目標代碼說明相機模型試用指南圖像拼接詳解 (Python OpenCV >4.0.1)stitching_detailed如何使用背景減除方法目標代碼代碼解析結…

2025年一區SCI-回旋鏢氣動橢圓優化算法Boomerang Aerodynamic Ellipse-附Matlab免費代碼

引言 本期介紹一種新的元啟發式算法——回旋鏢氣動橢圓優化算法Boomerang Aerodynamic Ellipse Optimizer (BAEO)。該優化器的靈感來自于飛行中的回旋鏢的空氣動力學行為&#xff0c;明確地建模了釋放角和發射力如何塑造其軌跡。于2025年7月最新發表在JCR 1區&#xff0c;中科…

Custom SRP - Custom Render Pipeline

https://catlikecoding.com/unity/tutorials/custom-srp/custom-render-pipeline/ 1. 新建 Render Pipeline 任何內容的渲染&#xff0c;最終都是要由 unity 決定在哪里&#xff0c;什么時候&#xff0c;以哪些參數進行渲染。根據目標效果的復雜程度&#xff0c;決定渲染的過程…

C語言面向對象編程

1.內核通用鏈表一、什么是 list_head&#xff1f;list_head 是 Linux 內核中自己實現的一種 雙向循環鏈表 的結構&#xff0c;定義在 <linux/list.h> 中。它設計得非常輕巧、靈活&#xff0c;廣泛用于內核模塊、驅動、進程調度、網絡協議棧等。它的關鍵思想是&#xff1a…

Spring Boot+Redis Zset:三步構建高可靠延遲隊列系統

系統設計架構圖---------------- ----------------- ---------------- | | | | | | | 生產者 |------>| Redis ZSet |------>| 定時任務消費者 | | (添加延遲任務) | | (延…

MCP vs 傳統集成方案:REST API、GraphQL、gRPC的終極對比

MCP vs 傳統集成方案&#xff1a;REST API、GraphQL、gRPC的終極對比 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特…