本文csdn地址

前言

博客-Docker-搭建可用SSH访问的centos镜像

2年前我写了一篇 关于如何在本地安装Docker 的教程),但是当时安装 Docker Desktop 还需要开启 hyper-v 或者是安装 toolbox 才能开启虚拟化。这两种情况下配置各有不同,而且也都需要配置环境变量,安装过程还是比较麻烦的。

但是现在有了 wsl2,在 windows 上使用 Docker 开发 更加方便了。本质上,wsl2 还是依赖hyper-v 技术,启动速度不慢,也不需要单独安装其他虚拟机,配置起来也更加方便。

不过wsl2 的方便性可以说是锦上添花,docker 最大的好处,我认为还是在相比虚拟机来说,它拥有和git 类似的仓库管理、版本等属性,有了这些基础,才有了作为开发工具的高效性。这才是我真正推荐它的原因。

这篇博客主要就是帮大家避坑,把docker desktop 安装之后需要预设的配置尽量说明清楚,让大家可以安心地 在win10 系统上安装 Docker Desktop,以及提供一个基础开发镜像,帮助大家以后学习新技术能够更加方便。

wsl官网

安装 docker desktop

环境准备

配置wsl

前提:本机已经安装了 wsl (参考官方教程,使用docker 到第五步 Set WSL 2 as your default version完成就可以了。最新版本的win10 应该是自带的)
检查wsl 是否有安装:
到windows 功能中查找选项:适用于linux 的 windows 子系统

然后是限制 wsl 使用的资源:默认情况下,一旦你开启的镜像需要比较多资源,系统资源就会被直接吃满。
所以一定要记得设置wsl 占用资源配置,配置方式如下:
Win+R 然后输入 %UserProfile% 进入用户文件夹
然后编辑 .wslconfig 输入以下内容:(具体数值根据实际情况调整)

1
2
3
4
5
[wsl2]
memory=4GB
swap=5GB
processors=5
localhostForwarding=true

memory: 内存
swap: 虚拟内存
processors: 处理器数量,当前电脑的processor 数量可以通过 wmic 指令获取
LocalhostForwarding: 允许本地通过 localhost 访问 wsl,默认就是开启
更多参数的说明

然后重启 lxss manager (即wsl服务)

1
2
net stop LxssManager
net start LxssManager

最后是设置wsl 的数据存储路径,这个在安装 Docker Desktop 完成之后可以添加上去,参考下面的说明。

注册一个 dockerhub 账号 和 国内云厂商 容器服务

账号本身 不影响 Docker Desktop 启动 ,但是还是建议体验一下容器镜像服务。容器镜像管理的方式类似git 代码,可以把自己后续学习其他技术的过程中 ,搭建好的镜像提交到云端,做备份用。也方便共享。
下面几个镜像服务提供商,个人版本都是免费的。不过主推还是国内的镜像服务,传输速度快一点。
阿里云镜像服务(前言中引的博客中有说明注册方式)
腾讯云镜像服务
dockerhub(建议开启代理访问)

安装 Desktop

首先从官网下载 最新版本,直接安装即可
安装完成之后,可以先测试是否能正常启动,其他配置可以慢慢来改,kubernetes 也不急着安装。

2.3 Docker Desktop 的配置

wsl 数据存储路径

第一次成功启动 docker desktop 之后,你可以在 C:\Users\用户名\AppData\Local\Docker\wsl\data 这个目录下,找到ext4 文件,它就是 wsl 使用的虚拟机文件,我们使用docker 的所有操作和下载的所有文件,都会在这个目录中执行。
因此如果默认系统分了系统盘和数据盘,或者是我们有其他空间更大的硬盘可选,那么有必要将 这个ext4盘文件 进行迁移
注: 考虑到不管是在开发过程中,是轻量还是大量使用 docker desktop,最后 docker 都会占不小空间,建议第一次启动 docker desktop 之后就进行迁移,至少不要放在系统盘

wsl

更新:20221008 发现一个工具可以帮我们快速迁移,比之前使用 wsl 指令,还需要先导出,再导入的操作稍微简单一些

参考 - 如何修改WSL的安装路径

工具下载地址

