Docker 使用下 (二)

Docker 使用下 (二)

文章目錄

  • Docker 使用下 (二)
    • 前言
    • 一、初識Docker
      • 1.1 、Docker概述
      • 1.2 、Docker的歷史
      • 1.3 、Docker解決了什么問題
      • 1.4 、Docker 的優點
      • 1.5 、Docker的架構圖
    • 二、鏡像
    • 三、容器
    • 四、數據卷
      • 4.1、數據卷的概念
      • 4.2 、數據卷的作用
      • 4.3 、配置容器數據卷
    • 五、搭建服務
      • 5.1、創建容器步驟
    • 六、DockerFile
      • 6.1 、Docker鏡像原理
      • 6.2 、Docker鏡像如何制作
        • 6.2.1、容器轉為鏡像
        • 6.2.2、壓縮文件轉變為鏡像
      • 6.3 Dockerfile概念
      • 6.4 制作dockerfile文件
        • 6.4.1 制作項目jar文件
        • 6.4.2 下載idk8鏡像
        • 6.4.3 創建dockerfile文件
        • 6.4.4 編寫dockerfile文件
        • 6.4.5 執行生成鏡像
        • 6.4.6 把鏡像生成為容器
        • 6.4.7 測試
    • 七、Docker服務編排
      • 7.1 服務編排概念
      • 7.2 Docker Compose 概述
      • 7.3 Docker Compose安裝和使用
      • 7.4 Docker compose卸載
      • 7.5 使用Docker compose編排項目
        • 7.5.1 創建文件夾
        • 7.5.2 創建docker-compose.yml
        • 7.5.3 編寫docker-compose.yml
        • 7.5.4 創建./nginx/conf.d日錄
        • 7.5.5 編寫nginx的配置文件
        • 7.5.6 使用docker-compose啟動容器
        • 7.5.7 測試訪問
    • 八、Docker容器虛擬化與傳統虛擬機的比較
      • 8.1 什么是虛擬機
      • 8.2 什么是Docker
      • 8.3 區別
      • 8.4 注意區別總結

前言

我們寫的代碼會接觸到好幾個環境:開發環境,測試環境以及生產環境,導致代碼"水土不服"的問題該怎么解決?開發人員可以把容器(代碼+環境)統一發給測試人員,測試人員測試通過后再把容器發給運維人員,從而解決了軟件跨環境遷移的所導致的水土不服的問題。

一、初識Docker

1.1 、Docker概述

? Docker是一個開源的應用容器引擎,基于 Go 語言并從 Apache2.0 協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中然后發布到任何流行的 Linux機器上,也可以實現虛擬化。容器是完全使用 沙箱 機制,相互之間不會有任何接口(類似 ipPhone 的 app),更重要的是容器性能開銷極低。

什么是沙箱?沙箱也叫網絡編程虛擬執行環境, 英文名sandbox(sandboxie),可以看做是一種容器,里面所做的一切都可以推倒重來。

? 原理引用官方網站的一段話:電腦就像一張紙,程序的運行與改動,就像將字寫在紙上,而Sandboxie就相當于在紙上放了塊玻璃,程序的運行與改動就像寫在了那塊玻璃上,除去玻璃,紙上還是一點改變都沒有的,它創造了一個類似沙盒的獨立作業環境,在其內部運行的程序并不能對硬盤產生永久性的影響。其為一個獨立的虛擬環境,可以用來測試不受信任的應用程序或上網行為。

Docker從17.3版本之后,分為CE版(社區版),和EE版(企業版)

1.2 、Docker的歷史

Docker 公司位于舊金山,由法裔美籍開發者和企業家 Solumon Hykes 創立,其標志如下圖所示。

在這里插入圖片描述

