“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 run
、docker build
、docker 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 下的
vim
、grep
等工具來編輯和處理 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