【Docker】WSL 2 上的 Docker 搭建和入门

▒ 目录 ▒

    • 🛫 导读
      • 开发环境
    • 1️⃣ 安装
      • 安装Docker Desktop for Windows
    • 2️⃣ 环境配置
    • 3️⃣ hello world
      • 第一次运行
      • 再次运行
      • 分析总结
    • 📖 参考资料

🛫 导读

开发环境

版本号描述
文章日期2023-12-14
操作系统Win11 - 22H222621.2715
WSL2
C:\Windows\System32>docker version
Client:Cloud integration: v1.0.35+desktop.5Version:           24.0.7API version:       1.43Go version:        go1.20.10Git commit:        afdd53bBuilt:             Thu Oct 26 09:08:44 2023OS/Arch:           windows/amd64Context:           defaultServer: Docker Desktop 4.26.0 (130397)Engine:Version:          24.0.7API version:      1.43 (minimum version 1.12)Go version:       go1.20.10Git commit:       311b9ffBuilt:            Thu Oct 26 09:08:02 2023OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.6.25GitCommit:        d8f198a4ed8892c764191ef7b3b06d8a2eeb5c7frunc:Version:          1.1.10GitCommit:        v1.1.10-0-g18a0cb0docker-init:Version:          0.19.0GitCommit:        de40ad0

1️⃣ 安装

首先安装WSL,可以参考文章《【WSL】Windows下的Linux子系统使用方法指南 https://blog.csdn.net/kinghzking/article/details/134984077》。
否则,启动Docker,会报下面的错误:
在这里插入图片描述

安装Docker Desktop for Windows

官网教程:https://docs.docker.com/desktop/install/windows-install/

  1. 双击 Docker Desktop Installer .exe 以运行安装程序。

  2. 出现提示时,请确保选择或不选择“配置”页上的“使用 WSL 2 而不是 Hyper-V”选项,具体取决于所选的后端。

    如果您的系统仅支持这两个选项之一,您将无法选择要使用的后端。

  3. 按照安装向导上的说明授权安装程序并继续安装。

  4. 安装成功后,选择**“关闭**”以完成安装过程。

  5. 如果管理员帐户与用户帐户不同,则必须将用户添加到 docker-users 组。

    • 管理员身份运行**“计算机管理”**,
    • 然后导航到 “本地用户和组” > “组”> docker-users
    • 单击鼠标右键将用户添加到组中。
    • 注销并重新登录以使更改生效。

2️⃣ 环境配置

  1. Docker Desktop安装后,从 Windows 开始菜单启动 Docker Desktop,然后从任务栏的隐藏图标菜单中选择 Docker 图标。 右键单击该图标以显示 Docker 命令菜单,然后选择“设置”。
    在这里插入图片描述
  1. 确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”。
    在这里插入图片描述
  1. 通过转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。
    并打开 WSL 发行版(小编只有一个选项 Ubuntu)
    在这里插入图片描述

3️⃣ hello world

关于Docker,可以找到很多教程,这里推荐《【狂神说Java】Docker最新超详细版教程通俗易懂 https://www.bilibili.com/video/BV1og4y1q7M4》,真的很细致,庖丁解牛。
本小节以hello-world为例,简单了解下什么是Docker。

第一次运行

在命令行中执行docker run hello-world,将显示下面的内容,其流程整理如下:

  1. 本地查找名为hello-world:latestimage(未找到)
  2. 服务器下载image,显示其信息。
  3. 执行Container(会创建一个Container)
  4. 打印了额外的说明信息
C:\Windows\System32>docker run hello-world
# 1. 本地查找名为`hello-world:latest`的`images`(未找到)
Unable to find image 'hello-world:latest' locally# 2. 服务器下载`image`,显示其信息。
latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:3155e04f30ad5e4629fac67d6789f8809d74fea22d4e9a82f757d28cee79e0c5
Status: Downloaded newer image for hello-world:latest# 3. 执行docker(会创建一个Container)
Hello from Docker!# 4. 打印了额外的说明信息
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

再次运行

在命令行中再次执行docker run hello-world,将显示下面的内容,内容与第一次不一样了。
其流程也发生了变换,整理如下:

  1. 本地查找名为hello-world:latestimage(找到了)
  2. 拉取本地image,创建一个新的Container。
  3. 执行新的Container
  4. 打印了额外的说明信息