1.3 、Docker解決了什么問題

  • 解決了環境配置的難題。軟件開發最大的麻煩事之一,就是環境配置。用戶計算機的環境都不相同,你怎么知道自家的軟件,能在那些機器跑起來?
  • 用戶必須保證兩件事:操作系統的設置,各種庫和組件的安裝。只有它們都正確,軟件才能運行。舉例來說,安裝一個python 應用,計算機必須有 Python 引擎,還必須有各種依賴,可能還要配置環境變量。
  • 如果某些老舊的模塊與當前環境不兼容,那就麻煩了。開發者常常會說:“它在我的機器可以跑了”(It works on my machine),言下之意就是,其他機器很可能跑不了。
  • 環境配置如此麻煩,換一臺機器,就要重來一次,曠日楚時,很多人想到,能不能從根本上解決問題,軟件可以帶環境安裝?也就是說,安裝的時候,把原始環境-模一樣地復制過來。

1.4 、Docker 的優點

? Docker是一個用于開發,交付和運行應用程序的開放平臺。Docker 使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件,借助 Docker,您可以與管理應用程序相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。

1.5 、Docker的架構圖

在這里插入圖片描述

鏡像,容器和倉庫的關系?

  • 鏡像(lmage) :Docker鏡像,就相當于是一個root文件系統。鏡像相當于java中的一個類,是一個模板,一個鏡像可以生成多個容器實例。
  • 容器(Container): 鏡像和容器的關系就像是類與對象的關系一樣。鏡像是靜態的定義,容器是鏡像運行時的實體,容器可以被創建,啟動,停止,刪除,暫停等。
  • 倉庫(Repository):倉庫可以看做是一個代碼控制中心,或者Maven中央倉庫,用來保存鏡像。

二、鏡像

相當于還沒有安裝的app

在這里插入圖片描述

REPOSITORY: 表示鏡像的倉庫源

TAG: 鏡像的標簽

IMAGE ID: 鏡像的ID(唯一的主鍵)

CREATED: 鏡像的創建時間

SIZE: 鏡像的大小

docker images[參數]
-a#列出本地所有的鏡像,含中間映像層
-q #只返回鏡像Id
-qa #-a與 -q的組合參數
-digests #一些鏡像的摘要說明
--no-trunc #顯示完整的鏡像信息

三、容器

相當于已經安裝好的App

鏡像與容器,宿主機的關系:
docker的圖標就是一個鯨魚上面裝有很多集裝箱,鯨魚游在大海里,大海就是宿主機,鯨魚背上的集裝箱就是一個個的容器實例,這個容器實例就來源于鏡像生成的。
有鏡像才能創建容器,Docker利用容器獨立運行一個或一組應用。容器是用鏡像創建的運行實例。它可以被啟動,開始,停止,刪除,每個容器都是相互隔離的,保證平臺的安全。
可以把容器看做是一個簡易版的linux運行環境,包括運行在里面的應用程序。Docker啟動是秒級的,容器只保留了內核,把硬件,網絡,打印機不相關的統統去掉了,所以它運行就快。

四、數據卷

4.1、數據卷的概念

  • 問題1: docker容器刪除后,在容器中產生的數據還在嗎?
  • 問題2: docker容器和外部機器可以直接交換文件嗎?
  • 問題3: 容器之間想要進行數據交換該怎么解決?

數據卷是宿主機中的一個目錄或文件,當容器目錄和數據卷目錄綁定后,對方的修改會立即同步,一個數據卷可以被多個容器同時掛載,一個容器也可以掛載多個數據卷。

在這里插入圖片描述

4.2 、數據卷的作用

  • 容器數據持久化
  • 外部機器和容器間接通信
  • 容器之間數據交換

4.3 、配置容器數據卷

直接使用命令來掛載

需要先使用鏡像來啟動成為容器

docker run -it -v #主機目錄:容器目錄
#例如:
docker run -it -v /home/cesi:/home --name=centos0l centos /bin/bash

寫入文件

echo "abc">a.txt

查看是否掛載成功

docker inspect 容器ID

在這里插入圖片描述

雙向綁定,數據同步
我們以后修改只需要在本地修改即可,容器內會自動同步!

注意事項:

  • 目錄必須是絕對路徑
  • 如果目錄不存在,會自動創建

五、搭建服務

5.1、創建容器步驟

