Windows Docker 安装

server/2025/1/12 21:10:21/

使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。

Docker 的出现让环境配置变得(或许)不再折磨。简单来说 Docker 使用轻量级的“容器”(container)而不是整个操作系统去支持一个应用的配置。应用自身连同它的环境配置被打包为一个个 image 可以自由运行在不同平台的一个个 container 中,这极大地节省了所有人的时间成本。

比如说有时候你本地需要在Windows10开发环境中快速搭建一个Ms SQLServer的运行环境,但是大家在
Windows环境安装过的都知道Ms SQLServer安装快则半个到一个小时,忙的话就是两三个小时不等。
但是你使用Docker的话,下载镜像到运行容器在到配置可能就是十多分钟的功夫吧.

Docker是基于Go语言开发的开源应用容器引擎,遵从Apache Licence 2.0协议,可以让开发者打包应用以及应用的依赖包到一个可移植的容器中,然后发布到各种发行版本的Linux系统上。

1 Docker 简介

软件开发中最为麻烦的事情可能就是配置环境了。由于用户使用的操作系统具有多样性,即便使用跨平台的开发语言(如Java和Python)都不能保证代码能够在各种平台下都可以正常的运转,而且在不同的环境下我们安装的软件需要依赖的软件包也是不一样的。

那么问题来了,我们安装软件的时候可不可以把软件运行的环境一并安装?我们是不是可以把原始环境一模一样地复制过来呢?

虚拟机(virtual machine)就是带环境安装的一种解决方案,它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统,在macOS上运行Windows,而应用程序对此毫无感知。使用过虚拟机的人都知道,虚拟机用起来跟真实系统一模一样,而对于虚拟机的宿主系统来说,虚拟机就是一个普通文件,不需要了就删掉,对宿主系统或者其他的程序并没有影响。但是虚拟机通常会占用较多的系统
资源,启动和关闭也非常的缓慢,总之用户体验并没有想象中的那么好。

Docker属于对Linux容器技术(LXC)的一种封装(利用了Linux的namespace和cgroup技术),它提供了简单易用的容器使用接口,是目前最流行的 Linux 容器解决方案。Docker将应用程序与该程序的依赖打包在一个文件里面,运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。下图是虚拟机和容器的对比,左边是传统的虚拟机,右边是Docker。

对比传统虚拟机总结

特性容器虚拟机
启动秒级分钟级
硬盘使用一般为 MB一般为 GB
性能接近原生弱于
系统支持量单机支持上千个容器一般几十个

目前,Docker主要用于几下几个方面:

  • 提供一次性的环境。
  • 提供弹性的云服务(利用Docker很容易实现扩容和收缩)。
  • 实践微服务架构(隔离真实环境在容器中运行多个服务)。

2 安装 Docker

官方下载地址:Docker Desktop Installer.exe 下载地址
国内镜像:Windows安装包下载地址
介绍:Windows 的 Docker 桌面说明
注意:此方法仅适用于 Windows 10 操作系统专业版、企业版、教育版和部分家庭版!

2.1 启用 Hyper-V

Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox。这是 Docker Desktop for Windows 所使用的虚拟机。

注意:可以通过多种方式启用 Hyper-V,包括使用 Windows 10 控制面板、PowerShell(Hyper-V 作为可选功能内置于 Windows – 无需下载 Hyper-V)。

但是,这个虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发 Android 应用必须使用的模拟器),请不要使用 Hyper-V!

1、使用 PowerShell 启用 Hyper-V
以管理员身份打开 PowerShell 控制台,运行以下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

2、通过控制面板“设置”启用 Hyper-V 角色

(1)右键单击 Windows 按钮并选择“应用和功能”。

(2)选择相关设置下右侧的“程序和功能”。

(3)选择“打开或关闭 Windows 功能”。

(4)选择“Hyper-V”,然后单击“确定”。

若Windows没有Hyper,使用如下命令新建Hyper-V.cmd文件,执行后重启系统即可。

pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

来自:解决 “Windows 功能” 没有Hyper-V

2.2 安装 Docker Desktop for Windows

双击下载的 Docker for Windows Installer 安装文件,一路 Next,点击 Finish 完成安装。

安装完成后,Docker 会自动启动。通知栏上会出现个小鲸鱼的图标,这表示 Docker 正在运行。

桌边也会出现三个图标,如下图所示:

我们可以在命令行执行 docker version 来查看版本号,docker run hello-world 来载入测试镜像测试。如果没启动,你可以在 Windows 搜索 Docker 来启动:

打开命令行窗口运行以下命令:

docker run hello-world

看到以下输出则表示安装成功,且能正常工作:

查看Docker Desktop中是否存在hello-world镜像是否拉取成功:

hello-world镜像地址:https://hub.docker.com/_/hello-world

2.3 在Docker Desktop设置中配置阿里云镜像源:

进入管理控制台获取镜像加速器地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

