Docker 從入門到精通(大全)

一、概述

1.1 基本概念

Docker 是一個開源的應用容器引擎,基于 Go 語言 ? 并遵從 Apache2.0 協議開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。

容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。

1.2 優勢

簡化程序:Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 ?Linux 機器上,便可以實現虛擬化。

Docker改變了虛擬化的方式,使開發者可以直接將自己的成果放入Docker中進行管理。方便快捷已經是 Docker的最大優勢,過去需要用數天乃至數周的 ? ?任務,在Docker容器的處理下,只需要數秒就能完成。

節省開支:一方面,云計算時代到來,使開發者不必為了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思維定勢。

Docker 與云的結合,讓云空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。

1.3 與傳統VM特性對比:

作為一種輕量級的虛擬化方式,Docker在運行應用上跟傳統的虛擬機方式相比具有顯著優勢:

  • Docker 容器很快,啟動和停止可以在秒級實現,這相比傳統的虛擬機方式要快得多。

  • Docker 容器對系統資源需求很少,一臺主機上可以同時運行數千個Docker容器。

  • Docker 通過類似Git的操作來方便用戶獲取、分發和更新應用鏡像,指令簡明,學習成本較低。

  • Docker 通過Dockerfile配置文件來支持靈活的自動化創建和部署機制,提高工作效率。

  • Docker 容器除了運行其中的應用之外,基本不消耗額外的系統資源,保證應用性能的同時,盡量減小系統開銷。

  • Docker 利用Linux系統上的多種防護機制實現了嚴格可靠的隔離。從1.3版本開始,Docker引入了安全選項和鏡像簽名機制,極大地提高了使用Docker的安全性。

特性容器虛擬機
啟動速度秒級分鐘級
硬盤使用一般為MB一般為GB
性能接近原生弱于原生
系統支持量單機支持上千個容器一般幾十個
1.4 基礎架構

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。

Docker 容器通過 Docker 鏡像來創建。

容器與鏡像的關系類似于面向對象編程中的對象與類。

容器對象
鏡像

1.5 Docker 技術的基礎:
  • namespace,容器隔離的基礎,保證A容器看不到B容器. 6個名空間:User,Mnt,Network,UTS,IPC,Pid

  • cgroups,容器資源統計和隔離。主要用到的cgroups子系統:cpu,blkio,device,freezer,memory

  • unionfs,典型:aufs/overlayfs,分層鏡像實現的基礎

1.6 Docker 組件
  • docker Client客戶端 -->向docker服務器進程發起請求,如:創建、停止、銷毀容器等操作

  • docker Server服務器進程 -->處理所有docker的請求,管理所有容器

  • docker Registry鏡像倉庫 -->鏡像存放的中央倉庫,可看作是存放二進制的scm

二、安裝部署【粉絲福利:文末免費分享自動化測試學習資源】

2.1 準備條件

目前,CentOS 僅發行版本中的內核支持 Docker。Docker 運行在 CentOS 7 上,要求系統為64位、系統內核版本為 3.10 以上。

Docker 運行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統為64位、系統內核版本2.6.32-431 或者更高版本。

2.2 安裝 Docker
yum install docker -y          #安裝systemctl start docker         #啟動systemctl enable docker        #設置開機自啟動
2.3 基本命令
docker search centos   #搜索鏡像

默認從國外拉去,速度很慢,可以使用daocloud配置加速

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://d6f11267.m.daocloud.io腳本是寫入echo "{\"registry-mirrors\": [\"http://d6f11267.m.daocloud.io\"]}"> /etc/docker/daemon.jsonsystemctl restart docker              #重啟失效

根據需求拉取鏡像:

docker pull docker.io/ansible/centos7-ansible

拉去search到的全部鏡像:

for i in `docker search centos|awk '!/NAME/{print $2}'`;do docker pull $i;done

查看本地鏡像:

docker images

2.4 命令整理

容器操作:

