Docker 到底是個什么?

Docker 技術全面解析:從安裝到應用

一、引言

在當今的軟件開發和運維領域,Docker 已經成為了一個不可或缺的工具。它以其輕量級、可移植性和高效性等特點,改變了開發者和運維人員的工作方式,使得應用的打包、分發、運行變得更加簡便和高效。本文將深入探討 Docker 的各個方面,包括安裝教程、原理圖、常用命令、應用場景以及帶來的好處。

二、Docker 安裝教程

(一)安裝前的準備工作

在安裝 Docker 之前,需要確保滿足以下條件:

  1. 操作系統要求
    • Windows 10 或更高版本(需啟用 WSL 2)。
    • macOS 10.15(Catalina)或更高版本。
    • Linux 支持主流發行版(如 Ubuntu、CentOS)。
  2. 硬件要求
    • 至少 4GB 的內存。
    • 支持虛擬化技術(如 VT - x 或 AMD - V)。
  3. 網絡需求:安裝過程中需要穩定的網絡連接。

(二)不同系統的安裝步驟

1. Windows 平臺

Windows安裝Docker

  • 下載 Docker Desktop
    1. 打開 [Docker 官方網站](https://www.docker.com/products/docker - desktop)。
    2. 選擇 Get Docker,下載適用于 Windows 的安裝包。
  • 安裝 Docker Desktop
    1. 雙擊下載的安裝文件(如 Docker Desktop Installer.exe)。
    2. 在安裝向導中,勾選 Enable WSL 2 Features,確保啟用了 WSL 2。
    3. 點擊安裝,等待安裝完成。
  • 啟用 WSL 2(若未啟用)
    1. 打開 PowerShell,以管理員身份運行以下命令,安裝 WSL:
wsl --install
2. 設置默認 WSL 版本為 WSL 2:
wsl --set - default - version 2
  • 配置 Docker Desktop
    1. 安裝完成后,啟動 Docker Desktop。
    2. 登錄 Docker Hub 賬號(若無賬號,可前往 Docker Hub 免費注冊)。
    3. 確認 Docker Desktop 顯示 Running 狀態。
  • 驗證安裝:在 PowerShell 中運行以下命令,確認 Docker 已正確安裝:
docker --version
2. macOS 平臺
  • 下載 Docker Desktop
    1. 前往 [Docker 官方網站](https://www.docker.com/products/docker - desktop)。
    2. 選擇適用于 macOS 的版本并下載。
  • 安裝 Docker Desktop
    1. 下載完成后,雙擊 .dmg 文件。
    2. 將 Docker 圖標拖入 Applications 文件夾。
    3. 打開 Applications,運行 Docker。
  • 登錄并配置
    1. 啟動 Docker Desktop 時,可能會提示輸入管理員密碼,輸入后繼續。
    2. 登錄 Docker Hub 賬號,完成配置。
  • 驗證安裝:打開終端,運行以下命令:
docker --version
3. Linux 平臺(以 Ubuntu 為例)
  • 安裝 Docker 引擎
    1. 更新系統軟件包:
sudo apt update
sudo apt upgrade
2. 安裝必要的依賴項:
sudo apt install apt - transport - https ca - certificates curl software - properties - common
3. 添加 Docker 官方的 GPG 密鑰:
curl - fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor - o /usr/share/keyrings/docker - archive - keyring.gpg
4. 添加 Docker 的軟件源:
echo "deb [arch=$(dpkg --print - architecture) signed - by=/usr/share/keyrings/docker - archive - keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release - cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. 更新軟件包列表并安裝 Docker:
sudo apt update
sudo apt install docker - ce docker - ce - cli containerd.io
  • 啟動并配置 Docker
    1. 啟動 Docker 服務:
sudo systemctl start docker
2. 設置開機自啟動:
sudo systemctl enable docker
3. 將當前用戶加入 `docker` 用戶組(可選):
sudo usermod - aG docker $USER
注意:執行此命令后需重新登錄以生效。
  • 驗證安裝:運行以下命令檢查 Docker 是否安裝成功:
docker --version

三、Docker 原理圖

(一)Docker 架構原理

Docker架構原理圖
Docker 的工作原理可以分為三個核心組件:Docker 引擎、鏡像和容器。

  1. Docker 引擎(Docker Engine):這是 Docker 的核心,它實際上是一個客戶端 - 服務器架構。Docker 引擎分為兩個部分:
    • Docker Daemon(守護進程):這是一個常駐進程,負責管理 Docker 容器、鏡像和網絡等,接受 Docker 客戶端的請求。
    • Docker 客戶端:這是一個命令行工具或 API 接口,用戶通過它向 Docker Daemon 發送請求,控制 Docker 容器的生命周期。
  2. 鏡像(Image):鏡像是 Docker 容器的模板,它包含了應用程序和運行它所需的所有依賴庫。鏡像是只讀的,可以從公共或私有的鏡像倉庫(如 Docker Hub)中下載,也可以根據需求自己構建。鏡像是輕量級和可移植的,幫助開發者快速創建容器。
  3. 容器(Container):容器是鏡像的運行實例,類似于虛擬機中的虛擬機實例。容器是隔離的,但它與宿主機共享內核,這使得它比虛擬機更加高效。容器是可啟動的、可停止的、可刪除的,它也可以在不同的環境中運行。

(二)Docker 容器運行原理

Docker 容器的運行基于 Linux 內核的 cgroups(控制組)和 namespaces(命名空間):

  1. cgroups:這是一種資源限制機制,它允許 Docker 為每個容器分配一定的 CPU、內存、網絡帶寬等資源,防止容器之間互相干擾。
  2. Namespaces:命名空間機制是用來隔離容器之間的運行環境的。每個容器都有自己獨立的網絡、進程、文件系統等環境,容器之間互相看不到對方的內容,從而確保了容器的隔離性。

四、Docker 常用命令

(一)鏡像相關命令

  1. 列出本地主機上的鏡像
docker images

此命令會列出鏡像的倉庫源、標簽版本號、鏡像 ID、創建時間和大小等信息。
2. 搜索鏡像

docker search [OPTIONS] 鏡像名字

例如:

docker search mysql

可以使用 --limit 參數只列出指定數量的鏡像,如:

docker search --limit 5 redis
  1. 拉取(下載)鏡像
docker pull 某個XXX鏡像名字[:TAG]

如果沒有指定 TAG,則默認拉取最新版,等價于 docker pull 鏡像名字:latest
4. 刪除鏡像
- 刪除單個鏡像:

docker rmi -f 鏡像ID
- 刪除多個鏡像:
docker rmi -f 鏡像名1:TAG 鏡像名2:TAG
- 刪除全部鏡像:
docker rmi -f $(docker images -qa)

(二)容器相關命令

  1. 新建 + 啟動命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

例如,使用 Ubuntu 鏡像創建一個名為 mycontainer 的容器并在后臺運行:

docker run -d --name mycontainer ubuntu
  1. 查看正在運行的容器
docker ps

如果想查看包括已停止的容器,可以使用:

docker ps -a
  1. 進入容器
docker exec -it <容器名或容器ID> /bin/bash

這將啟動容器內的 Bash shell,讓你能夠與容器交互。
4. 停止容器

docker stop <容器名或容器ID>
  1. 啟動已停止的容器
docker start <容器名或容器ID>
  1. 重啟容器
docker restart <容器名或容器ID>
  1. 刪除容器
docker rm <容器名或容器ID>

如果要刪除運行狀態的容器,可以使用 -f 參數強制刪除:

docker rm -f <容器名或容器ID>

(三)其他常用命令

  1. 查看 Docker 版本
docker --version
  1. 查看 Docker 系統信息
docker info

五、Docker 的應用場景

(一)應用隔離

Docker 通過容器技術實現了操作系統級別的虛擬化,讓應用和服務能在隔離的環境中運行,從而提供了一種輕量級的、可重復的、便攜式的應用隔離解決方案。這使得開發者和系統管理員能夠在不同的環境中快速部署和擴展應用,同時避免了因為環境依賴而產生的沖突問題。

  • 環境一致性的保障:當應用在開發、測試和生產等不同環境中遷移時,Docker 能確保環境的一致性。容器內包含了運行應用所需的所有依賴,確保應用在開發和部署過程中的環境一致性。
  • 容器與底層基礎設施的隔離:Docker 容器與宿主操作系統之間提供了一個清晰的界限,減少了與底層基礎設施的耦合。這讓 Docker 在不同的操作系統和云平臺上具有很好的可移植性。

(二)微服務架構

在微服務架構中,應用被分解成許多小型、自治的服務。Docker 提供的輕量級容器,非常適合微服務架構,每個微服務可以打包在單獨的容器中進行部署、運行和管理。

  • 支持服務的獨立性與擴展性:每個微服務可以放在單獨的容器中,并且相互之間通過定義良好的 API 通訊。在需要時,可以獨立地擴展或更新某個特定服務的容器而不影響其他服務。
  • 服務發現與負載均衡:在微服務架構中,Docker 容器需要能夠自動發現其他服務容器并與之通訊。此外,根據流量和負載的變化自動進行負載均衡也是微服務架構常見的需求。

(三)持續集成與部署(CI/CD)

持續集成與持續部署是現代軟件開發的重要實踐,Docker 天然適配 CI/CD 流程,使軟件開發的每一步都更加高效和自動化。

  • 流程標準化與自動化:Docker 容器可以確保應用在任何地方都以相同的方式運行,這一點對于自動化測試和部署至關重要。通過容器化,可以簡化構建、測試和部署流程。
  • 持續交付的便捷性:Docker 容器的快速啟動和停止特性使得新版本的應用能夠迅速部署和回滾,從而加速持續交付的周期。

(四)開發測試環境的一致性

Docker 為開發人員和測試人員提供了一個與生產環境盡可能相符的環境,這減少了開發和測試中常見的環境差異問題。

  • 快速搭建和拆除環境:使用 Docker 可以快速啟動或銷毀用于開發和測試的環境,提高了開發與測試的效率。
  • 多環境并行運行:Docker 允許在同一臺機器上運行多個不同配置或不同版本的應用環境,開發者可以使用 Docker 同時處理多個任務或測試多個版本的代碼。

(五)應用遷移和優化

Docker 提供了一種簡便的方式,使現有的傳統應用可以更容易地遷移到現代的基礎設施平臺上,比如云環境,同時實現資源利用的優化。

  • 促進應用的云遷移:Docker 容器可以在云環境和數據中心無縫遷移,這幫助企業輕松實現混合云或多云策略。
  • 效率與性能的提升:通過 Docker,可低成本地實現負載調度和管理,優化系統的資源分配和利用,減少不必要的資源浪費。

六、Docker 帶來的好處

(一)環境一致性

Docker 通過將應用程序及其所有依賴項打包到一個容器中,確保了從開發到生產的環境一致性。這減少了因環境配置不同而導致的問題,提高了應用的可靠性。同時,傳統的軟件部署方法需要在目標環境中手動配置和安裝軟件,而 Docker 通過簡單的命令(如 docker run)即可啟動預配置好的容器,大大簡化了配置工作,降低了出錯的可能性。

(二)快速部署

與傳統虛擬機相比,Docker 容器的啟動速度更快。虛擬機需要完整地啟動一個操作系統,而 Docker 容器在幾秒鐘內即可啟動,這使得部署過程更加迅速和高效。在災難恢復場景中,Docker 支持容器級別的快照和備份,可以在任何時刻保存應用的狀態,并在需要時快速恢復到該狀態,保障了業務連續性。

(三)提高資源利用率

Docker 使用容器技術與宿主機共享內核但隔離其他資源,這使得 Docker 容器非常輕量級,能夠在同一硬件上運行更多實例,從而提高資源利用率。相比于傳統虛擬機,Docker 占用更少的內存和 CPU 資源,在同一臺物理服務器上,可以部署更多的 Docker 容器,提升了部署密度和基礎設施效率。

(四)簡化管理操作

Docker 提供了一套完整的命令行工具和 API,使得容器的創建、監控、維護和更新變得簡單和自動化。這降低了管理復雜性,提高了運維效率。同時,Docker 容器鏡像可以打標簽并管理不同版本,這使得回滾和升級變得更加容易,并且可以跟蹤歷史記錄,類似于代碼的版本控制系統。

(五)提高安全性

Docker 確保每個容器都在自己的獨立環境中運行,與宿主機和其他容器完全隔離,這降低了安全風險。例如,一個容器中的應用程序被入侵或崩潰,不會影響在其他容器中運行的應用程序。此外,Docker 使用多種安全機制來增強容器的安全性,它將主機的敏感掛載點掛載為只讀,并使用寫時復制(copy - on - write)的文件系統來確保容器間不能讀取彼此的數據,還限制容器內的應用程序對主機進行系統調用,與 SELinux 和 AppArmor 等安全措施兼容。

七、總結

Docker 作為一種開源的容器化平臺,以其獨特的優勢在軟件開發和運維領域得到了廣泛的應用。通過本文的介紹,我們了解了 Docker 的安裝教程、原理圖、常用命令、應用場景以及帶來的好處。無論是在微服務的構建、應用的部署、開發流程的標準化還是跨環境的流暢遷移,Docker 都展現出了其不可替代的優勢。隨著技術的不斷發展,相信 Docker 將會在更多的領域發揮重要作用,為開發者和企業帶來更多的便利和價值。"

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

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

相關文章

Python 可迭代的對象、迭代器 和生成器(Sentence類第3版:生成器函數)

Sentence類第3版&#xff1a;生成器函數 實現相同功能&#xff0c;但卻符合 Python 習慣的方式是&#xff0c;用生成器函數代替 SentenceIterator 類。先看示例 14-5&#xff0c;然后詳細說明生成器函數。 示例 14-5 sentence_gen.py&#xff1a;使用生成器函數實現 Sentence…

5G自協商

好的&#xff0c;下面是一個基于裸機 C 環境的自協商實現示例代碼&#xff0c;支持 **最高 5G 并向下兼容**。這個代碼框架假設你使用的是 IEEE 802.3 規范下的 **MDIO** 接口和常見的 **Marvell PHY**&#xff08;或類似支持 5G/2.5G 的PHY&#xff09;。 c #include <std…

sublime 4200 激活

目錄 下載激活方式一&#xff1a;sublime 打開方式二&#xff1a;https://hexed.it 打開 下載 sublime官方下載 sublime_text_build_4200_x64.zip 激活 方式一&#xff1a;sublime 打開 1、復制 sublime_text.exe 為 sublime_text_activation.exe 2、直接使用 sublime_ 打開…

Ceph 和 MinIO

Ceph 和 MinIO 是兩種主流的分布式存儲系統&#xff0c;但它們的設計目標、架構和使用場景存在顯著差異。以下是清晰的對比解析&#xff1a; &#x1f9e9; 核心定位對比 維度CephMinIO定位統一存儲平臺&#xff08;塊/對象/文件&#xff09;純對象存儲&#xff08;S3兼容&…

cili3d筆記20 正交投影3d重建筆記1

正交視圖轉3d mostFrequentCluster.lines.forEach(line > {const [x1, y1, x2, y2] line;let xhat{x1,x2};let yhat{y1,y2};}); 沒考慮到側視圖 const clusters clusterLines(inputlines, 5);const lines3d:[number,number,number,number,number,number][][]const { mostM…

【Docker基礎】Docker容器生命周期管理:從創建到刪除的完整指南

目錄 1 容器生命周期概述 2 容器創建&#xff08;docker create&#xff09; 2.1 docker create命令詳解 2.2 創建流程解析 2.3 創建與運行的區別 3 容器啟動&#xff08;docker start&#xff09; 3.1 docker start命令詳解 3.2 啟動流程解析 3.3 啟動與運行的區別 …

Docker、Docker composer與Docker desktop

文章目錄 Docker、Docker composer與Docker desktop一、docker、docker composer、docker desktop1.1 Docker1.2 Docker Compose1.3 Docker Desktop1.4 三者之間的區別 二、docker desktop的安裝和換源2.1 前期準備WSL2 2.1 Docker Desktop 安裝下載 Docker Desktop安裝 Docker…

H5錄音、圖文視頻IndexDB儲存最佳實踐:用AI生成語音備忘錄

引言 早在大學的時候&#xff0c;我就期望做一款屬于自己的 APP&#xff0c;可惜那時不懂技術。現在有了技術&#xff0c;但卻沒有時間。好在 AI 的快速發展終于讓我完成了這個愿望。于是&#xff0c;我用半天的時間&#xff0c;用 AI 生成了一個純前端的 H5 程序&#xff1a;…

簡述C++ nlohmann/json 庫

目錄 JSON概述 nlohmann/json 庫的使用 創建json數組/對象 字符串解析&#xff08;parse反序列化&#xff09; 數據訪問 序列化 文件讀寫 JSON概述 JSON(JavaScrip Object Notation)是一種輕量級、跨語言的數據交換格式。它基于 ECMAScript 子集&#xff0c;以獨立于編程…

定制開發開源AI智能名片與S2B2C商城小程序的內容分發體系構建:基于“1+N“素材復用模型的創新實踐

摘要&#xff1a;在數字內容爆炸式增長的當下&#xff0c;本文針對內容分發效率低下的行業痛點&#xff0c;提出基于"定制開發開源AI智能名片S2B2C商城小程序"的一體化解決方案。通過構建"1篇長文10條長視頻20條短視頻10個平臺"的素材復用公式&#xff0c;…

c++26新功能—hive容器

一、容器的演進 科學進步的過程一般來說都是從先解決常用的、迫切的問題開始&#xff0c;然后再逐步解決一些少見不迫切的問題&#xff0c;直到最終解決到認知程度內的諸多問題。舉一個網上的例子&#xff0c;以前說咱們無法生產水筆的尖頭上的鋼球&#xff0c;其實這對于國內…

Kafka 源碼剖析:消息存儲與協議實現(二)

四、協議實現機制探秘 4.1 生產者協議 4.1.1 消息發送流程 Producer 在向 Kafka 集群發送消息時&#xff0c;首先會根據分區策略選擇目標分區 。常見的分區策略有輪詢、按消息鍵的哈希值分區以及自定義分區策略 。如果生產者在發送消息時指定了分區號&#xff0c;那么消息就…

Vue.js 與 TypeScript:最佳實踐

1. 引言 Vue.js 是一個漸進式、靈活的 JavaScript 框架&#xff0c;廣泛用于構建用戶界面和單頁應用&#xff08;SPA&#xff09;。而 TypeScript 是 JavaScript 的一個超集&#xff0c;添加了靜態類型和其他高級特性。將兩者結合使用&#xff0c;可以幫助開發者構建更具可維護…

webpack5 css-loader:從基礎到原理

webpack 處理樣式 webpack本身是不能識別樣式資源的&#xff0c;需要借助Loader來幫助webpack解析樣式資源&#xff0c;樣式資源包括但不限于css/less/sass/scss/styl 未使用樣式處理加載器前 運行webpack打包命令 bash npx webpack報錯信息如圖&#xff0c;提示無法識別css…

【GESP】C++三級練習 luogu-B2096 直方圖

GESP C三級練習&#xff0c;一維數組練習&#xff0c;難度★★☆☆☆。 題目題解詳見&#xff1a;【GESP】C三級練習 luogu-B2096 直方圖 | https://www.coderli.com/gesp-3-luogu-b2096/ 【GESP】C三級練習 luogu-B2096 直方圖 | OneCoderGESP C三級練習&#xff0c;一維數組…

【網站內容安全檢測】之2:從網站所有URL頁面中提取所有外部及內部域名信息

還沒寫成Go的&#xff0c;用Python吧&#xff0c;稍微慢一點 依賴內容&#xff08;安裝命令pip install -r requirements.txt) requirements.txt aiohttp beautifulsoup44.12.2 tqdm4.66.1 redis5.2.1 motor3.3.1 pymongo4.6.0 chardet提取域名的程序 domain_extractor.py …

【LLaMA-Factory 實戰系列】四、API 篇 - 部署推理服務與批量調用實戰

【LLaMA-Factory 實戰系列】四、API 篇 - 部署推理服務與批量調用實戰 1. 引言2. 推理后端的選擇與對比3. 部署 API 推理服務3.1 創建 API 配置文件3.2 啟動 API 服務3.3 探索交互式 API 文檔 4. 編寫 Python 腳本進行批量調用4.1 準備工作4.2 批量調用腳本4.3 運行腳本并查看結…

C++工廠模式的作用(工廠方法、Factory Method、Factory Pattern)

文章目錄 代碼示例工廠的作用1. 對象創建的封裝 &#x1f3ed;2. 解耦客戶端和具體類 &#x1f517;3. 統一的創建入口 &#x1f6aa;4. 隱藏實現細節 &#x1f3ad; 在這個項目中的具體體現總結 代碼示例 https://gitee.com/arnold_s/my-learning-test/tree/master/20250610_…

9-C#修改任務管理的名稱

C#修改任務管理的名稱

Fisco Bcos學習 - 搭建第一個區塊鏈網絡

文章目錄 一、前言二、環境準備三、安裝依賴在 macOS 上安裝依賴在 Ubuntu 上安裝依賴在 CentOS 上安裝依賴 四、創建操作目錄并下載安裝腳本五、搭建單群組 4 節點聯盟鏈六、啟動 FISCO BCOS 鏈七、檢查進程八、檢查日志輸出 在數字化時代&#xff0c;區塊鏈技術正逐漸成為推動…