“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