docker create # 創建一個容器但是不啟動它docker run # 創建并啟動一個容器docker stop # 停止容器運行,發送信號SIGTERMdocker start # 啟動一個停止狀態的容器docker restart # 重啟一個容器docker rm # 刪除一個容器docker kill # 發送信號給容器,默認SIGKILLdocker attach # 連接(進入)到一個正在運行的容器docker wait # 阻塞一個容器,直到容器停止運行

獲取容器信息:

docker ps # 顯示狀態為運行(Up)的容器docker ps -a # 顯示所有容器,包括運行中(Up)的和退出的(Exited)docker inspect # 深入容器內部獲取容器所有信息docker logs # 查看容器的日志(stdout/stderr)docker events # 得到docker服務器的實時的事件docker port # 顯示容器的端口映射docker top # 顯示容器的進程信息docker diff # 顯示容器文件系統的前后變化

導出容器:

docker exec # 在容器里執行一個命令,可以執行bash進入交互式

執行:

docker exec # 在容器里執行一個命令,可以執行bash進入交互式
2.5 簡單實踐操作

運行并進入容器操作:

docker run -i -t docker.io/1832990/centos6.5  /bin/bash
  • -t 表示在新容器內指定一個偽終端或終端;

  • -i 表示允許我們對容器內的 (STDIN) 進行交互;

  • -d 表示將容器在后臺運行;

  • /bin/bash 。這將在容器內啟動 bash shell;

所以當容器(container)啟動之后,我們會獲取到一個命令提示符:

在容器內我們安裝MySQL并設置開機自啟動,將修改后的鏡像提交:

docker ps -l 查詢容器IDdocker commit -m "功能" -a "用戶信息" ID tag 提交修改后的鏡像

docker inspect ID 查看詳細信息docker push ID 上傳docker鏡像
利用DockerFile創建鏡像

使用命令 docker build , 需要創建一個 Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構建鏡像。

mkdir DockerFilecd DockerFilecat > Dockerfile <<EOFFROM 603dd3515fccMAINTAINER Docker xuelRUN yum install mysql mysql-server -yRUN mddir /etc/sysconfig/networkRUN /etc/init.d/mysqld startEOF
docker build -t "centos6.8:mysqld" .
  • -t 制定repository 與tag

  • . 指定Dockerfile的路徑

注意一個鏡像不能超過 127 層
此外,還可以利用 ADD 命令復制本地文件到鏡像;
用 EXPOSE 命令來向外部開放端口;
用 CMD 命令來描述容器啟動后運行的程序等。
CMD [“/usr/sbin/apachectl”, “-D”, “FOREGROUND”]

2.6 Dockerfile 詳解

Dockerfile的指令是忽略大小寫的,建議使用大寫,使用 # 作為注釋,每一行只支持一條指令,每條指令可以攜帶多個參數。

Dockerfile的指令根據作用可以分為兩種,構建指令和設置指令。

構建指令:用于構建 image,其指定的操作不會在運行image的容器上執行;

設置指令:用于設置 image 的屬性,其指定的操作將在運行image的容器中執行。

  • FROM(指定基礎image)

構建指令,必須指定且需要在 Dockerfile 其他指令的前面。后續的指令都依賴于該指令指定的image。FROM 指令指定的基礎 image 可以是官方遠程倉庫中的,也可以位于本地倉庫。

該指令有兩種格式:

FROM <image>       #指定基礎image為該image的最后修改的版本FROM <image>:<tag> #指定基礎image為該image的一個tag版本。
  • MAINTAINER(用來指定鏡像創建者信息)

構建指令,用于將image的制作者相關的信息寫入到image中。當我們對該image執行docker inspect命令時,輸出中有相應的字段記錄該信息。

MAINTAINER <name>
  • RUN(安裝軟件用)

構建指令,RUN可以運行任何被基礎image支持的命令。如基礎image選擇了ubuntu,那么軟件管理部分只能使用ubuntu的命令。

RUN <command> (the command is run in a shell - `/bin/sh -c`)RUN ["executable", "param1", "param2" ... ]  (exec form)
  • CMD(設置container啟動時執行的操作)