設置端口、運行容器做數據掛載、端口映射、目錄映射

  • 容器內的網絡服務和外部機不能直接通信
  • 外部機器和宿主機可以直接通信
  • 宿主機和容器可以直接通信
  • 當容器中的網絡服務需要被外部機器訪問時,可以將容器中提供服務的端口映射到宿主機的端口上,外部機器訪問宿主機的該端口,從而間接訪問容器的服這種操作叫做端口映射。

六、DockerFile

思考:

  • Docker鏡像本質是什么?
  • Docker中一個centos鏡像為什么只有200MB,而一個centos操作系統的iso文件要幾個G?
  • Docker中一個tomcat鏡像為什么有500MB,而一個 tomcat 安裝包只有70MB呢?

6.1 、Docker鏡像原理

操作系統組成部分:

  • 進程調度子系統
  • 進程通信子系統
  • 內存管理子系統
  • 設備管理子系統
  • 網絡通信子系統
  • 作業控制子系統
  • 文件管理子系統

Linux 的文件系統由 bootfsrootfs兩部分組成。fsfle system的簡寫,包含bootloader(引導加載程序)和kemel(內核)

roots是root文件系統,包含的就是典型Linux系統中的/dev,/proc,/bin,/etc等標準目錄與文件。不同的Linux發行版,boots基本一樣,而rootf不同,如ubuntu與centos等。
docker鏡像是由特殊的文件疊加而成,最底端是boots,并使用宿主機的boots,就是說我們啟動了一個 Linux 的操作系統,在上面安裝了一個docker,Linux 啟動的時候要把內核加載起來,而docker的鏡像啟動的時候,也需要加載內核,boots 但不需要再次加載了,使用宿主機的 bootfs,第二層是 root 文件系統 rootfs ,稱為 base image,然后再往上可以疊加其他的鏡像文件

在這里插入圖片描述


當你去下載 tomcat 的時候,它就去檢查看看有沒有idk,沒有就去下載 jdk,再往下看有沒有基礎鏡像,沒有則繼續下載,這三部分組合起來稱之為tomcat鏡像,對外暴露的tomcat,它是一個只讀鏡像,這就是我說的鏡像就是一個千層餅。下載好tomcat以后,我們再要去下載一個nginx,這時候 nginx 也需要基礎鏡像,它就不會再去下載了,而直接使用下載好的基礎鏡像,基礎的每一層鏡像都可以被別人復用。

一個鏡像可以放在另一個鏡像的上面,位于下面的鏡像稱為父鏡像,最底部的鏡像稱為基礎鏡像。這些只讀鏡像都不能改動,因為你改動了,別的鏡像就不可以進行復用了。當從一個鏡像啟動容器時,Docker會在最頂層加載一個讀寫文件系統作為容器。

在這里插入圖片描述


知道了docker的組成結構后,回答3個問題

  • Docker鏡像本質是什么?
:是一個分層文件系統
  • Docker中一個centos鏡像為什么只有200MB,而一個centos操作系統的iso文件要幾個GB?
:centos的iso鏡像文件包含bootfs和rootfs所以很大,而docker的centos鏡像復用操作系統的bootfs,只有rootfs和其他鏡像層,所以就小。
  • Docker中一個tomcat鏡像為什么有500MB,而一個tomcat安裝包只有70MB呢?
:由于docker中鏡像是分層的,tomcat雖然只有70MB,但它需要依賴父鏡像和基礎鏡像,所以整個對外暴.的tomcat鏡像就是500MBdocker inspect tomcat:latest #查看鏡像的詳細信息
docker inspect tomcat:latest #查看鏡像的詳細信息

6.2 、Docker鏡像如何制作

6.2.1、容器轉為鏡像
docker commit 容器id 鏡像名稱:版本號

查看鏡像

docker images

在這里插入圖片描述

把容器轉成鏡像后,再把鏡像轉成壓縮文件,這樣就可以直接把壓縮文件發給測試人員,測試人員把鏡像還原成容器,就可以直接測試了。

鏡像不可以直接傳輸只能轉變為壓縮文件才能傳輸。
鏡像轉變為壓縮文件:

