科普:“Docker Desktop”和“Docker”以及“WSL”

“Docker Desktop”和“Docker”這兩個概念既有緊密聯系,又存在一定區別:

一、聯系

  • 核心功能同源:Docker Desktop 本質上是基于 Docker 核心技術構建的。Docker 是一個用于開發、部署和運行應用程序的開源平臺,它利用容器化技術將應用及其依賴打包成獨立的容器,實現應用的隔離和快速部署。Docker Desktop 繼承了 Docker 的這些核心功能,為用戶提供了便捷的方式來使用 Docker 的各項特性。
  • 操作對象一致:無論是使用 Docker Desktop 還是直接使用 Docker 命令行工具,操作的對象都是 Docker 鏡像和容器。用戶可以通過它們來拉取鏡像、創建容器、管理容器的生命周期等操作。

二、區別

定義與定位
  • Docker:是一個廣泛的概念,指的是整個 Docker 生態系統,包括 Docker 引擎(負責創建和管理容器的核心組件)、Docker 鏡像、Docker 容器以及相關的命令行工具和 API 等。它是一個跨平臺的開源項目,旨在提供一種標準化的方式來打包、分發和運行應用程序。
  • Docker Desktop:是 Docker 官方為桌面操作系統(如 Windows 和 macOS)專門開發的一款應用程序。它為用戶提供了一個圖形化界面,簡化了 Docker 的安裝和使用過程,使得非專業技術人員也能輕松使用 Docker 技術。
運行環境
  • Docker:可以在多種操作系統上運行,包括 Linux、Windows Server 和 macOS 等。在 Linux 系統中,Docker 通常以服務的形式運行,可以通過命令行工具進行操作。在 Windows Server 上,也可以安裝 Docker 引擎來支持容器化應用的部署。
  • Docker Desktop:主要針對桌面用戶,目前支持 Windows 10/11 以及 macOS 系統。它通過在桌面系統上模擬 Linux 環境,使得用戶可以在本地開發和測試基于 Docker 的應用程序。
使用方式
  • Docker:主要通過命令行工具進行操作,用戶需要熟悉一系列的 Docker 命令,如 docker rundocker builddocker ps 等。對于有一定技術基礎的開發者和系統管理員來說,使用命令行可以更靈活地控制 Docker 的各項功能。
  • Docker Desktop:除了支持命令行操作外,還提供了圖形化界面。用戶可以通過直觀的界面來管理鏡像、容器、網絡等資源,進行容器的啟動、停止、刪除等操作,降低了使用 Docker 的門檻。
功能特性
  • Docker:提供了豐富的命令行選項和 API,支持高級的容器管理和編排功能,如使用 Docker Compose 進行多容器應用的編排,使用 Docker Swarm 進行集群管理等。
  • Docker Desktop:除了基本的 Docker 功能外,還提供了一些額外的特性,如資源管理、鏡像管理界面、Kubernetes 集成等。例如,用戶可以通過 Docker Desktop 的界面輕松配置和管理本地的 Kubernetes 集群,方便進行容器化應用的開發和測試。

三、WSL

“適用于 Linux 的 Windows 子系統”(Windows Subsystem for Linux,簡稱 WSL)是微軟開發的一項功能,允許用戶在 Windows 操作系統上原生運行 Linux 二進制可執行文件,而無需使用傳統的虛擬機或雙啟動設置。
當你在 Windows 系統上安裝 Docker Desktop 時,如果檢測到系統中沒有安裝 WSL 2,Docker Desktop 的安裝程序通常會提示你安裝 WSL 2。它會提供相關的指引和鏈接,引導你完成 WSL 2 的安裝步驟。
Docker 命令既可以在 Windows 系統中執行,也能在 WSL 中執行,但在不同環境下執行存在一些區別

  • Windows 系統:可以通過 PowerShell 或命令提示符(CMD)來執行 Docker 命令。Docker Desktop 安裝后會在 Windows 環境中集成 Docker 客戶端,使得用戶能夠直接在 Windows 的命令行工具里使用 Docker 功能。
  • WSL:WSL 提供了一個接近原生 Linux 的環境,在安裝了 Docker 客戶端后,就可以在 WSL 的終端中執行 Docker 命令。