docker run hello-worldHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

分析总结

  1. 两次执行只有一个image hello-world
    在这里插入图片描述
  1. 两次执行生成两个container,但是都使用的是同一个image hello-world,如下图:
    在这里插入图片描述

所以说,docker run 命令首先creates在指定映像上创建一个可写容器层,然后starts使用指定的命令。
如果想使用已经有的容器,执行docker start 容器Id或者 docker exec -it 容器Id /bin/bash命令。
效果如下:

C:\Windows\System32>docker start f8d2fef7a3f3e0e35319b5864dcf6ac1dc0e5b79a34dfa5d97c19de6adf2362b
f8d2fef7a3f3e0e35319b5864dcf6ac1dc0e5b79a34dfa5d97c19de6adf2362bC:\Windows\System32>docker exec -it f8d2fef7a3f3e0e35319b5864dcf6ac1dc0e5b79a34dfa5d97c19de6adf2362b  /bin/bash
Error response from daemon: Container f8d2fef7a3f3e0e35319b5864dcf6ac1dc0e5b79a34dfa5d97c19de6adf2362b is not runningC:\Windows\System32>docker logs -tf f8d2fef7a3f3e0e35319b5864dcf6ac1dc0e5b79a34dfa5d97c19de6adf2362b
2023-12-14T15:20:21.141914310Z
2023-12-14T15:20:21.142064937Z Hello from Docker!
2023-12-14T15:20:21.142072020Z This message shows that your installation appears to be working correctly.
2023-12-14T15:20:21.142077010Z
2023-12-14T15:20:21.142081638Z To generate this message, Docker took the following steps:
2023-12-14T15:20:21.142085977Z  1. The Docker client contacted the Docker daemon.

附一张docker run流程图:
在这里插入图片描述

📖 参考资料

  • 【WSL】Windows下的Linux子系统使用方法指南 https://blog.csdn.net/kinghzking/article/details/134984077
  • WSL 2 上的 Docker 远程容器入门 https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers
  • 【狂神说Java】Docker最新超详细版教程通俗易懂 https://www.bilibili.com/video/BV1og4y1q7M4
  • Windows系统 WSL安装 CentOS7 和docker https://www.jianshu.com/p/ed0d23e742d0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/223174.shtml

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

相关文章

【NTN 卫星通信】Starlink,卫星互联网的技术革命(一)

1. 什么是Starlink Starlink是由Elon Musk创立的私人太空探索公司SpaceX提供的卫星互联网服务。它旨在为世界上传统互联网服务速度慢或不可用的偏远地区提供价格合理的高速互联网。 为什么Starlink很重要?   Starlink之所以重要,是因为它有可能为数百万…

逆向获取某音乐软件的加密(js逆向)

本文仅用于技术交流,不得以危害或者是侵犯他人利益为目的使用文中介绍的代码模块,若有侵权请联系作者更改。 老套路,打开开发者工具,直接开始找到需要的数据位置,然后观察参数,请求头,cookie是…

【ET8框架入门】1.运行指南

主要学习网址 论坛地址为:https://et-framework.cn Git地址为:GitHub - egametang/ET: Unity3D Client And C# Server Framework 官方QQ群 : 474643097 多线程多进程框架设计-01预告_哔哩哔哩_bilibili 项目检出 检出项目切换到release8.0分支 Git…

零信任 SASE 办公安全解决方案:提升企业网络安全与灵活性

​零信任 SASE(Secure Access Service Edge)办公安全解决方案为企业带来了许多好处,相较于以前的解决方案有明显差异。这个方案的出现是为了应对企业面临的新的网络安全挑战和远程办公的需求。 1、统一的网络安全管理:SASE 将网络…

Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻、直播带货及免 费小程序商城搭建

