華為云、谷歌云、騰訊云、阿里云、亞馬遜、百度云、移動云、天翼云、西部數碼云等
華為云、阿里云、騰訊云、天翼云 (私有云)
谷歌云、亞馬遜
IaaS:Infrastructure(基礎設施)-as-a-Service
PasS:Platform(平臺)-as-a-Service
SaaS:Software(軟件)-as-a-Service
基礎設施即服務(IaaS, Infrastructure as a Service)
定義:IaaS 是云計算的基礎層級,它向用戶提供虛擬化的計算資源,如虛擬機、存儲空間、網絡和操作系統。用戶可以根據需求租用這些基礎設施,并對其進行配置和管理,但無需關心底層硬件的維護。
應用場景:適用于需要高度定制化環境的企業,如運行特定應用、開發測試環境、數據備份和恢復等。
平臺即服務(PaaS, Platform as a Service)
定義:PaaS 為開發人員提供了一個完整的開發和部署環境,包括操作系統、數據庫、中間件、編程框架等。用戶可以在服務商提供的平臺上直接開發、運行和管理應用程序,無需關心底層基礎設施的細節。
應用場景:適合軟件開發團隊,可以加速應用開發、簡化運維工作,如 Web 應用、移動應用后端、大數據分析平臺等。
軟件即服務(SaaS, Software as a Service)
定義:SaaS 是云計算服務的最高層級,直接向用戶提供應用程序,用戶通過互聯網訪問并使用這些應用,無需安裝或維護軟件。所有應用相關的后臺管理、數據存儲、安全更新等均由服務提供商負責。
應用場景:廣泛應用于日常辦公、CRM、ERP、郵件服務、協作工具等領域,如 Office 365、Salesforce、Google Workspace 等。
每種服務模式都代表了從基礎設施到最終應用的不同層次的服務抽象,用戶可以根據自身需求選擇合適的服務模式,實現資源的靈活配置和高效利用,同時降低運營成本和提升業務敏捷性。
目前中國使用最多的服務模式是 PaaS ,國外使用最多的是 SaaS。
Docker 是一個開源的應用容器引擎,它允許開發者將應用程序及其所有的依賴包打包成一個輕量級、可移植的容器(Container),然后可以在任何支持 Docker 的 Linux 或 Windows 操作系統機器上運行這個容器,實現應用程序的快速部署和一致性運行環境。Docker 采用操作系統級別的虛擬化技術,相較于傳統的虛擬機技術,它更為輕量級,啟動速度快,資源利用率更高。
· VMware vSphere:包括 ESXi hypervisor 和 vCenter Server,提供企業級的虛擬化解決方案。
· Microsoft Hyper-V:Windows Server 內置的虛擬化平臺,支持創建和管理虛擬機。
· Xen:開源虛擬化技術,常用于 Citrix XenServer 和一些 Linux 發行版中。
· KVM(Kernel-based Virtual Machine):基于 Linux 內核的開源虛擬化解決方案,廣泛應用于云平臺。
· VMware Horizon:提供虛擬桌面基礎架構(VDI)和應用程序虛擬化。
· Citrix Virtual Apps and Desktops(原 XenDesktop):支持交付虛擬應用和桌面到任何設備。
· Microsoft Remote Desktop Services:允許用戶遠程訪問 Windows 應用和桌面。
· VMware vSAN:軟件定義的存儲解決方案,直接在 ESXi 主機的本地存儲上創建分布式存儲層。
· Microsoft Storage Spaces Direct:Windows Server 中的存儲虛擬化功能,支持使用直接附加存儲創建存儲池。
· NetApp Data ONTAP:企業級存儲虛擬化解決方案,支持數據管理和保護。
· VMware NSX:提供軟件定義的網絡和安全服務,支持網絡虛擬化和微分段。
· Cisco ACI(Application Centric Infrastructure):以應用為中心的網絡架構,提供網絡虛擬化和策略驅動的網絡管理。
· Open vSwitch(OVS):開源的虛擬交換機,常用于 OpenStack 等云平臺的網絡虛擬化。
· Docker:容器化平臺,用于應用程序的打包、分發和運行。
· Kubernetes(K8s):容器編排系統,用于自動化容器化應用的部署、擴展和管理。
· Linux Containers (LXC):基于操作系統級別的輕量級虛擬化技術,提供容器服務。
虛擬機作為應用軟件安裝在操作系統上
可以在此應用軟件上安裝多個操作系統
直接安裝在硬件上的系統為宿主
本機(真實的操作系統) ----> 虛擬化產品 ----> 虛擬化操作系統或軟件
圖
虛擬機監視器:例如 VMware 等
VMware 非常強大,真機可以上網,虛擬機也可以上網。
病毒木馬都可以拖到虛擬機運行,與真機脫離,非常安全。
但是真機一旦崩了,虛擬機當然也崩了。所以實際生產環境用的是 源生架構
虛擬機軟件直接安裝在計算機硬件上
虛擬機本身就是一個操作系統
在這個虛擬機中可以同時運行多個操作系統
裸金屬 服務器 ---> 虛擬化產品
圖
虛擬化技術允許在單一物理硬件上創建和運行多個獨立的虛擬環境,核心分類包括仿真虛擬化、半虛擬化和全虛擬化,每種技術各有側重:
· 仿真虛擬化:無需硬件支持,兼容性強,能在不同架構間運行操作系統,但性能較低。
· 半虛擬化:需修改客戶系統以提升性能,直接與虛擬化層通信,適用于特定場景和注重性能的環境。
· 全虛擬化:現代技術大多結合硬件輔助,以實現接近原生的性能,同時保持高度兼容性,適用于廣泛場景。
VMware Workstation: 面向個人用戶的 Windows 或 Linux 上的虛擬機軟件,適合開發、測試及多系統體驗。
VMware Fusion: 專為 Mac 設計的虛擬化軟件,允許在 Mac 上運行 Windows 及其他操作系統。
VMware ESXi & vSphere: 企業級裸金屬虛擬化平臺,直接安裝在物理服務器上,提供高性能和集中管理能力。可通過客戶端或網頁端訪問管理界面,網頁端逐漸成為主流,便于遠程管理和維護。
之前用的是客戶端連接 VMware vsphere
現企業 使用 網頁端連接 VMware vsphere
· KVM: 基于 Linux 內核的虛擬化技術,開源且強大,尤其適用于構建私有云環境。與 OpenStack 等云平臺結合,提供全面的虛擬化解決方案,適合大規模部署和服務自動化。
· Xen Hypervisor: 是一個成熟的開源虛擬機監視器,特別是與 RHEL(Red Hat Enterprise Linux)5 緊密集成,支持半虛擬化和全虛擬化,適用于企業級服務器虛擬化場景。
· Hyper-V (微軟): 微軟開發的虛擬化平臺,特別適合 Windows 環境,廣泛應用于 Windows Server,支持半虛擬化技術。
· VirtualBox: 一款廣受歡迎的免費虛擬機軟件,適用于多種操作系統,支持全虛擬化,適合開發測試和教育用途。
· Citrix Hypervisor: 前身為 XenServer,專注于提供高效的服務器和桌面虛擬化解決方案,適用于企業環境,支持全虛擬化。
① KVM 全虛擬化產品 調用 linux 內核 來完成
② ESXI (裸金屬虛擬化) 企業用的特別多 除了云 就是它
以下兩個圖解:
云計算涌現出很多改變傳統 IT 架構和運維方式的新技術,比如虛擬機、容器、微服務、Serverless(無服務),無論這些技術應用在哪些場景,降低成本、提升效率是云服務永恒的主題。
Bare Metal(裸金屬):運行物理機,也稱為裸金屬
Virual machines(虛擬機):可以在一臺物理機上創建多個虛擬機,并把物理配置分發成多個虛擬配置
缺點:性能損耗大,大約損耗 50%
虛擬機常用軟件:VMware workstation(windows、vm Sphere+ESXI (Windows server)、KVM(linux 內核))
Containers(容器):容器內部自身有一個小型操作系統
常用軟件:docker、podman、rocket、container
functions 函數(函數化、代碼化)
1. Docker 是一個開源的應用容器引擎,基于 go 語言開發并遵循了 apache2.0 協議開源
2. Docker 是在 Linux 容器里運行應用的開源工具,是一種輕量級的 “虛擬機”
3. Docker 的容器技術可以在一臺主機上輕松為任何應用創建一個輕量級的,可移植的,自給自足的容器。
Docker 的 Logo 設計為藍色鯨魚,拖著許多集裝箱,鯨魚可以看作為宿主機,集裝箱可以理解為相互隔離的容器,每個集裝箱中都包含自己的應用程序。
Build,Ship and Run Any App,Anywhere,
即通過對應用組件的封裝、發布、部署、運行等生命周期的管理,達到應用組件級別的 “一次封裝,到處運行” 的目的。這里的組件,既可以是一個應用,也可以是一套服務,甚至是一個完整的操作系統。
容器化越來越受歡迎,因為容器是:
1. 靈活:即使是最復雜的應用也可以集裝箱化。
2. 輕量級:容器利用并共享主機內核。
3. 可互換:可以即時部署更新和升級。
4. 便攜式:可以在本地構建,部署到云,并在任何地方運行。
5. 可擴展:可以增加并白動分發容器副本。
6. 可堆疊:可以垂直和即時堆疊服務。
容器是在 linux 上本機運行,并與其他容器共享主機的內核,它運行的是一個獨立的進程,不占用其他任何可執行文件的內存,非常輕量。
虛擬機運行的是一個完整的操作系統,通過虛擬機管理程序對主機資源進行虛擬訪問,相比之下需要的資源更多。
虛擬機通過添加 Hypervisor 層(虛擬化中間層),虛擬出網卡、內存、CPU 等虛擬硬件,再在其上建立虛擬機,每個虛擬機都有自己的系統內核。而 Docker 容器則是通過隔離(namesapce)的方式,將文件系統、進程、設備、網絡等資源進行隔離,再對權限、CPU 資源等進行控制(cgroup),最終讓容器之間互不影響,容器無法影響宿主機。
容器與宿主機共享內核、文件系統、硬件等資源。
與虛擬機相比,容器資源損耗要少。
同樣的宿主機下,能夠建立容器的數量要比虛擬機多
但是,虛擬機的安全性要比容器稍好,要從虛擬機攻破到宿主機或其他虛擬機,需要先攻破 Hypervisor 層,這是極其困難的
而 docker 容器與宿主機共享內核、文件系統等資源,更有可能對其他容器、宿主機產生影響。
不同點 | Docker 容器 | 虛擬機 |
啟動速度 | 快,幾秒鐘 | 慢,幾分鐘 |
運行性能 | 接近原生(直接在內核中運行) | 運行于 Hypervisor 上,50% 左右損失 |
磁盤占用 | 小,甚至幾十 KB(根據鏡像層的情況) | 非常大,上 GB |
并發性 | 一臺宿主機可以啟動成百上千個容器 | 最多幾十個虛擬機 |
隔離性 | 進程級別 | 資源隔離 / 限制 |
操作系統 | 主要支持 Linux | 主要支持 Linux |
封裝程度 | 只打包項目代碼和依賴關系,共享宿主機內核 | 完整的操作系統,與宿主機隔離 |
namespace | 系統調用參數 | 隔離內容 |
UTS | CLONE_NEWUTS | 主機名與域名 |
IPC | CLONE_NEWWIPC | 信號量、消息隊列和共享內存 |
PID | CLONE_NEWPID | 進程編號 (重點) |
NETWORK | CLONE_NEWNET | 網絡設備、網絡棧、端口等 (重點) |
MOUNT | CLONE_NEWNS | 掛載點(文件系統) |
USER | CLONE_NEWUSER | 用戶和用戶組(3.8 以后的內核才支持〉 |
把容器化技術做成了標準化平臺
docker 引擎統一了基礎設施環境——docker 容器環境(引擎)
docker 引擎統一了程序打包(裝箱) 方式——docker 鏡像(把引擎放在鏡像中,帶著鏡像到處跑)
docker 引擎統一了程序部署(運行)方式——docker 容器(利用引擎把這個鏡像再去運行為之前的相同的一模一樣的容器了)
鏡像——》封裝的一個時刻的服務 / 應用狀態
容器——》應用跑起來的狀態(正常提供服務的狀態 - 運行時)
實現了一次構建,多次、多處使用。
鏡像:包含了各種環境或者服務(tomcat redis nginx)的一個模板。運行容器的基礎,包含運行應
用程序所需的所有內容。
容器:是鏡像運行起來之后的一個實例,可以把容器看做是一個簡易版的 linux 環境容器就是集裝箱
從鏡像創建的叫做運行實例。
倉庫:存放鏡像的場所,最大的公開庫是 docker。私有倉庫 harboor。
docker 本質就是宿主機的一個進程,docker 通過 namespace 實現資源隔離,通過 ==cgroups == 實現資源限制,通過寫時復制技術(copy-on-write)實現了高效的文件操作(類似虛擬機的磁盤。比如分配 500G,并不是實際占用物理磁盤 500g,而是隨著使用擴展)
打包應用部署簡單、適合做微服務部署、適合持續集成和持續交付、提高開發效率、快速部署。
打包應用程序部署簡單
可脫離底層硬件任意遷移(實現了應用的隔離,將應用拆分并進行解耦)
例如:需要把服務器從騰訊云遷移到阿里云,如果采用的是 Docker容器技術,整個遷移的過程只需要在新的服務器上啟動我們需要的容器就可以了。
適合做微服務的部署
適合持續集成和持續交付(CI/CD):開發到測試發布
部署微服務
提供PASS產品(平臺即服務){OpenStack的云主機類似于阿里云的ECS,屬于IAAS、Docker(K8S)屬于PAAS}
1. Docker 使用客戶端 - 服務端(C/S)架構。Docker 客戶端與 Docker 守護進程進行對話,該守護進程完成了構建,運行和分發 Docker 容器的繁重工作。
2. Docker 區別于傳統的虛擬化,不需要虛擬硬件資源,直接使用容器引擎,所以速度快。
3. Docker daemon: 守護進程
4. Docker 守護程序(dockerd)偵聽 Docker API 請求并管理 Docker 對象。例如圖像、容器、網絡和卷,守護程序還可以與其他守護程序通信以管理 Docker 服務。
1. 客戶端發起各種各樣的命令,給與主機
2. 主機會調用鏡像,如果有鏡像直接用,運行為容器
3. 如果鏡像里沒有會到 registry 公共倉庫去拉去鏡像,拉到本地后再運行為容器
目前 Docker 只能支持 64 位系統。
部署環境
systemctl stop firewalld.service
setenforce 0
#安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
-----------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux內核中支持邏輯卷管理的通用設備映射機制,它為實現用于存儲資源管理的塊設備
驅動提供了一個高度模塊化的內核架構。
device mapper存儲驅動程序需要 device-mapper-persistent-data 和 lvm2。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io 安裝最新版本
docker-ce-20.10.18
--------------------------------------------------------------------------------------------
安裝好的Docker系統有兩個程序,Docker服務端和Docker客戶端。其中Docker服務端是一個服務進程,負責管理所有容器。 Docker客戶端則扮演著Docker服務端的遠程控制器,可以用來控制Docker的服務端進程。大部分情況下Docker服務端和客戶端運行在一臺機器上。
--------------------------------------------------------------------------------------------
systemctl start docker.service
systemctl enable docker.service
systemctl status docker.service
docker version
docker info ##查看信息
格式:docker search 關鍵字
格式:docker search 關鍵字
docker search nginx
格式:docker pull 倉庫名稱 [: 標簽]
#如果下載鏡像時不指定標簽,則默認會下載倉庫中最新版本的鏡像,即選擇標簽為 latest 標簽。
docker pull nginx
瀏覽器訪問 https://cr.console.aliyun.com/cn-shanghai/instances/mirrors 獲取鏡像加速器配置
sudo mkdir -p /etc/docker ##其實/etc/docker路徑已經存在,可以不創建
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://5nbz4xnp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl daemon-reload ##重新加載
systemctl restart docker.service ##重新啟動服務
鏡像下載后存放在 /var/lib/docker 。
Docker 相關的本地資源存放在 /var/lib/docker/ 目錄下,其中 containers 目錄存放容器信息,image 目錄存放鏡像信息,overlay2 目錄下存放具體的鏡像底層文件。
[root@localhost ~]#ls /var/lib/docker/
buildkit containers engine-id image network overlay2 plugins runtimes swarm tmp volumes
鏡像下載后存放在 /var/lib/docker
#查看下載的鏡像文件信息, 主要存放鏡像名稱與鏡像 id
cat /var/lib/docker/image/overlay2/repositories.json
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae2feff98a0c 9 days ago 133MB
--------------------------------------------------------------------------------------------
REPOSITORY:鏡像屬于的倉庫;
TAG:鏡像的標簽信息,標記同一個倉庫中的不同鏡像;
IMAGE ID:鏡像的唯一ID 號,唯一標識一個鏡像;
CREATED:鏡像創建時間;
VIRTUAL SIZE:鏡像大小;
--------------------------------------------------------------------------------------------
docker images ##查看本地所有鏡像
格式:docker inspect 鏡像 ID 號
docker inspect 2ac752d7aeb1
格式:docker tag 名稱:[標簽] 新名稱:[新標簽]
docker tag nginx:latest nginx:web
docker images | grep nginx
格式:
docker rmi 倉庫名稱: 標簽 # 當一個鏡像有多個標簽時,只是刪除其中指定的標簽
或者
docker rmi 鏡像 ID 號 # 會徹底刪除該鏡像
注意:如果該鏡像已經被容器使用,正確的做法是先刪除依賴該鏡像的所有容器,再去刪除鏡像。
docker rmi nginx:web
docker rmi 2ac752d7aeb1
格式:docker save -o 存儲文件名 存儲的鏡像
cd /opt
docker save -o nginx nginx:latest #存出鏡像命名為nginx存在當前目錄下
ls
這兒就直接空的上面演示
默認上傳到 docker Hub 官方公共倉庫,需要注冊使用公共倉庫的賬號。https://hub.docker.com
可以使用 docker login 命令來輸入用戶名、密碼和郵箱來完成注冊和登錄。
在上傳鏡像之前,還需要先對本地鏡像添加新的標簽,然后再使用 docker push 命令進行上傳。
docker tag nginx:latest soscscs/nginx:web #添加新的標簽時必須在前面加上自己的dockerhub的username
docker login #登錄公共倉庫
Username:soscscs
password:abc123456
docker push soscscs/nginx:web #上傳鏡像
容器創建:就是將鏡像加載到容器的過程。
新創建的容器默認處于停止狀態,不運行任何程序,需要在其中發起一個進程來啟動容器。
格式:docker create [選項] 鏡像
常用選項:
-i:讓容器開啟標準輸入
-t:讓 Docker 分配一個偽終端 tty
-it :合起來實現和容器交互的作用,運行一個交互式會話 shell
docker create -it nginx:latest /bin/bash
docker ps ## 不加 -a 只查看運行狀態的容器
docker ps -a ## 加 -a 選項可以顯示所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
容器的ID號 加載的鏡像 運行的程序 創建時間 當前的狀態 端口映射 名稱
格式:docker start 容器的 ID / 名稱
docker start e59f6a2bf793
docker ps
docker ps -a
可以直接執行 docker run 命令, 等同于先執行 docker create 命令,再執行 docker start 命令。
注意:容器是一個與其中運行的 shell 命令共存亡的終端,命令運行容器運行, 命令結束容器退出。
docker 容器默認會把容器內部第一個進程,也就是 pid=1 的程序作為 docker 容器是否正在運行的依據,如果 docker 容器中 pid = 1 的進程掛了,那么 docker 容器便會直接退出,也就是說 Docker 容器中必須有一個前臺進程,否則認為容器已經掛掉。
/var/lib/docker
當利用 docker run 來創建容器時, Docker 在后臺的標準運行過程是:
(1)檢查本地是否存在指定的鏡像。當鏡像不存在時,會從公有倉庫下載;
(2)利用鏡像創建并啟動一個容器;
(3)分配一個文件系統給容器,在只讀的鏡像層外面掛載一層可讀寫層;
(4)從宿主主機配置的網橋接口中橋接一個虛擬機接口到容器中;
(5)分配一個地址池中的 IP 地址給容器;
(6)執行用戶指定的應用程序,執行完畢后容器被終止運行。
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a
需要在 docker run 命令之后添加 -d 選項讓 Docker 容器以守護形式在后臺運行。并且容器所運行的程序不能結束。
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker ps -a
docker run -itd --name test1 centos:7 /bin/bash #創建容器并持續運行容器
格式:docker stop 容器的 ID / 名稱
docker stop 1d8367958564
docker ps -a
需要進入容器進行命令操作時,可以使用 docker exec 命令進入運行著的容器。
格式:docker exec -it 容器 ID / 名稱 /bin/bash
-i 選項表示讓容器的輸入保持打開;
-t 選項表示讓 Docker 分配一個偽終端。
ocker start 1d8367958564 #進入容器前,確保容器正在運行
docker exec -it 1d8367958564 /bin/bash
ls
exit #退出容器后,容器仍在運行
docker ps -a
docker run -it centos:7 bash #不加 -d 選項會創建容器后直接進入容器,但是退出容器,容器也會停止
[root@localhost opt]#docker cp /opt/test.txt 1d8367958564:/opt
[root@localhost opt]#docker exec -it 1d8367958564 /bin/bash
[root@1d8367958564 opt]# docker cp 1d8367958564:/opt/ccc.txt ./
exit
用戶可以將任何一個 Docker 容器從一臺機器遷移到另一臺機器。在遷移過程中,可以使用 docker export 命令將已經創建好的容器導出為文件,無論這個容器是處于運行狀態還是停止狀態均可導出??蓪С鑫募鬏數狡渌麢C器,通過相應的導入命令實現容器的遷移。
導出格式:docker export 容器 ID / 名稱 > 文件名
docker export 1d8367958564 > centos7.tar
導入格式:cat 文件名 | docker import – 鏡像名稱: 標簽
cat centos7.tar | docker import - centos7:test #導入后會生成鏡像,但不會創建容器
格式:docker rm [-f] 容器 ID / 名稱
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash #批量停止容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stop
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量刪除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash #批量刪除鏡像
docker images | grep none | awk '{print $3}' | xargs docker rmi #刪除none鏡像
docker rm $(docker ps -a -q) #批量清理后臺停止的容器
docker ps -a
docker stop df1e7ec0e972
docker rm df1e7ec0e972 #刪除已經終止狀態的容器
docker rm -f 1d8367958564 #強制刪除正在運行的容器
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash
VMware workstation 個人版
VMware sphere / ESXI 企業級虛擬化
openstack(開發)/KVM Linux 環境虛擬機 私有云環境
· 容器: 提供多臺主機上運行應用程序的相同的運行環境
· Docker 是一個開源的應用容器引擎,基于 go 語言開發 是容器里面的運行應用的工具,是一個輕量級的虛擬機,可用在 docker 多個平臺去使用
· docker 容器可以被看做運行在宿主機上的一個進程 容器共享宿主機內核
· 容器通過 namespace(命名空間、名稱)資源隔離, 通過 cgroup(資源配額)去限制資源
1. 鏡像:運行容器的基礎,包含運行應用程序所需的所有內容
2. 容器:是從鏡像藏劍的運行實例
3. 倉庫:集中保存鏡像的地方 (共有倉庫 docker hub、私有倉庫 harbor)