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

news2025/2/21 20:20:00

“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.coloradmin.cn/o/2302097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react实例与总结(二)

目录 一、脚手架基础语法(16~17) 1.1、hello react 1.2、组件样式隔离(样式模块化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相关API 2.1.1、内置组件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…

巧用GitHub的CICD功能免费打包部署前端项目

近年来,随着前端技术的发展,前端项目的构建和打包过程变得越来越复杂,占用的资源也越来越多。我有一台云服务器,原本打算使用Docker进行部署,以简化操作流程。然而,只要执行sudo docker-compose -f deploy/…

使用 DeepSeek 生成商城流程图

步骤 1.下载 mermaid 2.使用 DeepSeek 生成 mermaid 格式 3.复制内容到 4.保存备用。 结束。

VSCode自定义快捷键和添加自定义快捷键按键到状态栏

VSCode自定义快捷键和添加自定义快捷键按键到状态栏 📄在VSCode中想实现快捷键方式执行某些指令操作,可以通过配置组合式的键盘按键映射来实现,另外一种方式就是将执行某些特定的指令嵌入在面板菜单上,在想要执行的时候&#xff0…

Ubuntu22.04 - gflags的安装和使用

目录 gflags 介绍gflags 安装gflags 使用 gflags 介绍 gflags 是Google 开发的一个开源库,用于 C应用程序中命令行参数的声明、定义和解析。gflags 库提供了一种简单的方式来添加、解析和文档化命令行标志(flags),使得程序可以根据不同的运行时配置进行调整。 它具…

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

文章目录 Java实体类和数据库的映射1.默认驼峰命名规则2.自定义字段映射3.关闭驼峰命名规则4.JSON序列化映射 Golang1. 结构体与表的映射2. 字段与列的映射3. 关联关系映射4. 其他映射相关标签 这篇也是做数据库映射方面的对比: Java 实体类和数据库的映射 1.默认…

正则表达式–断言

原文地址:正则表达式–断言 – 无敌牛 欢迎参观我的个人博客:正则表达式特殊字符 – 无敌牛 断言assertions 1、(?...):正向预查(positive lookahead),表示某个字符串后面应该跟着什么。但这个字符串本身…

电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?

尽管 TPM 2.0 已经内置在许多新电脑中,但很多人并不知道如何激活这一功能,甚至完全忽略了它的存在。其实,只需简单的几步操作,你就能开启这项强大的安全特性,为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…

QT之改变鼠标样式

QT改变鼠标图片 资源路径如下 代码实现 QPixmap customCursorPixmap(":/images/mouse.png");QCursor customCursor(customCursorPixmap);QWidget::setCursor(customCursor); // 可以设置为整个窗口或特定控件QWidget::setCursor(); // 设置为透明光标&#xff0c…

ue----git局域网内部署裸仓库,别的机器进行访问

最近由于经常迁移项目到另一台机器上进行部署更新一点就要整个迁移 弄得麻烦了 就在网上学了一下这个方式 首先我们在想要建立裸仓库的电脑上找到一个文件夹放置我们的裸仓库 在此点击鼠标右键选择 open git bash here 输入命令 创裸仓库 git init --bare gitTestName.git…

PaddlePaddle的OCR模型转onnx-转rknn模型_笔记4

一、PaddlePaddle的OCR模型转onnx 1、首先建立一个新的虚拟环境 conda create -n ppocr python3.10 -y conda activate ppocr 2、进入paddlepaddle官网输入以下指令安装paddlepaddle GPU版本 (我的cuda版本是11.8,根据你电脑装合适版本) pip instal…

【大模型系列篇】DeepSeek-R1如何通过强化学习有效提升大型语言模型的推理能力?

如何通过强化学习(RL)有效提升大型语言模型(LLM)的推理能力? 《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》由DeepSeek-AI团队撰写,主要介绍了他们开发的第一代…

企业存储系统

一、概述 数字经济 人类通过大数据(数字化的知识与信息)的识别—选择—过滤—存储—使用,引导、实现资源的快速优化配置与再生,实现经济高质量发展的经济形态。 产业互联网推动发展 企业开始进行数字化转型,将传统…

数据结构系列一:初识集合框架+复杂度

前言 数据结构——是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机专业的基础课程,但也是一门不太容易学好的课,它当中有很多费脑子的东西,之后在学习时,你若碰到了困惑或不解的地方 都是很正常的反应&…

Linux系统编程学习 NO.14——缓冲区的概念、模拟实现Cstdio库

用户缓冲区 先介绍一下关于用户缓冲区的周边知识。 fread和fwrite的返回值 谈一谈fread和fwrite的返回值,如果写入/读取文件成功,fread或fwrite的返回值指的是实际写入/读取的内存块数量(实际的nmemb的大小)。假如fwrite写入的size是5字节,…

某手sig3-ios算法 Chomper黑盒调用

Chomper-iOS界的Unidbg 最近在学习中发现一个Chomper框架,Chomper 是一个模拟执行iOS可执行文件的框架,类似于安卓端大名鼎鼎的Unidbg。 这篇文章使用Chomper模拟执行某手的sig3算法,初步熟悉该框架。这里只熟悉模拟执行步骤以及一些常见的…

MySQL版本选择与安装

MySQL版本选择与安装 MySQL 5.5 优点: 稳定性:5.5版本是长期支持(LTS)版本,因此它非常稳定,被广泛部署在生产环境中。 兼容性:与旧版本的MySQL和各种应用程序有很好的兼容性。 缺点: 过时:…

【飞行器原理学习】——1. 机翼及机翼参数

飞行器原理学习——1.机翼 一、 概述 飞机的各种机翼是飞机的控制面 通过铰链、钢索、液压等方式连接在机身上 操纵面运动时,会改变机翼的弧度和形状,使流经的空气发生偏转,从而影响空气动力的大小。使飞机围绕着3轴运动 二、机翼的操纵面…

TS语言自定义脚手架

初始化 新建文件夹初始化命令 npm init -ytsc --initnpm i types/nodenpm i typescript# 处理别名npm i -D tsc-alias -y 表示选项都为yes 安装ts相关依赖 新建相关文件 bin 文件夹 src文件夹 commands 文件夹 (命令 utils 文件夹 (封装方法) index.t…

lab4 CSAPP:Cachelab

写在前面 最简单的一集 实验室分为两个部分。在A部分中,实现一个缓存模拟器。在B部分中,编写一个矩阵针对高速缓存性能优化的转置功能。 感觉是比较经典的问题,之前在体系结构的课程中接触过,终于能通过lab实操一下了。 实验目…