科普:“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 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
相关文章:
科普:“Docker Desktop”和“Docker”以及“WSL”
“Docker Desktop”和“Docker”这两个概念既有紧密联系,又存在一定区别: 一、联系 核心功能同源:Docker Desktop 本质上是基于 Docker 核心技术构建的。Docker 是一个用于开发、部署和运行应用程序的开源平台,它利用容器化技术…...
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.保存备用。 结束。...
Unity FBXExport导出的FBX无法在Blender打开
将FBX转换为obj: Convert 3D models online - free and secure...
VSCode自定义快捷键和添加自定义快捷键按键到状态栏
VSCode自定义快捷键和添加自定义快捷键按键到状态栏 📄在VSCode中想实现快捷键方式执行某些指令操作,可以通过配置组合式的键盘按键映射来实现,另外一种方式就是将执行某些特定的指令嵌入在面板菜单上,在想要执行的时候࿰…...
hive迁移补数脚本细粒度 表名-分区唯一键
假设我通过对数脚本发现,这些表对不上。 假设检测出来是这样的(这些表存在于源端,但不存在目标端) 我们需要从源端迁移过去。 diff.txt ads_xx1 dt20250219 ads_xx2 dt20250217 ads_xx2 dt20250218 ads_xx2 dt20250…...
SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中,可以通过配置方法来控制访问权限。认证是实现授权的前提和基础,在执行授权操作前需要明确目标用户,只有明确目标用户才能明确它所具备的角色和权…...
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.默认…...
使用 Redis 实现 RBAC 权限管理
1. 什么是 RBAC? RBAC(Role-Based Access Control,基于角色的访问控制)是一种常见的权限管理模型,它通过用户(User)、角色(Role)、权限(Permissionÿ…...
正则表达式–断言
原文地址:正则表达式–断言 – 无敌牛 欢迎参观我的个人博客:正则表达式特殊字符 – 无敌牛 断言assertions 1、(?...):正向预查(positive lookahead),表示某个字符串后面应该跟着什么。但这个字符串本身…...
Python常见面试题的详解14
1. 从变量 A 中匹配 JSON 字符串 在处理文本数据时,有时需要从变量里找出其中的 JSON 字符串。JSON 字符串一般以 { 或 [ 开头,以 } 或 ] 结尾,但简单的正则匹配可能不够严谨,所以还需用 json 模块进行验证。 要点 利用正则表达…...
电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?
尽管 TPM 2.0 已经内置在许多新电脑中,但很多人并不知道如何激活这一功能,甚至完全忽略了它的存在。其实,只需简单的几步操作,你就能开启这项强大的安全特性,为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…...
QT之改变鼠标样式
QT改变鼠标图片 资源路径如下 代码实现 QPixmap customCursorPixmap(":/images/mouse.png");QCursor customCursor(customCursorPixmap);QWidget::setCursor(customCursor); // 可以设置为整个窗口或特定控件QWidget::setCursor(); // 设置为透明光标,…...
Node IO操作
文章目录 Node IO操作概述流的基本类型可读流读取模式可读流状态创建可读流使用可读流暂停和恢复绑定可写流 可写流创建可写流使用可写流关闭流缓冲数据 可读可写流转换流 Node IO操作 概述 在 Node.js 中,I/O(输入/输出)操作是异步的&…...
零基础进阶人工智能——发展史、核心技术、前沿应用与未来展望
引言:从科幻走向现实,人工智能不再遥远 人工智能(AI),曾经是科幻小说和电影中遥不可及的未来科技,如今已悄然渗透到我们生活的方方面面。从智能家居的语音助手,到医疗诊断的辅助系统࿰…...
ue----git局域网内部署裸仓库,别的机器进行访问
最近由于经常迁移项目到另一台机器上进行部署更新一点就要整个迁移 弄得麻烦了 就在网上学了一下这个方式 首先我们在想要建立裸仓库的电脑上找到一个文件夹放置我们的裸仓库 在此点击鼠标右键选择 open git bash here 输入命令 创裸仓库 git init --bare gitTestName.git…...
三、tsp学习笔记——屏幕移植
泰山派-6寸猫屏转接板 - 立创开源硬件平台 泰山派樱猫的教程,屏资料链接: https://pan.baidu.com/s/1pNAKH33r7LtZG6EwHJ-HNA?pwdnsde 提取码: nsde (不要浪费时间下载,没有用,下载gitee上的) leefei/tspi-disp-6…...
vue3-05reactive定义对象类型的响应式数据(不能进行基本类型数据的响应式)
1.前言 reactive定义对象类型的响应式数据(不能进行基本类型数据的响应式) 2.实践 2.1语法 const 代理对象 reactive(源对象) 接收一个对象(或数组),返回一个代理对象 (Proxy的实例对象,简称proxy对象) <script> import { reactive } from &qu…...
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与ChatGPT的对比分析
一 概述 1 DeepSeek DeepSeek是杭州深度求索(DeepSeek)官方推出的AI助手,免费体验与全球领先AI模型的互动交流。总参数达到6710亿的DeepSeek-V3大模型,多项性能指标对齐海外顶尖模型,用更快的速度、更加全面强…...
OpenAI Swarm 多智能体框架介绍
目录 一、什么是 Swarm ? 二、Swarn 使用方法 2.1 安装依赖 2.2 实例 本篇文章主要介绍下 OpenAI Swarm 多智能体框架。 一、什么是 Swarm ? Swarm 是 OpenAI 开源的一款多智能体框架,但 OpenAI 对 Swarm 的定位是教育性、实验性的框架&…...
华大MCU HC32F005端口GPIO控制失效问题
1. 问题来源:RS485通信时,且数据量大、持续运行一段时间后,发现RS485使能引脚没有得到释放,导致总线锁死,无法通信,影响到整个总线的设备。 2. 问题分析:1)经过测试和跟踪ÿ…...
Android今日头条的屏幕适配方案
今日头条的屏幕适配方案是一种基于动态调整设备密度(density)的适配方法,其核心原理是通过修改系统默认的屏幕密度参数,使得不同分辨率和尺寸的设备能够按照设计图的尺寸比例显示界面元素。以下是其核心原理与实现细节的总结&…...
抓包工具是什么?
抓包工具是一种用于捕获和分析网络数据包的软件或硬件设备。它可以帮助用户监控网络通信过程,查看网络中传输的数据内容、协议类型、源地址、目的地址等信息。以下是关于抓包工具的一些详细解释: 1. 主要功能 捕获数据包:抓包工具能够实时捕…...
微信小程序消息推送解密
package com.test.main.b2b;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Arrays;/*** author * version 1.0* description: 解谜微信小…...
【大模型系列篇】DeepSeek-R1如何通过强化学习有效提升大型语言模型的推理能力?
如何通过强化学习(RL)有效提升大型语言模型(LLM)的推理能力? 《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》由DeepSeek-AI团队撰写,主要介绍了他们开发的第一代…...
企业存储系统
一、概述 数字经济 人类通过大数据(数字化的知识与信息)的识别—选择—过滤—存储—使用,引导、实现资源的快速优化配置与再生,实现经济高质量发展的经济形态。 产业互联网推动发展 企业开始进行数字化转型,将传统…...
数据结构系列一:初识集合框架+复杂度
前言 数据结构——是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机专业的基础课程,但也是一门不太容易学好的课,它当中有很多费脑子的东西,之后在学习时,你若碰到了困惑或不解的地方 都是很正常的反应&…...