1. 涉及平台 平台管理、商家端(pc端、手机端)、买家平台(h5/公众号、小程序、app端(ios/android)、微服务平台(业务服务) 2. 核心架构 spring cloud、spring boot、mybatis、redis 3. 前端框架…

Unity:Camera讲解之ClearFlags

Clear Flags四个选项讲解: 前三个都是常用的,第四个基本不会用。 skybox(天空盒): 主要是一种用于渲染游戏场景中天空的技术。它是一个包含6个纹理图片的立方体贴图,分别代表了从不同角度观察天空时所看到的前、后、上、下、左…

DevEco Studio 项目鸿蒙(HarmonyOS)资源引用(自定统和系统)

DevEco Studio 项目鸿蒙(HarmonyOS)资源引用(自定统和系统) 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、资源访问 HarmonyOS应用资源分为两类,一类是应用资源&…

C# WPF上位机开发(键盘绘图控制)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在软件开发中,如果存在canvas图像的话,一般有几种控制方法。一种是鼠标控制;一种是键盘控制;还有一…

.NET 8的正式发布,对Telerik开发工具意味着什么?

微软日前正式发布了.NET 8稳定版,这是一个长期支持(LTS)的版本,它可以使Android、Windows和macOS跨平台应用的开发过程高效流畅,同样的目标也驱使着Telerik UI不断进步和发展! Telerik DevCraft包含一个完整的产品栈来构建您下一个…

力扣二叉树--总结篇(2)

前言 总体回顾:11.18-12.14,中间有一个星期左右因为考试没有写题。37道题。 内容 这是第二阶段刷的题 从路径到构造二叉树,合并二叉树,再到二叉搜索树,公共祖先问题 看到二叉树,看到递归 都会想&#…

Navicat16 无限试用 亲测有效

Navicat16 无限试用 亲测有效 亲测有效!!! 吐槽下,有的用不了,有的是图片,更甚者还有收费的,6的一批 粘贴下面的代码,保存到桌面,命名为 trial-navicat16.bat echo off…

移动滑轨屏的运用是否对传统展览展示效果产生了哪些影响?

移动滑轨屏因其独特的展示外观和形式,也常被人们称为滑轨电视、电动滑轨,主要由滑动轨道、显示屏、感应装置、控制系统等组件结合实现,是一种解决了传统展览内容展示局限的多功能互动装置,能够呈现动态内容并与用户产生互动交流&a…

Leetcode—230.二叉搜索树中第K小的元素【中等】

2023每日刷题(六十) Leetcode—230.二叉搜索树中第K小的元素 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nul…

忘记了路由器的用户名和密码,怎么办?

注意:登录窗口会显示路由器型号,请务必确认是您自己路由器的界面。 解决方法 尝试输入登录密码 如果您的确忘了设置好的密码,就只能把路由器恢复出厂设置,没有超级密码。 恢复出厂前,不妨尝试输入可能的管理密码。一…

和鲸科技携手深圳数据交易所,“数据+数据开发者生态”赋能人工智能产业发展

信息化时代,数据驱动决策的重要性日益凸显。通过利用数据可以深入了解市场需求、客户行为、竞争态势等关键信息,从而制定更为有效的战略和决策。围绕推动数据要素产业发展,近日,深圳数据交易所(以下简称“深数所”&…

【注解和反射】--03 类的加载、ClassLoader

反射 【Class】哪些类型可以有Class对象? class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类interface:接口[]:数组enum:枚举annotation:注…

uniapp,点击选中并改变颜色,第二次点击取消选中状态

一、效果图 二、代码实现 字符串的indexOf和数组的indexOf用法一致! arr.indexOf(item) 该方法返回某个元素在数组中的位置。若没检索到,则返回 -1。 关键代码:(通过:class绑定) :class"selectList.indexOf(sub.type) ! -1 ? right_ite…

Linux,Windows或macOS系统的电脑怎样才能投屏到手机?

很多人都知道手机投屏到电脑的方法,但想要反过来的时候,却束手无策。 如果你想要将电脑投屏到手机,无论你的电脑是Windows,Linux还是macOS系统,无论你的手机是安卓、iOS还是鸿蒙,都可以用下面这个方法实现电…

c/c++ 文件操作(2)

文件操作读和写 顺序读写 1、fgetc、fputc 函数功能fgetc字符输入函数----->对应打开方式是 “r”fputc字符输出函数-----> 对应打开方式是 “w” 2、fgets、fputs 函数功能fgets文本行输入函数------> 对应打开方式是"r"fputs文本行输出函数------>…

说说对React高阶组件的理解?应用场景?

面试官:说说对高阶组件的理解?应用场景? 一、是什么 高阶函数(Higher-order function),至少满足下列一个条件的函数 接受一个或多个函数作为输入输出一个函数 在React中,高阶组件即接受一个或多个组件作…