在系统右下角托盘图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Docker Desktop。编辑窗口内的JSON串,填写下方加速器地址:

{ “registry-mirrors”: [“https://xxxx.mirror.aliyuncs.com”] }

resource中可以更改docker镜像位置,推荐更改,不然C盘会占用很高
注意:通过启用Hyper-v虚拟化的方式在windows中安装Dokcer以外,我们还可以通过安装配置WSL2环境来安装。

WSL2Docker_116">2.4 通过启用WSL2安装Docker

Windows Subsystem for Linux(简称WSL),Windows下的Linux子系统,是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。当前的Docker桌面版可以使用WSL2作为其Linux后台运行。因此我们需要首先在Windows操作系统上激活WSL2功能才能
使用Docker做面板。

要求:win10更新系统至1903或更高版本;如果,windows10版本2004(内部版本19041或更高)可用方法二,但方法一可以了解更多细节。

windows_123">2.4.1 windows系统版本查看及更新

要求:win10更新系统至1903或更高版本
如果版本低于1903,可使用 Windows 10 易升工具手动升级。下载 Windows 10 易升工具:下载 Windows 10

查看方法:在键盘上按下win+R调出运行窗口,随后输入“winver”命令并回车。

2.4.2 启用适用于Linux的Windwos子系统

如果之前没有用过 WSL,那么首先需要为Linux启用Windows子系统:在搜索框输入powershell,以管理员身份打开powershell并运行;

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2.4.3 启用虚拟机功能

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
2.4.4 重启电脑

为了确保所有相关部件都整齐到位,需要重启系统,否则可能会发现事情没按预期进行。

重新启动计算机以完成WSL安装并更新到WSL 2。

2.4.5 下载Linux内核更新包

下载内核更新包并安装
适用于 x64 计算机的 WSL2 Linux 内核更新包,下载链接:https://learn.microsoft.com/zh-cn/windows/wsl/install

安装后,设置默认wsl版本

wsl --set-default-version 2

2.5 安装linux系统

方法一:可以从微软商店搜索安装,有概率会失败
方法二: 翻到页面最下方,下载你需要的版本

旧版 WSL 的手动安装步骤 | Microsoft Learn
在旧版 Windows 上手动(而不是使用 wsl 安装命令)安装 WSL 的分步说明

给下载的Ubuntu.appx 文件更改为 zip 文件来安装该文件添加一个.zip后缀,用解压缩软件解压到你想安装的地方。点击里面的ubnutu.exe文件,等待一会就会安装成功。去cmd中输入wsl -l -v查看安装的子系统版本

安装完成后会设置自己的用户名,密码(注意不是root账户)

设置root密码

sudo passwd

切换root用户测试

su root

每次切换root用户很麻烦,可以用powershell执行下面这条命令,默认root用户登录,其中参数自己替换下

C:\Users\用户名\AppData\Local\Microsoft\WindowsApps\ubuntu版本.exe config --default-user root

开启ssh服务,首先确保是root用户

vi /etc/ssh/sshd_config

进入之后,修改如下配置,可以直接复制我的,(我修改的项加了注释)

#	$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.Port 22   #22端口,ssh服务默认端口
#AddressFamily any
ListenAddress 0.0.0.0  #所有ip都可以联通
#ListenAddress ::#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key# Ciphers and keying
#RekeyLimit default none# Logging
#SyslogFacility AUTH
#LogLevel INFO# Authentication:#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
PermitRootLogin yes  #把上面那行相同的注释掉,新加一行,允许root账户登录#PubkeyAuthentication yes# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile	.ssh/authorized_keys .ssh/authorized_keys2#AuthorizedPrincipalsFile none#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes #允许使用密码登录
#PermitEmptyPasswords no# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none# no default banner path
#Banner none# Allow client to pass locale environment variables
AcceptEnv LANG LC_*# override default of no subsystems
Subsystem	sftp	/usr/lib/openssh/sftp-server# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server

重启ssh项目

sudo service ssh restart

使用ssh工具测试链接

配置wsl2新特性,一定要开,否则会出现内存泄漏,爆内存的情况

C:\Users\电脑用户名文件夹下新建一个.wslconfig文件

# Settings apply across all Linux distros running on WSL 2
[wsl2]
autoProxy=false  # 是否强制 WSL2/WSLg 子系统使用 Windows 代理设置(请根据实际需要启用)
dnsTunneling=true           # WSL2/WSLg DNS 代理隧道,以便由 Windows 代理转发 DNS 请求(请根据实际需要启用)
firewall=true               # WSL2/WSLg 子系统的 Windows 防火墙集成,以便 Hyper-V 或者 WPF 能过滤子系统流量(请根据实际需要启用)
guiApplications=true        # 启用 WSLg GUI 图形化程序支持
ipv6=true                   # 启用 IPv6 网络支持
localhostForwarding=true    # 启用 localhost 网络转发支持
memory=12GB                 # 限制 WSL2/WSLg 子系统的最大内存占用
nestedVirtualization=true   # 启用 WSL2/WSLg 子系统嵌套虚拟化功能支持
networkingMode=mirrored     # 启用镜像网络特性支持
#pageReporting=true          # 启用 WSL2/WSLg 子系统页面文件通报,以便 Windows 回收已分配但未使用的内存
processors=4                # 设置 WSL2/WSLg 子系统的逻辑 CPU 核心数为 8(最大肯定没法超过硬件的物理逻辑核心数)
#vmIdleTimeout=-1            # WSL2 VM 实例空闲超时关闭时间,-1 为永不关闭,根据参数说明,目前似乎仅适用于 Win11+[experimental]
autoMemoryReclaim=gradual       # 启用空闲内存自动缓慢回收,其它选项:dropcache / disabled(立即/禁用)
hostAddressLoopback=true        # 启用 WSL2/WSLg 子系统和 Windows 宿主之间的本地回环互通支持
sparseVhd=true                  # 启用 WSL2/WSLg 子系统虚拟硬盘空间自动回收
useWindowsDnsCache=false        # 和 dnsTunneling 配合使用,决定是否使用 Windows DNS 缓存池

重启wsl2或重启电脑生效

Ubuntu20.04子系统自带的ssh服务无法连接,需卸载后重新安装。

卸载ssh服务

apt remove openssh-server

重装ssh服务

apt install openssh-server

查看wsl的地址

安装ifconfig工具

apt install net-tools

查看IP地址,红框位置为wsl地址

ifconfig

WSL折腾之旅(3)SSH远程连接

参考

  • Docker 官网:https://www.docker.com
  • Github Docker 源码:https://github.com/docker/docker-ce
  • Docker Course:https://kodekloud.com/courses/docker-for-the-absolute-beginner/
  • 最详细的ubuntu 安装 docker教程:https://zhuanlan.zhihu.com/p/651148141
  • Windows Docker 安装:https://www.runoob.com/docker/windows-docker-install.html
  • Windows10 Docker安装详细教程:https://zhuanlan.zhihu.com/p/441965046
  • Windows 10 安装配置WSL2(ubuntu20.04)教程 超详细:https://blog.csdn.net/m0_51233386/article/details/127961763
  • windows WSL2避坑指南:https://www.cnblogs.com/yjmyzz/p/wsl2-tutorial-1.html

http://www.ppmy.cn/server/157847.html

相关文章

js单例模式

保证一个类只有一个实例,并提供一个访问它的全局访问点 实现 静态方法实现 class SingleTon{//全局的访问点static getInstance(){// 保证一个类只有一个实例if(!this.instance){this.instancenew SingleTon()}return this.instance}}let aSingleTon.getInstance()let bSing…

spring task使用

Spring Task 简介 Spring Task 是 Spring 框架原生自带的任务调度框架,它犹如一把瑞士军刀,为开发者提供了丰富多样的功能,助力轻松创建和管理定时任务。相较于其他一些第三方任务调度框架,Spring Task 最大的优势在于其与 Sprin…

[豆包MarCode AI 刷题] 算法题解 Java 青训入营考核 五题打卡第三天

目录 11 中 观光景点组合得分问题 55 易 小E的射击训练 47 易 完美偶数计数 48 易 替换函数 70 易 打点计数器的区间合并 欢迎你报名豆包MarsCode 青训营-寒假专场!非常开心你加入这个充满活力和创新的大家庭。在这里,你将遇到一群和你一样对技术充…

基于springboot+vue的高校创新创业课程体系的设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

如何理解机器学习中的线性模型 ?

在机器学习中,线性模型是一类重要且基础的模型,它假设目标变量(输出)是输入变量(特征)的线性组合。线性模型的核心思想是通过优化模型的参数,使模型能够捕捉输入与输出之间的线性关系。以下是线…

C++ STL map和set的使用

序列式容器和关联式容器 想必大家已经接触过一些容器如:list,vector,deque,array,forward_list,string等,这些容器统称为系列容器。因为逻辑结构为线性的,两个位置的存储的值一般是…

天天 AI-250110:今日热点-字节豆包Web端反超百度文心一言,DeepSeek也发力了|量子位智库月报

2AGI.NET:天天AI-20250109 人工智能(AI)和硬件技术继续以惊人的速度发展,不断刷新我们对技术边界的认知。从英伟达的RTX 50系列显卡到清华团队的数学推理突破,再到AI算力的多个利好,这些技术的发展正在推动…

怎样提高服务器中的数据传输速度?

服务器中的数据传输速度会影响着用户的体验感,当企业中的数据传输速度出现卡顿或者是过慢时,用户不能及时浏览到所需的内容,给用户造成不好的体验感,那么企业该怎样才能提高服务器中的数据传输速度呢? 服务器之间如何传…