性能表現
  • Windows 系統:在 Windows 上執行 Docker 命令時,由于 Docker 容器實際上是運行在 WSL 2 虛擬機或 Hyper - V 虛擬機中,Windows 命令行與容器之間的交互需要經過一定的轉換和通信,可能會存在一些性能損耗。
  • WSL:在 WSL 中執行 Docker 命令,因為 WSL 本身就是一個 Linux 環境,與 Docker 容器的兼容性更好,能夠提供更接近原生 Linux 的性能。例如,在構建大型 Docker 鏡像時,在 WSL 中執行 docker build 命令通常會比在 Windows 命令行中更快。
# 在 WSL 中構建一個簡單的 Docker 鏡像
cd /path/to/dockerfile
docker build -t my - image:latest .
文件路徑處理
  • Windows 系統:Windows 使用反斜杠 \ 作為路徑分隔符,而 Docker 命令通常期望使用正斜杠 /。在 Windows 命令行中執行 Docker 命令時,如果涉及到文件路徑,需要將路徑中的反斜杠轉換為正斜杠,或者使用雙反斜杠 \\。例如,掛載 Windows 上的一個目錄到 Docker 容器中:
docker run -v C:/Users/User/Documents:/data my - image
  • WSL:WSL 使用 Linux 的路徑格式,即正斜杠 /。在 WSL 中執行 Docker 命令時,文件路徑的處理更加自然,與在原生 Linux 系統中一致。例如,將 WSL 中的一個目錄掛載到 Docker 容器中:
docker run -v /home/user/data:/data my - image
環境變量和配置
  • Windows 系統:Windows 有自己的環境變量和配置方式,在 Windows 命令行中設置的環境變量可能需要特殊處理才能傳遞給 Docker 容器。例如,在 PowerShell 中設置環境變量并傳遞給 Docker 容器:
$env:MY_VARIABLE = "value"
docker run -e MY_VARIABLE=$env:MY_VARIABLE my - image
  • WSL:WSL 遵循 Linux 的環境變量和配置規則,設置和傳遞環境變量更加簡單直接。例如,在 WSL 的終端中設置環境變量并傳遞給 Docker 容器:
export MY_VARIABLE="value"
docker run -e MY_VARIABLE=$MY_VARIABLE my - image
工具兼容性
  • Windows 系統:某些基于 Windows 的工具可能與 Docker 命令結合使用時存在兼容性問題。例如,一些 Windows 專用的文本編輯器或腳本語言可能在處理 Docker 相關的文件(如 Dockerfile)時不如在 Linux 環境中方便。
  • WSL:WSL 提供了豐富的 Linux 工具和命令行實用程序,與 Docker 生態系統的兼容性更好。可以直接使用 Linux 下的 vimgrep 等工具來編輯和處理 Docker 相關的文件和配置。例如,使用 vim 編輯 Dockerfile:
vim Dockerfile

四、Docker 命令

以下為你介紹不同應用場景下常見的 Docker 命令:在windows的命令行符下,帶上docker,即是Docker 命令。

鏡像操作命令
拉取鏡像

從 Docker 鏡像倉庫中下載指定的鏡像。

docker pull [鏡像名稱:標簽]

示例:拉取 Ubuntu 22.04 版本的鏡像

docker pull ubuntu:22.04
列出本地鏡像

查看本地已下載的所有 Docker 鏡像。

docker images
刪除本地鏡像

刪除本地不需要的 Docker 鏡像。

docker rmi [鏡像 ID 或鏡像名稱:標簽]

示例:刪除剛才拉取的 Ubuntu 22.04 鏡像

docker rmi ubuntu:22.04
容器操作命令
創建并運行容器

基于指定的鏡像創建一個新的容器,并可以讓它在后臺或前臺運行。

# 在前臺運行容器
docker run [鏡像名稱:標簽] [要執行的命令]
# 在后臺運行容器,并指定容器名稱和端口映射
docker run -d --name [容器名稱] -p [主機端口]:[容器端口] [鏡像名稱:標簽]

示例 1:以前臺方式運行一個 Ubuntu 容器并執行 echo 命令

docker run ubuntu:22.04 echo "Hello, Docker!"

示例 2:以后臺方式運行一個 Nginx 容器,并將主機的 8080 端口映射到容器的 80 端口

docker run -d --name my-nginx -p 8080:80 nginx
列出運行中的容器

查看當前正在運行的 Docker 容器。

docker ps

若要查看所有容器(包括已停止的),可使用以下命令:

docker ps -a
停止容器

停止一個正在運行的容器。

docker stop [容器 ID 或容器名稱]

