科普:“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.mzph.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.默认…