docker save -o 壓縮文件名稱 鏡像名稱:版本號
6.2.2、壓縮文件轉變為鏡像
docker load -i 壓縮文件名稱 #i 就是input的意思

示例命令:

docker commit 04adada1e7f5 msi_tomcat:1.0 #把容器轉變為鏡像
docker save o msj_tomcat.tar msj_tomcat:1.0 #把鏡像做成壓縮文件
ll #查看生成的文件
#解壓測試
docker rmi bef5472c2c00 #刪除由容器轉換成的鏡像
docker oad i msj_tomcat.tar #解壓縮鏡像

總結:

1、由容器轉為鏡像
2、鏡像轉變為壓縮文件
3、下載壓縮文件,交由測試人員
4、測試人員拿到壓縮文件,上傳到宿主機
5、把壓縮文件轉化為鏡像
6、由鏡像再啟動為容器

注意:數據卷掛載的文件,不會連同一起打成壓縮文件。


6.3 Dockerfile概念

? dockerfle 本質上是一個文本文件,包含了一條條的指令,是用來制作鏡像的。每一條指令構建一層鏡像,基于基礎鏡像,最終構建出一個新的鏡像,對于開發人員,dockerfile可以為開發團隊提供一個完全一致的開發環境。對于運維人員,在部署時,可以實現應用的無縫移植。

去官網上查看其他 dockerfile
https://hub.docker.com
構建mysql的Dockerfile命令行:
https://github.com/CentOs/sig-cloud-instance-images/blob/b2d195220e1c5b181427c3172829c23ab9cd27eb/docker/Dockerfile

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /LABEL \org.label-schema.schema-version="1.0" \org.label-schema.name="CentOS Base Image" \org.label-schema.vendor="CentOS" \org.label-schema.license="GPLv2" \org.label-schema.build-date="20201113" \org.opencontainers.image.title="CentOS Base Image" \org.opencontainers.image.vendor="CentOS" \org.opencontainers.image.licenses="GPL-2.0-only" \org.opencontainers.image.created="2020-11-13 00:00:00+00:00"CMD ["/bin/bash"]

常用的 DockerFile 關鍵字列表

在這里插入圖片描述

6.4 制作dockerfile文件

dockerfile文件編寫命令行步驟

#1 定義父鏡像 FROM java:8
#2 定義作者信息 MAINTAINER jShuai  <3284484@qq.com>
#3 將jar包添加到容器 ADD docker-demo-01-0.0.1-SNAPSHOT.jar app.jar
#4 定義容器啟動執行的命令 CMD java -jar app.jar
#5 通過dockerfile構建鏡像 docker build -f dockerfile文件路徑 -t 鏡像名稱:版本

學習目的:制作dockerfile文件,發布并部署springboot項目

6.4.1 制作項目jar文件

制作springboot項目jar文件,上傳到根目錄的dockerfile文件夾下

6.4.2 下載idk8鏡像
docker pull java:8
6.4.3 創建dockerfile文件
vim springboot_dockerfile
6.4.4 編寫dockerfile文件
ROM java:8
MAINTAINER jShuai <3284484@qq.com>
ADD docker-demo-01-0.0.1-SNAPSHoT.jar app.jar
CMD java -jar app.jar
6.4.5 執行生成鏡像
docker build -f ./springboot_dockerfile -t app
6.4.6 把鏡像生成為容器
docker run -id -p 9000:8080 --name=app app
6.4.7 測試
http://192.168.0.101:9000/he71o

七、Docker服務編排

7.1 服務編排概念

? 微服務架構的應用系統中一般包含若干個微服務,每個微服務一般都會部署多個實例,如果每個微服務都要手動啟動和停止,維護的工作量會很大。雙11的時候,阿里的微服務達到上萬個。我們自己部署項目都會部署在docker之中,其中啟動的容器不僅僅有我們的項目,還有redis,mysql,nginx,還有tomcat等一些應用軟件。

服務編排就是按照一定的業務規則批量的管理容器

