部署項目的發展
- 傳統部署適合需要最大性能和可靠性的場景,但在資源利用和管理方面有顯著劣勢。
- 虛擬化部署提供了良好的資源利用率和隔離性,適用于需要靈活擴展和多租戶環境的場景,但存在性能開銷。
- 容器部署在輕量級、可移植性和資源利用率方面表現優異,特別適合現代微服務架構和 DevOps 流程,但需要處理隔離性和安全性挑戰。
選擇適合的部署方式取決于具體的應用需求、性能要求、資源管理和安全考慮。
了解了項目部署的方式,接下來就開始學習當下最熱門的容器技術的工具Docker
Docker 容器和傳統虛擬機有區別
物理服務器
物理服務器是一種實體的、有形的計算機硬件設備,通常被安置在數據中心或服務器機房中。物理服務器是構建IT基礎設施的基石,為各種云服務、虛擬化平臺和大型應用提供了必要的計算資源。隨著云計算和虛擬化技術的發展,許多企業選擇將部分或全部工作負載遷移到云平臺,但物理服務器仍然在某些特定場景下扮演著不可替代的角色,特別是在需要高性能、高安全性或特定硬件支持的情況下。
物理服務器與云服務器是虛擬化的關系
- 物理服務器可以作為虛擬化的宿主機,運行多個虛擬機
- 通過虛擬化技術,一臺物理服務器可以被劃分為多個虛擬服務器(如VPS)
VPS? vs? ?ECS
VPS (Virtual Private Server):
- VPS 是在物理服務器上通過虛擬化技術創建的虛擬服務器。
- 每個 VPS 都有獨立的操作系統、存儲和資源配置。
- VPS 通常由主機服務提供商管理,用戶擁有 root 訪問權限。
但是VPS有個缺點,不支持自主升降級,不易動態調整,所以有了ECS
ECS (Elastic Compute Service):
- ECS 是云服務提供商(如阿里云、亞馬遜 AWS)提供的彈性計算服務。阿里的叫ECS,AWS的叫EC2
- 它是一種虛擬化的計算資源,可以根據需求快速擴展或縮減。
- ECS 實例通常運行在物理服務器上,但用戶只需關注自己的虛擬機實例。
但是我們的服務器可能是不同的操作系統,部署應用會有各種的環境依賴問題,所以可以使用虛擬機將環境 + 應用打包
但是這種方法還是太笨重了,所以接下來引入了docker
Docker 是什么?
Docker 是一種開源平臺,旨在簡化應用程序的開發、部署和運行。通過使用容器技術,Docker 將應用程序及其依賴項打包到一個輕量級、獨立的容器中,從而確保在任何環境中都能一致地運行。
docker源碼
dockers官網
Namespace 提供了進程隔離,使得容器中的進程看到的系統資源是獨立的,與其他容器或主機系統隔離。
Cgroup 用于限制、記錄和隔離進程組使用的物理資源(CPU、內存、磁盤 I/O 等)
Docker 的主要特點
-
輕量級:Docker 容器共享主機操作系統的內核,與傳統虛擬機相比,更加輕量級,啟動速度更快,資源開銷更小。
-
一致性和可移植性:Docker 容器包含應用程序及其所有依賴項,確保在不同環境(開發、測試、生產)中的一致運行,從而提高應用程序的可移植性。
-
隔離性:Docker 提供了進程級的隔離,每個容器都有自己獨立的文件系統、網絡和進程空間,確保應用程序之間的相互隔離。
-
高效資源利用:Docker 容器共享主機的操作系統內核,可以在同一主機上運行更多的容器,從而提高資源利用率。
-
易于集成和擴展:Docker 可以與持續集成和持續部署(CI/CD)工具無縫集成,支持快速開發、測試和部署應用程序。此外,Docker 生態系統中的 Docker Compose 和 Docker Swarm 等工具,使得管理和編排多個容器變得更加簡單。
Docker 的基本組件
Docker Engine
- Docker 的核心組件,包括 Docker 守護進程(daemon)和 Docker CLI(命令行接口)。Docker 守護進程負責構建、運行和管理容器,Docker CLI 提供與守護進程交互的命令行工具。
Docker Image
- Docker 鏡像是一個只讀的模板,用于創建容器。它包含了運行應用程序所需的所有內容,包括代碼、運行時、庫和配置文件。鏡像可以從公共或私有的 Docker 倉庫(如 Docker Hub)中獲取。
Docker Container
- Docker 容器是鏡像的一個運行實例。容器是獨立、可執行的軟件包,包含了運行應用程序所需的所有內容。它們可以快速啟動和停止,并在不同的環境中一致地運行。
Docker Repository
- Docker 倉庫用于存儲和分發 Docker 鏡像。Docker Hub 是一個公共倉庫,提供大量的官方和社區構建的鏡像。用戶也可以創建自己的私有倉庫來存儲自定義鏡像。
Docker daemon
- Docker daemon 監聽 Docker API 請求并管理 Docker 對象,如鏡像、容器、網絡和數據卷。守護進程還可以與其他守護進程通信以管理 Docker 服務。
Docker client
- 是許多 Docker 用戶與 Docker 交互的主要方式。當你使用
docker run
等命令時,客戶端將這些命令發送給 dockerd 執行。Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器,并且可以與多個守護進程通信。
Docker Host
- 一個物理或者虛擬的機器用于執行 Docker 守護進程和容器。
Docker Desktop
- Docker Desktop 是一個適用于 Mac 和 Windows 環境的易于安裝的應用程序,使你能夠構建和共享容器化的應用程序和微服務。Docker Desktop 包含 Docker 守護進程(dockerd)、Docker 客戶端(docker)、Docker Compose、Docker Content Trust、Kubernetes 和 Credential Helper。
Docker Container 生命周期
Docker Container 生命周期,由以下五個狀態組成
- Created state
- Running state
- Paused state/unpaused state
- Stopped state
- Killed/Deleted state
1. Created state
docker create --name <name-of-container> <docker-image-name>
2. Running state
在運行狀態下,Docker 容器開始執行鏡像中提到的命令。要運行 Docker 容器,請使用 docker run 命令。
docker run <container-id>
or
docker run <container-name>
docker run 命令會創建一個容器(如果該容器不存在)。在這種情況下,可以跳過創建容器的步驟。
3. Paused state/unpaused state
在暫停狀態下,Docker 容器中當前執行的命令被暫停。使用 docker pause 命令來暫停正在運行的容器。
docker pause container <container-id or container-name>
注意:docker pause 會暫停容器中的所有進程。它發送 SIGSTOP 信號來暫停容器中的進程。
在取消暫停狀態下,被暫停的容器一旦取消暫停就會恢復執行命令。 使用 docker unpause 命令來恢復暫停的容器。
然后,Docker 發送 SIGCONT 信號來恢復進程。
docker unpause <container-id or container-name>
4. Stopped state
在停止狀態下,容器的主進程被優雅地關閉。Docker 發送 SIGTERM 信號進行優雅關閉,如果需要,會發送 SIGKILL 信號來終止容器的主進程。使用 docker stop 命令來停止容器。
docker stop <container-id or container-name>
重啟 Docker 容器相當于執行 docker stop,然后執行 docker run,即停止和運行階段。
5. Killed/Deleted state
在終止狀態下,容器的主進程被突然關閉。Docker 發送 SIGKILL 信號來終止容器的主進程。
docker kill <container-id or container-name>
到此docker 容器的生命結束
參考
Docker Architecture, Life Cycle of Docker Containers and Data Management - DEV Community
docker容器和傳統虛擬機有什么區別?_嗶哩嗶哩_bilibili