設置指令,用于container啟動時指定的操作。該操作可以是執行自定義腳本,也可以是執行系統命令。該指令只能在文件中存在一次,如果有多個,則只執行最后一條。

CMD ["executable","param1","param2"] (like an exec, this is the preferred form)CMD command param1 param2 (as a shell)

ENTRYPOINT 指定的是一個可執行的腳本或者程序的路徑,該指定的腳本或者程序將會以 param1 和param2作為參數執行。

所以如果CMD指令使用上面的形式,那么Dockerfile中必須要有配套的ENTRYPOINT。當Dockerfile指定了ENTRYPOINT,那么使用下面的格式:

CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
  • ENTRYPOINT(設置container啟動時執行的操作)

設置指令,指定容器啟動時執行的命令,可以多次設置,但是只有最后一個有效。

ENTRYPOINT ["executable", "param1", "param2"] (like an exec, the preferred form)ENTRYPOINT command param1 param2 (as a shell)

該指令的使用分為兩種情況,一種是獨自使用,另一種和CMD指令配合使用。

當獨自使用時,如果你還使用了CMD命令且CMD是一個完整的可執行的命令,那么CMD指令和ENTRYPOINT會互相覆蓋只有最后一個CMD或者ENTRYPOINT有效。

# CMD指令將不會被執行,只有ENTRYPOINT指令被執行CMD echo “Hello, World!”ENTRYPOINT ls -l

另一種用法和CMD指令配合使用來指定ENTRYPOINT的默認參數,這時CMD指令不是一個完整的可執行命令,僅僅是參數部分;ENTRYPOINT指令只能使用JSON方式指定執行命令,而不能指定參數。

FROM ubuntuCMD ["-l"]ENTRYPOINT ["/usr/bin/ls"]
  • USER(設置container容器的用戶)

設置指令,設置啟動容器的用戶,默認是root用戶

# 指定memcached的運行用戶ENTRYPOINT ["memcached"]USER daemonENTRYPOINT ["memcached", "-u", "daemon"]
  • EXPOSE(指定容器需要映射到宿主機器的端口)

設置指令,該指令會將容器中的端口映射成宿主機器中的某個端口。當你需要訪問容器的時候,可以不是用容器的IP地址而是使用宿主機器的IP地址和映射后的端口。

要完成整個操作需要兩個步驟,首先在Dockerfile使用EXPOSE設置需要映射的容器端口,然后在運行容器的時候指定-p選項加上EXPOSE設置的端口,這樣EXPOSE設置的端口號會被隨機映射成宿主機器中的一個端口號。

也可以指定需要映射到宿主機器的那個端口,這時要確保宿主機器上的端口號沒有被使用。EXPOSE指令可以一次設置多個端口號,相應的運行容器的時候,可以配套的多次使用-p選項。

# 映射一個端口EXPOSE port1# 相應的運行容器使用的命令  (主機(宿主)端口:容器端口)docker run -p port1 image
# 映射多個端口EXPOSE port1 port2 port3# 相應的運行容器使用的命令docker run -p port1 -p port2 -p port3 image# 還可以指定需要映射到宿主機器上的某個端口號docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image

端口映射是 Docker 比較重要的一個功能,原因在于我們每次運行容器的時候容器的IP地址不能指定而是在橋接網卡的地址范圍內隨機生成的。

宿主機器的IP地址是固定的,我們可以將容器的端口的映射到宿主機器上的一個端口,免去每次訪問容器中的某個服務時都要查看容器的IP的地址。

對于一個運行的容器,可以使用docker port加上容器中需要映射的端口和容器的ID來查看該端口號在宿主機器上的映射端口。

  • ENV(用于設置環境變量)

構建指令,在image中設置一個環境變量。

ENV <key> <value>

設置了后,后續的RUN命令都可以使用,container啟動后,可以通過docker inspect查看這個環境變量,也可以通過在docker run —env key=value時設置或修改環境變量。

假如你安裝了JAVA程序,需要設置JAVA_HOME,那么可以在Dockerfile中這樣寫:

ENV JAVA_HOME /path/to/java/dirent
  • ADD(從src復制文件到container的dest路徑)

構建指令,所有拷貝到container中的文件和文件夾權限為0755,uid和gid為0;

如果是一個目錄,那么會將該目錄下的所有文件添加到container中,不包括目錄;如果文件是可識別的壓縮格式,則docker會幫忙解壓縮(注意壓縮格式);

如果<src>是文件且<dest>中不使用斜杠結束,則會將<dest>視為文件,<src>的內容會寫入<dest>

如果<src>是文件且<dest>中使用斜杠結束,則會<src>文件拷貝到<dest>目錄下。

ADD <src> <dest>

是相對被構建的源目錄的相對路徑,可以是文件或目錄的路徑,也可以是一個遠程的文件url;

是container中的絕對路徑

  • VOLUME(指定掛載點)

設置指令,使容器中的一個目錄具有持久化存儲數據的功能,該目錄可以被容器本身使用,也可以共享給其他容器使用。

我們知道容器使用的是AUFS,這種文件系統不能持久化數據,當容器關閉后,所有的更改都會丟失。當容器中的應用有持久化數據的需求時可以在Dockerfile中使用該指令。

FROM baseVOLUME ["/tmp/data"]
  • WORKDIR(切換目錄)

設置指令,可以多次切換(相當于cd命令),對RUN,CMD,ENTRYPOINT生效。

# 在 /p1/p2 下執行 vim a.txtWORKDIR /p1 WORKDIR p2 RUN vim a.txt
2.7 鏡像導入導出

導出鏡像到本地:

docker save -o centos6.5.tar centos6.5 或docker export f9c99092063c >centos6.5.tar

從本地將鏡像導入:

docker load --input centos6.5.tar 或docker load < centos6.5.tar

docker rm刪除已經終止的容器docker -f rm 可以刪除正在運行的容器

修改已經運行的后臺容器:

docker exec -it CONTAINER ID /bin/bash

三、存儲

3.1 數據盤

Docker 的鏡像使用一層一層文件組成的,Docker 的一些存儲引擎可以處理怎么樣存儲這些文件。

docker inspect centos #查看容器詳細信息

信息下方的Layers,就是centos的文件,這些東西都是只讀的不能去修改,我們基于這個鏡像去創建的鏡像和容器也會共享這些文件層,而docker會在這些層上面去添加一個可讀寫的文件層。

如果需要修改一些文件層里面的東西的話,docker會復制一份到這個可讀寫的文件層里面,如果刪除容器的話,那么也會刪除它對應的可讀寫的文件層的文件。

如果有些數據你想一直保存的話,比如:web服務器上面的日志,數據庫管理系統里面的數據,那么我們可以把這些數據放到data volumes數據盤里面。

它上面的數據,即使把容器刪掉,也還是會永久保留。創建容器的時候,我們可以去指定數據盤。其實就是去指定一個特定的目錄。

docker run -i -t -v /mnt  --name nginx docker.io/nginx /bin/bash
  • -v:制定掛載到容器內的目錄

使用docker inspect容器ID可以查看掛載目錄對應于宿主機的物理文件路徑。

同樣,我們可以使用將制定物理宿主機的目錄掛載到容器的制定目錄下:

將宿主機目錄掛載到容器內:

docker run -d -p 80:80 --name nginx -v /webdata/wordpress:/usr/share/nginx/html docker.io/sergeyzh/centos6-nginx
  • -d 后臺運行

  • —name 給運行的容器命名

  • -v 宿主機目錄:容器目錄 將宿主機目錄掛載在容器內

  • -p 宿主機端口:容器監聽端口 將容器內應用監聽端口映射到物理宿主機的特定端口上

映射多個物理目錄:(多寫幾個-v即可)

3.2 數據容器

可以創建一個數據容器,也就是再創建容器是指定這個容器的數據盤,然后讓其他容器可以使用這個容器作為他們的數據盤,有點像繼承了這個數據容器指定的數據盤作為數據盤。