迁移方式:先确认需要迁移的 wsl 名称:

1
./LxRunOffline.exe list

wsl list

然后执行迁移:(需要先关闭 docker desktop, 迁移需要一定时间)

1
./LxRunOffline.exe move -n docker-desktop-data -d 'D:\wsl'

== 以下是旧的迁移方式 ==

迁移步骤:首先退出 docker desktop ,并检查docker desktop 对应的虚拟机的状态,应该都要是关闭状态

1
wsl --list -v

查看wsl 状态

1
wsl --export docker-desktop-data "C:\Users\用户名\AppData\Local\Docker\wsl\data\docker-desktop-data.tar"

将目前的wsl 磁盘文件导出到指定压缩文件中

1
wsl --unregister docker-desktop-data

卸载docker-desktop-data服务

1
wsl --import docker-desktop-data "D:\docker\wsl\data" "D:\docker\wsl\docker-desktop-data.tar" --version 2

导入刚才导出的 wsl 磁盘文件
最后,重启 docker desktop,正常来说:
① docker 可以正常启动
② 原目录的 ext4 文件没有了(Distro 下面也有一个 ext4 文件,这个没关系)

配置代理

代理基本是开发过程中必备的,但是如果你使用的镜像服务是国内的,那么提交、下载镜像的时候又不应该走代理,所以需要在代理上额外配置一下:
proxy

如:使用阿里云镜像的代理配置
localhost,127.0.0.1,*.aliyuncs.com

测试拉取并运行镜像

这里我们测试一个可直接通过 ssh 连接的镜像:jdeathe/centos-ssh
Git地址

1
2
3
docker pull jdeathe/centos-ssh

docker run -d --env "SSH_PASSWORD_AUTHENTICATION=true" --env "SSH_USER=centos" --env "SSH_USER_PASSWORD=test123" --name ssh.1 -p 30022:22 jdeathe/centos-ssh

除了启动命令的学习,这个仓库提供的Dockefile 非常标准化,是直接基于centos 原生镜像 在其基础上改的,从Dockerfile中也能看到非常多标准化的操作,想要学习 centos 原生镜像初始化细节的可以从这个项目的Dockerfile中了解更多细节。

搭建自己的开发服务器

这里提供一个自己平时开发用的镜像,里面安装了一些开发语言的基本环境
其中,语言下载的依赖(比如 maven、gopath)都统一放在 /opt/path 目录下,安装的组件都放在 /opt/modules 下。

项目git地址(smiecj/docker-centos)
镜像下载和启动方式:

1
2
3
4
5
# 构建一个包含 golang、python、java 和 npm 的开发镜像
REPO=mzsmieli nohup make build_dev_full

# 运行镜像 (也可以直接运行 将从 docker hub 下载镜像)
docker run -it -d -p 2222:22 mzsmieli/centos:base8_dev_full_1.0

启动成功后,就可以进行自由的开发了。如果需要在容器内部编写代码,这里再推荐 vscode + ssh + 本地免密登录配置的开发模式。修改之后,在容器内部代码变更可以立刻生效,也可以在 vscode 中直接通过 命令行 执行操作
ssh remote

扩展: vscode 使用技巧

后言:Docker 在现在开发的重要性

现在不仅是信息爆炸的时代,更是技术爆炸的时代。底层技术虽然没有太大的变化,但是上层应用技术基本是2-3年一更新。
伴随而来的,不仅仅是我们自己知识库的更新,还有日益膨胀的操作系统。是的,有的时候我们需要在电脑上跑后台前端服务,有的时候也要学习其他基础组件,可能还要顺应潮流学一点机器学习。各种技术都需要安装一些依赖。不管是 mac 还是 windows,一旦你换一台电脑,迁移这些环境都是很费成本的。

因此 现在项目都推崇 协同开发的模式,所有代码、文档 都在云端统一管理。但是对个人来说,这种模式也慢慢变得必要起来。

所以我推荐 Docker 的原因就这么简单,只是镜像管理和环境管理的方便性,对于程序员来说就足够爱上它了。而且它也远不止这些内容,它的原理,以及 k8s 的实现,也是值得我们去学习的。共勉。