示例:停止剛才創建的 my - nginx 容器

docker stop my-nginx
啟動已停止的容器

讓一個已經停止的容器重新啟動。

docker start [容器 ID 或容器名稱]

示例:重新啟動 my - nginx 容器

docker start my-nginx
刪除容器

刪除一個已停止的容器。

docker rm [容器 ID 或容器名稱]

示例:刪除 my - nginx 容器

docker rm my-nginx
進入正在運行的容器

在容器運行時,進入容器內部的命令行環境。

docker exec -it [容器 ID 或容器名稱] [要執行的命令,一般為 /bin/bash 或 /bin/sh]

示例:進入一個正在運行的 Ubuntu 容器的命令行環境

docker exec -it my-ubuntu-container /bin/bash
其他常用命令
查看容器日志

查看容器的運行日志,方便排查問題。

docker logs [容器 ID 或容器名稱]

示例:查看 my - nginx 容器的日志

docker logs my-nginx
查看容器資源使用情況

查看容器的 CPU、內存、網絡等資源使用情況。

docker stats [容器 ID 或容器名稱]

示例:查看 my - nginx 容器的資源使用情況

docker stats my-nginx

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

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

相關文章

Flutter 網絡請求與數據處理:從基礎到單例封裝

Flutter 網絡請求與數據處理:從基礎到單例封裝 在 Flutter 開發中,網絡請求是一個非常常見的需求,比如獲取 API 數據、上傳文件、處理分頁加載等。為了高效地處理網絡請求和數據管理,我們需要選擇合適的工具并進行合理的封裝。 …

虛擬表格實現全解析

在數據展示越來越復雜的今天,大量數據的渲染就像是“滿漢全席”——如果把所有菜肴一次性擺上桌,既浪費資源也讓人眼花繚亂。幸運的是,我們有兩種選擇: 自己動手:通過二次封裝 Element Plus 的表格組件,實…

QT 讀寫鎖

一、概述 1、讀寫鎖是一種線程同步機制,用于解決多線程環境下的讀寫競爭問題。 2、讀寫鎖允許多個線程同時獲取讀鎖(共享訪問),但只允許一個線程獲取寫鎖(獨占訪問)。 3、這種機制可以提高并發性能&…

2025 vue3面試題匯總,通俗易懂