首先創建一個數據容器命名為newnginx

docker create -v /mnt -it --name newnginx docker.io/nginx /bin/bash

利用此數據容器容器運行一個容器nginx1,在數據目錄/mnt 下創建一個文件

docker run --volumes-from newnginx --name nginx1 -it docker.io/nginx /bin/bash
利用數據容器在創建一個容器nginx2,查看數據目錄下容器nginx1創建的文件依舊存在,同理在nginx2的/mnt下創建文件,其他基于數據容器運行的新容器也可以看到文件

3.3 數據盤管理

在刪除容器時,docker默認不會刪除其數據盤。

docker volume ls                    #查看數據盤docker volume ls -f dangling=true        #查看未被容器使用的數據盤docker volume rm VOLUME NAME        #刪除數據盤

如果想要刪除容器時,同時刪除掉其數據盤,那么可以使用-v參數。

docker rm -v newnginx

四、網絡

docker提供幾種網絡,它決定容器之間和外界和容器之間如何去相互通信。

docker network ls        #查看網絡

當 Docker 進程啟動時,會在主機上創建一個名為 docker0 的虛擬網橋,此主機上啟動的Docker容器會連接到這個虛擬網橋上。

虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網絡中。從docker0子網中分配一個IP給容器使用,并設置docker0的IP地址為容器的默認網關。

在主機上創建一對虛擬網卡veth pair設備,Docker將veth pair設備的一端放在新創建的容器中,并命名為eth0(容器的網卡),另一端放在主機中,以vethxxx這樣類似的名字命名,并將這個網絡設備加入到docker0網橋中。

4.1 bridge橋接

網絡除非創建容器的時候指定網絡,不然容器就會默認的使用橋接網絡。屬于這個網絡的容器之間可以相互通信,不過外界想要訪問到這個網絡的容器呢,需使用橋接網絡,有點像主機和容器之間的一座橋,對容器有一點隔離作用。

實際是在iptables做了DNAT規則,實現端口轉發功能。可以使用iptables -t nat -vnL查看。

4.2 host 主機網絡

如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個 Network Namespace。容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。

但是,容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的。只用這種網絡的容器會使用主機的網絡,這種網絡對外界是完全開放的,能夠訪問到主機,就能訪問到容器。

4.3 使用 none 模式

使用none模式Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息。需要我們自己為Docker容器添加網卡、配置IP等。使用此種網絡的容器會完全隔離。

4.4 簡單演示

啟動兩個容器,查看其容器內部IP地址

for i in `docker ps |grep -v "CONTAINER"|awk '{print $1}'`;do docker inspect $i|grep 'IPAddress';done

查看橋接模式下主機內部容器之間和容器與宿主機直接均可正常通訊

docker inspect 容器ID

查看host創建的容器內部沒有IP地址,它使用的為宿主機的地址:

docker run -d --net host docker.io/sergeyzh/centos6-nginx

查看 host 創建的容器內部沒有 IP 地址,它使用的為宿主機的地址:

docker run -d --net none docker.io/sergeyzh/centos6-nginx

4.5 容器端口

如果想讓外界可以訪問到,基于bridge網絡創建的容器提供的服務,那你可以告訴Docker 你要使用哪些接口。如果想查看鏡像會使用哪些端口,ExposedPorts,可以獲悉鏡像使用哪些端口。

docker run -d -p 80 docker.io/sergeyzh/centos6-nginxdocker port 09648b2ff7f6
  • -p 參數會在宿主機隨機映射一個高端口到容器內的指定端口。

docker run -d -p 80:80 docker.io/sergeyzh/centos6-nginx    #將宿主機的80端口映射到容器的80端口


?今天的分享就到此結束了, 如果文章對你有幫助,記得點贊,收藏,加關注。會不定期分享一些干貨哦......

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

?

這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!

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

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

相關文章

使用QtGui顯示QImage的幾種方法