7.2 Docker Compose 概述

DockerCompose 是一個編排多容器分布式部署的工具,提供命令集管理容器化應用的完整開發周期,包括服務構建,啟動和停止,使用步驟:

  1. 利用 dockerfile 定義運行環境鏡像
  2. 利用 docker-compose.yml 定義組成應用的各服務
  3. 運行 docker-compose up 啟動應用

7.3 Docker Compose安裝和使用

我們可以從 Github 上下載它的二進制包來使用,最新發行的版本地址:
https://github.com/docker/compose/releases
運行以下命令以下載 Docker Compose 的當前穩定版本:

curl -L "https://github.com/docker /compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o
/usr/local/bin/docker-compose

要安裝其他版本的 Compose,請替換1.29.2。

網速較慢的話用

curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m`> /usr/local/bin/docker-compose

將可執行權限應用于二進制文件:

chmod +x/usr/local/bin/docker-compose

測試是否安裝成功:

docker-compose -v

7.4 Docker compose卸載

#二進制包方式安裝的,刪除二進制文件即可
rm /usr/local/bin/docker-compose

7.5 使用Docker compose編排項目

7.5.1 創建文件夾
mkdir ~/docker-compose
7.5.2 創建docker-compose.yml
cd ~/docker-compose
vim docker-compose.yml
7.5.3 編寫docker-compose.yml
version:'3'
services:nginx:image:nginxports:- 80:80links:- appvolumes :# 數據卷掛載- ./nginx/conf.d:/etc/nginx/conf.dapp:image: appexpose:-"8080"

說明:

Tinks: #當前的nginx可以訪問到app項目
volumes: #數據卷掛載
7.5.4 創建./nginx/conf.d日錄
mkoir -n./nginx/conf.d
cd ./nginx/cof.d
ll
vim nginx.conf
7.5.5 編寫nginx的配置文件
server{listen 80;access_log off;location /{proxy_pass http://app:8080;}
}
7.5.6 使用docker-compose啟動容器
cd ../../ #放到docker-compose目錄之下
docker-compose up
#或者后臺啟動
docker-compose up -d
7.5.7 測試訪問
http://192.168.0.101/hello

八、Docker容器虛擬化與傳統虛擬機的比較

8.1 什么是虛擬機

虛擬機在本質上就是在模擬一臺真實的計算機設備,同時遵循同樣的程序執行方式。虛擬機能夠利用"虛擬機管理程序"運行在物理設備之上。反過來,虛擬機管理
程序則可運行在主機設備或者“裸機”之上。傳統的虛擬機需要模擬整臺機器包括硬件,每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給他的資源將全部被占用。,每一個虛擬機包括應用,必要的二進制和庫,以及一個完整的用戶操作系統。

8.2 什么是Docker

Docker是一個集開發、打包、運行應用于一體的開放式平臺。Docker可以用來快速交付應用。使用Docker,你可以將應用程序從你的基礎設施中分離出來,并將基礎設施當做一個管理平臺。Docker可以加快打包時間,加快測試,加快發布,縮短開發及運行代碼之間的周期。Docker通過結合內核容器化特點和工作流,并使之工具化來實現這一切,幫助管理和發布你的應用。

8.3 區別

相同點:
容器與虛擬機具有相似的資源隔離和分配優勢
不同:
容器虛擬化的是操作系統,虛擬機虛擬化的是硬件
傳統虛擬機可以運行不同的操作系統,容器只能運行同一類型操作系統

在這里插入圖片描述

8.4 注意區別總結

Docker和虛擬機有各自擅長的領域,在軟件開發、測試場景和生產運維場景中各有優劣。
Docker啟動快速屬于秒級別。虛擬機通常需要幾分鐘去啟動。
Docker需要的資源更少,Docker在操作系統級別進行虛擬化,Docker容器和內核交互,幾平沒有性能損耗Docker更輕量,Docker的架構可以共用一個內核與共享應用程序庫,所占內存極小,同樣的硬件環境,DocKer運行的鏡像數遠多于慮擬機數量,對系統的利用率非常高。

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

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

相關文章

洛谷P12238 [藍橋杯 2023 國 Java A] 單詞分類

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] Copy from luogu. [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 既然都是字符串前綴的問題了&#xff0c;那當然首先就應該想到 Trie \text{Trie} Trie 樹。 我們可…

pta作業中有啟發性的程序題

1 【知識點】&#xff1a;多態 函數接口定義&#xff1a; 以Student為基類&#xff0c;構建GroupA, GroupB和GroupC三個類 裁判測試程序樣例&#xff1a; #include<iostream> #include <string> using namespace std;/* 請在這里填寫答案 */int main() {const …

Scrapy框架之CrawlSpider爬蟲 實戰 詳解

CrawlSpider 是 Scrapy 框架中一個非常實用的爬蟲基類&#xff0c;它繼承自 Spider 類&#xff0c;主要用于實現基于規則的網頁爬取。相較于普通的 Spider 類&#xff0c;CrawlSpider 可以根據預定義的規則自動跟進頁面中的鏈接&#xff0c;從而實現更高效、更靈活的爬取。 Scr…

Glide 如何加載遠程 Base64 圖片

最近有個需求&#xff0c;后端給出的圖片地址并不是正常的 URL&#xff0c;而且需要一個接口去請求&#xff0c;但是返回的是 base64 數據流。這里不關心為啥要這么多&#xff0c;原因有很多&#xff0c;可能是系統的問題&#xff0c;也可能是能力問題。當然作為我們 Android 程…

004-nlohmann/json 快速認識-C++開源庫108杰

了解 nlohmann/json 的特點&#xff1b;理解編程中 “數據戰場”劃分的概念&#xff1b;迅速上手多種方式構建一個JSON對象&#xff1b; 1 特點與安裝 nlohmann/json 是一個在 github 長期霸占 “JSON” 熱搜版第1的CJSON處理庫。它的最大優點是與 C 標準庫的容器數據&#xf…

#基礎Machine Learning 算法(上)

機器學習算法的分類 機器學習算法大致可以分為三類&#xff1a; 監督學習算法 (Supervised Algorithms&#xff09;:在監督學習訓練過程中&#xff0c;可以由訓練數據集學到或建立一個模式&#xff08;函數 / learning model&#xff09;&#xff0c;并依此模式推測新的實例。…

正弦波、方波、三角波和鋸齒波信號發生器——Multisim電路仿真

目錄 Multisim使用教程說明鏈接 一、正弦波信號發生電路 1.1正弦波發生電路 電路組成 工作原理 振蕩頻率 1.2 正弦波發生電路仿真分析 工程文件鏈接 二、方波信號發生電路 2.1 方波發生電路可調頻率 工作原理 詳細過程 2.2 方波發生電路可調頻率/可調占空比 調節占空比 方波產生…

【AND-OR-~OR鎖存器設計】2022-8-31

緣由鎖存器11111111111-硬件開發-CSDN問答 重置1&#xff0c;不論輸入什么&#xff0c;輸出都為0&#xff1b; 重置0&#xff0c;輸入1就鎖住1 此時輸入再次變為0&#xff0c;輸出不變&#xff0c;為鎖住。

力扣-字符串-468 檢查ip

思路 考察字符串的使用&#xff0c;還有對所有邊界條件的檢查 spilt&#xff08;“\.”&#xff09;&#xff0c;toCharArray&#xff0c;Integer.parseInt() 代碼 class Solution {boolean checkIpv4Segment(String str){if(str.length() 0 || str.length() > 4) retur…

BC8 十六進制轉十進制

題目&#xff1a;BC8 十六進制轉十進制 描述 BoBo寫了一個十六進制整數ABCDEF&#xff0c;他問KiKi對應的十進制整數是多少。 輸入描述&#xff1a; 無 輸出描述&#xff1a; 十六進制整數ABCDEF對應的十進制整數&#xff0c;所占域寬為15。 備注&#xff1a; printf可以使用…

ARM子程序和棧

微處理器中的棧由棧指針指向存儲器中的棧頂來實現&#xff0c;當數據項入棧時&#xff0c;棧 指針向上移動&#xff0c;當數據項出棧時&#xff0c;棧指針向下移動。 實現棧時需要做出兩個決定&#xff1a;一是當數據項進棧時是向低位地址方向向上生 長&#xff08;圖a和圖b&a…

jwt身份驗證和基本的利用方式

前言 &#xff1a; 什么是jwt&#xff08;json web token&#xff09;&#xff1f; 看看英文單詞的意思就是 json形式的token 他的基本的特征 &#xff1a; 類似于這樣的 他有2個點 分割 解碼的時候會有三個部分 頭部 payload 對稱密鑰 這個就是對稱加密 頭部&am…

n8n工作流自動化平臺的實操:利用本地嵌入模型,完成文件內容的向量化及入庫

1.成果展示 1.1n8n的工作流 牽涉節點&#xff1a;FTP、Code、Milvus Vector Store、Embeddings OpenAI、Default Data Loader、Recursive Character Text Splitter 12.向量庫的結果 2.實操過程 2.1發布本地嵌入模型服務 將bge-m3嵌入模型&#xff0c;發布成滿足open api接口…

MATLAB人工大猩猩部隊GTO優化CNN-LSTM多變量時間序列預測

本博客來源于CSDN機器魚&#xff0c;未同意任何人轉載。 更多內容&#xff0c;歡迎點擊本專欄目錄&#xff0c;查看更多內容。 目錄 0 引言 1 數據準備 2 CNN-LSTM模型搭建 3 GTO超參數優化 3.1 GTO函數極值尋優 3.2 GTO優化CNN-LSTM超參數 3.3 主程序 4 結語 0 引言…

git項目遷移,包括所有的提交記錄和分支 gitlab遷移到gitblit

之前git都是全新項目上傳&#xff0c;沒有遷移過&#xff0c;因為遷移的話要考慮已有項目上的分支都要遷移過去&#xff0c;提交記錄能遷移就好&#xff1b;分支如果按照全新項目上傳的方式需要新git手動創建好老git已有分支&#xff0c;在手動一個一個克隆老項目分支代碼依次提…

Photo-SLAM論文理解、環境搭建、代碼理解與實測效果

前言&#xff1a;第一個解耦式Photo-SLAM&#xff0c;亮點和效果。 參考&#xff1a;https://zhuanlan.zhihu.com/p/715311759 全網最細PhotoSLAM的conda環境配置教程&#xff0c;拒絕環境污染&#xff01;&#xff01;-CSDN博客 1. 環境搭建 硬件&#xff1a;RTX 4090D wi…

如何使用VSCode編寫C、C++和Python程序

一、首先準備好前期工作。如下載安裝Python、VSCode、一些插件等。寫代碼之前需要先創建文件夾和文件。 二、將不同語言寫的代碼放在不同的文件夾中&#xff0c;注意命名時不要使用中文。 三、打開VSCode&#xff0c;點擊“文件”->“打開文件夾”->“daimalainxi”->…

基于不確定性感知學習的單圖像自監督3D人體網格重建 (論文筆記與思考)

文章目錄 論文解決的問題提出的算法以及啟發點 論文解決的問題 首先這是 Self-Supervised 3D Human mesh recovery from a single image with uncertainty-aware learning &#xff08;AAAI 2024&#xff09;的論文筆記。該文中主要提出了一個自監督的framework用于人體的姿態…

Leetcode刷題記錄33——二叉樹的最小深度

題源&#xff1a;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 題目描述&#xff1a; 思路一&#xff1a; 使用 DFS 遞歸遍歷的解法&#xff0c;每當遍歷到一條樹枝的葉子節點&#xff0c;就會更新最小深度&#xff0c;當遍歷完整棵樹后&#x…

有效的括號(20)

20. 有效的括號 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:bool isValid(string s) {unordered_map<char, char> m {{), (}, {],[}, {}, {}};stack<char> stk;for (int i 0; i < s.size(); i) {if (s[i] ( || s[i…