一、基礎概念與核心特性 1. Vue3 相比 Vue2 的改進(通俗版) 問題:Vue3 比 Vue2 好在哪? 答案: 更快: Proxy 代理:Vue2 的響應式像“逐個監聽保險箱”(每個屬性單獨監聽&#xff0…

第5章:在LangChain中如何使用AI Services

這篇文章詳細介紹了 LangChain4j 中的 AI Services 概念,展示了如何通過高層次的抽象來簡化與大語言模型(LLM)的交互。AI Services 的核心思想是隱藏底層復雜性,讓開發者專注于業務邏輯,同時支持聊天記憶、工具調用和 …

二叉樹(數據結構)

二叉樹 二叉樹也是用過遞歸定義的結構 先序遍歷又稱前序遍歷 ?? ?? 按照先序遍歷的方法去手算處理這個二叉樹 ?? 先A B C 再 A B D E C(也就是把B換成BDE再放進去) 再 A B D E C F 看這個插入的方法要掌握像二叉樹這樣向一個…

機器學習筆記——常用損失函數

大家好,這里是好評筆記,公主號:Goodnote,專欄文章私信限時Free。本筆記介紹機器學習中常見的損失函數和代價函數,各函數的使用場景。 熱門專欄 機器學習 機器學習筆記合集 深度學習 深度學習筆記合集 文章目錄 熱門…

Wireshark使用介紹

文章目錄 Wireshark介紹Wireshark使用工作模式介紹1. 混雜模式(Promiscuous Mode)2. 普通模式(Normal Mode)3. 監視模式(Monitor Mode) 界面分區捕獲過濾器語法基本語法邏輯運算符高級語法使用示例捕獲過濾…

#滲透測試#批量漏洞挖掘#暢捷通T+SQL注入漏洞

免責聲明 本教程僅為合法的教學目的而準備,嚴禁用于任何形式的違法犯罪活動及其他商業行為,在使用本教程前,您應確保該行為符合當地的法律法規,繼續閱讀即表示您需自行承擔所有操作的后果,如有異議,請立即停止本文章讀。 目錄 一、漏洞全景解析 1. 高危漏洞案例庫 2.…

【小游戲】C++控制臺版本俄羅斯輪盤賭

制作團隊:洛谷813622(Igallta) 989571(_ayaka_) Mod:_ayaka_ 雙人模式:Igallta 公告: 原先的9.8改名為 Alpha 1.0,以后每次更新都增加 0.1。 Alpha 1.11 改為 Beta 1…

nvm安裝、管理node多版本以及配置環境變量【保姆級教程】

引言 不同的項目運行時可能需要不同的node版本才可以運行,由于來回進行卸載不同版本的node比較麻煩;所以需要使用node工程多版本管理。 本人在配置時,通過網絡搜索教程,由于文章時間過老,或者文章的互相拷貝導致配置時…

框架--Mybatis3

一.特殊符號處理 < < > > " &quot; &apos; & &amp; 除了可以使用上述轉義字符外&#xff0c;還可以使<![CDATA[ ]]>用來包裹特殊字符。 二.mybatis 一級緩存二級緩存 1.為什么緩存 緩存&#xff1a;數據緩存&#xf…

純新手教程:用llama.cpp本地部署DeepSeek蒸餾模型

0. 前言 llama.cpp是一個基于純C/C實現的高性能大語言模型推理引擎&#xff0c;專為優化本地及云端部署而設計。其核心目標在于通過底層硬件加速和量化技術&#xff0c;實現在多樣化硬件平臺上的高效推理&#xff0c;同時保持低資源占用與易用性。 最近DeepSeek太火了&#x…

Netty入門詳解

引言 Netty 是一個基于 Java 的高性能、異步事件驅動的網絡應用框架&#xff0c;用于快速開發可維護的高性能網絡服務器和客戶端。它提供了一組豐富的 API&#xff0c;使得開發人員能夠輕松地處理各種網絡協議&#xff0c;如 TCP、UDP 等&#xff0c;并且支持多種編解碼方式&a…

物聯網簡介集合

物聯網&#xff08;IoT&#xff09;指的是物理設備&#xff08;如電器和車輛&#xff09;之間的互聯互通。這些設備嵌入了軟件、傳感器和連接功能&#xff0c;使其能夠相互連接并交換數據。這項技術實現了從龐大的設備網絡中收集和共享數據&#xff0c;為打造更高效、自動化的系…

【分布式理論11】分布式協同之分布式事務(一個應用操作多個資源):從剛性事務到柔性事務的演進

文章目錄 一. 什么是分布式事務&#xff1f;二. 分布式事務的挑戰三. 事務的ACID特性四. CAP理論與BASE理論1. CAP理論1.1. 三大特性1.2. 三者不能兼得 2. BASE理論 五. 分布式事務解決方案1. 兩階段提交&#xff08;2PC&#xff09;2. TCC&#xff08;Try-Confirm-Cancel&…

【Quest開發】全身跟蹤

軟件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最終效果&#xff1a;能像meta的操作室沉浸場景一樣根據頭盔移動來推斷用戶姿勢&#xff0c;實現走路、蹲下、手勢匹配等功能 需要借助UnityMovement這個包 GitHub …

AI全棧開發_人工智能AI大模型 Prompt提示詞工程詳解(全方位介紹及運用)

AI引領的第四次工業革命正席卷而來&#xff0c;如何精準把握這一歷史性的機遇&#xff0c;將成為我們這一代人不容忽視且需深入思考與積極行動的重要課題。未來幾年AI將會像計算機一樣快速普及&#xff0c;面對這一歷史性的第一波紅利&#xff0c;你是否已準備好把握機遇&#…

小米平板怎么和電腦共享屏幕

最近嘗試使用小米平板和電腦屏幕分屏互聯 發現是需要做特殊處理的&#xff0c;需要下載一款電腦安裝包&#xff1a;小米妙享 關于這個安裝包&#xff0c;想吐槽的是&#xff1a; 沒有找到官網渠道&#xff0c;是通過其他網絡方式查到下載的 不附錄鏈接&#xff0c;原因是因為地…

java | MyBatis-plus映射和golang映射對比

文章目錄 Java實體類和數據庫的映射1.默認駝峰命名規則2.自定義字段映射3.關閉駝峰命名規則4.JSON序列化映射 Golang1. 結構體與表的映射2. 字段與列的映射3. 關聯關系映射4. 其他映射相關標簽 這篇也是做數據庫映射方面的對比&#xff1a; Java 實體類和數據庫的映射 1.默認…