問題描述 我是一名剛學習Qt的新手,正在嘗試創建一個簡單的GUI應用程序。當點擊一個按鈕時,顯示一張圖片。我可以使用QImage對象讀取圖片,但是否有簡單的方法調用一個Qt函數,將QImage作為輸入并顯示它? 方法一:使用QLabel顯示QImage 最簡單的方式是將QImage添加到QLabe…

bigtop gradle 任務依賴關系

./gradlew deb 會編譯ubuntu的所有deb包 任務deb會依賴17個任務&#xff0c;它們會按字母排序執行&#xff0c;如下&#xff1a; alluxio-deb bigtop-groovy-deb bigtop-jsvc-deb bigtop-utils-deb flink-deb hadoop-deb hbase-deb hive-deb kafka-deb livy-deb phoenix-deb …

這5款國內可用的寶藏AI視頻工具,不允許有人還不知道!(建議收藏)

文章首發于公眾號&#xff1a;X小鹿AI副業 大家好&#xff0c;我是程序員X小鹿&#xff0c;前互聯網大廠程序員&#xff0c;自由職業2年&#xff0c;也一名 AIGC 愛好者&#xff0c;持續分享更多前沿的「AI 工具」和「AI副業玩法」&#xff0c;歡迎一起交流~ 前幾天一位粉絲說給…

【MySQL】數據庫——存儲引擎

一、存儲引擎概述 1.概念 MySQL中的數據用各種不同的技術存儲在文件中&#xff0c;每一種技術都使用不同的存儲機制、索引技巧、鎖定水平并最終提供不同的功能和能力&#xff0c;這些不同的技術以及配套的功能在MySQL中稱為存儲引擎存儲引擎是MySQL將數據存儲在文件系統中的存…

會聲會影2024永久激活碼序列號注冊機分享

大家好呀&#xff0c;今天我想給大家安利一款我最近超級喜歡的軟件——會聲會影2024&#xff01;&#x1f31f; 作為一個視頻編輯愛好者&#xff0c;我嘗試過很多視頻編輯軟件&#xff0c;但總感覺少了那么一點點“火花”。直到我遇到了會聲會影2024&#xff0c;它完全改變了我…

環境科學SCI期刊,IF=3+,易錄用,幾乎不退稿

一、期刊名稱 International Journal of Environmental Science and Technology 二、期刊簡介概況 期刊類型&#xff1a;SCI 學科領域&#xff1a;環境科學 影響因子&#xff1a;3.1 中科院分區&#xff1a;4區 三、期刊簡介 International Journal of Environmental Sci…

C++_STL---string類

前言 說起string類&#xff0c;首先需要了解的是 - string類是什么&#xff1f; std::string是類模板std::basic_string的一個元素類型為char的實例化&#xff0c;而basic_string則是對元素指針的封裝。由于basic_string的實現對字符串操作進行了優化&#xff0c;所以它不能用…

深入理解計算機系統 CSAPP 家庭作業6.45

CS:APP3e, Bryant and OHallaron 可以參考這里 void bijk(array A, array B, array C, int n, int bsize) {int i, j, k, kk, jj;double sum;int en bsize*(n/bsize);for (i 0; i < n; i)for (j 0; j < n; j)C[i][j] 0.0;for (kk 0; kk < en; kk bsize) {for (j…

QT拖放事件之八:通過全局剪切板中的接口QClipboard::mimeData()來獲取MIME類型數據

1、演示效果 首先向剪切板寫入數據,然后點擊paste按鈕進行從全局剪切板中 獲取 MIME數據。。。 2、核心代碼 void Widget::on_pasteBtn_clicked() {const QClipboard* clipBoard = QGuiApplication::clipboard()

前端路由中的meta、matched是什么?有哪些作用?

在前端路由中&#xff0c;尤其是在 Vue.js 這樣的框架中&#xff0c;meta 和 matched 是兩個常見的概念&#xff0c;它們提供了關于路由的額外信息和上下文 1. meta 一個可以附加到 Vue Router 路由定義上的自定義字段 它通常用于存儲一些與路由相關的元數據或信息&#xff0…

算法07 深度優先搜索及相關問題詳解

深搜與廣搜是搜索算法中最常用的兩種算法&#xff0c;通過深度優先搜索解決問題還會用到回溯和剪枝&#xff0c;讓我們一起進入本章&#xff0c;了解深搜的基本概念和模板&#xff0c;并學會解決一些常見問題。 目錄 問題導入 走迷宮問題 如何走&#xff1f; 問題建模 如何…

python ----- xml 命名空間與xpath詳解

一、簡介 本文章以如下xml 樣例進行講解命名空間和xpath xml_text"""<?xml version"1.0"?><actors xmlns:fictional"http://characters.example.com"xmlns"http://people.example.com"><actor><name>…

SpringBean的管理

一、bean的名字與標識符 <bean id"" class""></bean> bean的名字作用: 獲取這個bean通過bean名字獲取 bean名字配置方式: id: 唯一標志符, 命名規范與變量命名規范一樣, 包含特殊符號name: 配置名字: 可以包含特殊符號,沒有要求, 比如. 一…

基于支持向量機的垃圾郵件分類,使用SVM+flask+vue

sms-classify 基于支持向量機的垃圾郵件分類&#xff0c;使用SVMflaskvue 數據集和源碼地址 數據集 SMS Spam Collection Data Set 來源于 UCI。樣例被分為非垃圾郵件&#xff08;86.6%&#xff09;和垃圾郵件&#xff08;13.4%&#xff09;&#xff0c;數據格式如下&#xff…

網絡爬蟲中Xpath的使用方法

正則表達式雖然可以處理包含了諸如 HTML 或 XML 內容的字符串&#xff0c;但只能根據文本的 特征匹配字符串&#xff0c;而忽略字符串所包含的內容的真實格式。為了解決這個問題&#xff0c;Python 引入 XPath 以及支持 XPath 的第三方庫 lxml&#xff0c;專門對 XML 或 HTML 格…

git 合并master到分支

master分支的代碼領先自己的分支,git 如何把master分支代碼合并到自己的分支 1.首先切換到主分支 git checkout master 2.使用git pull 把領先的主分支代碼pull下來 git pull 3.切換到自己的分支 git checkout xxx(自己的分支) 4.把主分支的代碼merge到自己的分支 git merge ma…

minio+tusd+uppy搭建文件上傳服務

1、docker部署minio、tusd服務 1.1 新建docker-compose.yml minio API: http://ip:9100 minio控制臺: http://ip:9101 tus API: http://ip:9102/files/ tus webhooh: http:172.0.0.1:3000/files/webhooh(用戶鑒權API) version: 3.7services:minio:image: minio/minio:RELEAS…

亞馬遜運營專詞(一)

許多新入駐亞馬遜的大陸賣家&#xff0c;對亞馬遜的專業詞匯還不太了解&#xff0c;導致在運營店鋪的過程出現一些問題&#xff0c;今天就來講解一下亞馬遜常用的運營專詞&#xff0c;方便新手賣家深入了解。 1. Listing&#xff1a;亞馬遜listing指的是產品的詳情頁面&#xf…

通過BLE實現類似UART的串行通信:NUS服務 vs GATT服務

在物聯網和智能設備的發展中&#xff0c;藍牙低功耗&#xff08;Bluetooth Low Energy, BLE&#xff09;技術已經成為無線數據傳輸的重要手段。本文將介紹通過BLE實現類似UART的串行通信&#xff0c;并對比NUS服務和GATT服務的使用場景&#xff0c;幫助開發者更好地選擇適合的技…

2024越南醫藥、制藥機械展

2024年越南國際醫藥&#xff0c;制藥裝備及技術展覽會 時間&#xff1a; 2024年11月21--23日 地點&#xff1a;越南胡志明市-西貢會展中心SECC 2024年越南國際醫藥&#xff0c;制藥裝備及技術展覽會將于2024年11月21-23日在越南胡志明市盛大舉行&#xff01;展覽會以國際化、專…