Docker Desktop 安装 Linux(告别传统的虚拟机VMware)
Docker Desktop 安装 Linux(告别传统的虚拟机VMware)
本文讲解主要是可以用自己的 windows 系统安装 Docker 启动 CentOS 7 容器
再使用本地 SSH 工具连接到 CentOS 系统,用于小伙伴们学习 Linux 系统,学习生产环境的项目发布、CI CD等内容,告别笨重的 VMware
本文包含了部分 docker 命令和 Linux 命令,但不用急,copy 一下我写进博客的命令就可以运行了
本文皆可以使用本地的网络进行,不需要梯子(不同的镜像源下载、安装文件)
本文几个内容分别为:
安装 Docker Desktop、安装 WSL 、配置 Docker 镜像源、设置 Docker Desktop 中文
Docker 安装 CentOS 7 镜像、运行 CentOS 7 容器
CentOS 7 安装 SSH、本机使用工具连接到 CentOS 容器
一、安装 Docker Desktop、安装 WSL 、配置 Docker 镜像源、设置 Docker Desktop 中文
Docker 作为一种轻量级的容器化技术,为开发者提供一致的运行环境,使得软件可以在不同平台上无缝运行,极大地提升了开发和部署的效率。无论是本地开发、测试,还是大规模的云端部署,Docker 都能显著降低环境配置的复杂性,减少依赖冲突问题。
1、安装 Docker Desktop
可以直接点击这个链接下载:Docker Desktop 下载
如果链接失效,可以去官网点击下载:Docker Desktop 官网
下载好之后一直点击下一步就好了,不需要其他的任何操作,安装好后需要重启电脑
重启好后会提示我们下载 WSL2 ,但直接在 CMD 里面根本下载不了(网络问题),可以看后续步骤,通过镜像下载安装
2、安装 WSL2
WSL(Windows Subsystem for Linux)是微软为 Windows 系统提供的一种兼容性层,允许用户在 Windows 上运行 Linux 发行版(如 Ubuntu)。它为开发者提供了一个轻量级的解决方案,可以在不安装虚拟机或双系统的情况下,直接在 Windows 系统中运行 Linux 应用程序和工具。
有梯子的朋友可以直接去 GitHub 下载最新的:Releases · microsoft/WSL
没有的朋友看后续操作:我们先找一个 GitHub 的镜像源进去选 WSL2 最新的版本,右键复制链接(不想找最新的,后面的链接可以复制一下):https://github.com/microsoft/WSL/releases/download/2.5.10/wsl.2.5.10.0.x64.msi
打开 GitHub 文件加速网站:Github文件加速
如果下面链接没过期,可以直接点击下载:https://proxy.pipers.cn/https://github.com/microsoft/WSL/releases/download/2.5.10/wsl.2.5.10.0.x64.msi
下载完之后打开也是直接点下一步点到头就好了,等待 WSL2 安装完再打开 Docker Desktop 就可以使用了
3、设置中文(非必须)
也是需要再 GitHub 中进行下载的:Releases · asxez/DockerDesktop-CN
没有梯子的朋友看上面安装 WSL 的部分,这里就不重复搜索步骤了,放一个可以下载的版本(需要对应自己 Docker Desktop 的版本):https://proxy.pipers.cn/https://github.com/asxez/DockerDesktop-CN/releases/download/4.45.0/app-Windows-x86.asar
找到我们 Docker 安装目录下的 \frontend\resources
文件夹,并定位到其中的 app.asar
文件,替换掉 app.asar
文件(需要把我们下载的文件名字改为 app.asar
)
4、配置 Docker 镜像源
Docker 镜像源经常失效,所以我配置了很多:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://dc.j8.work","https://dockerproxy.com","https://gst6rzl9.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/","https://mirrors.tuna.tsinghua.edu.cn/","http://mirrors.sohu.com/"]
}
配置镜像源:
查看是否配置完毕,打开 CMD 输入docker info
,Registry Mirrors 是我们刚才配置的就没问题了
二、Docker 安装 CentOS 7 镜像、运行 CentOS 7 容器
1、Docker 安装 CentOS 7 镜像
我们后续操作都在 CMD 命令行完成,Docker Desktop 太慢了:
# 拉取 CentOS 7 镜像
C:\Users\Admin>docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
等待安装完后可以去 Docker Desktop 查看,或者使用docker images
查看我们的镜像
C:\Users\Admin>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 be65f488b776 3 years ago 301MB
2、运行 CentOS 7 容器
运行容器,linux 的端口尽量使用 22,因为 SSH 默认的是 22 端口,如果改了这里,那么后续还得改 SSH 的配置
docker run --name my-centos -v D:\docker\centos:/home/centos --privileged -p 8099:22 --ulimit memlock=-1 -m 8g -td centos:centos7 /usr/sbin/init
# 运行容器
C:\Users\Admin>docker run --name my-centos -v D:\docker\centos:/home/centos --privileged -p 8099:22 --ulimit memlock=-1 -m 8g -td centos:centos7 /usr/sbin/init
a4242078dc52bb15bbc1f7a7549e2d927c17cc72d63c26fafc9920be46d93c77# 查看容器运行状态,可以再 Docker Desktop 的容器那一栏查看
C:\Users\Admin>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4242078dc52 centos:centos7 "/usr/sbin/init" 7 seconds ago Up 6 seconds 0.0.0.0:8099->22/tcp, [::]:8099->22/tcp my-centos
命令内容解释:
参数 | 解释 |
---|---|
docker run | Docker 命令,用于创建并启动一个新的容器。 |
--name my-centos | 为容器指定一个名称 my-centos ,便于后续管理。 |
-v D:\docker\centos:/home/centos | 数据卷挂载。将宿主机的目录 D:\docker\centos 挂载到容器内的 /home/centos 目录,实现数据共享和持久化。就是说你在 CentOS 容器的 /home/centos 目录下,写了一个文件,那么在本机的 D:\docker\centos 目录下也可以看见那个文件,反之亦然 |
--privileged | 特权模式。赋予容器几乎所有的宿主机内核能力,允许其进行高级系统操作(如运行 systemd)。安全风险高,生产环境慎用。 |
-p 8099:22 | 端口映射。将宿主机的 8099 端口映射到容器内部的 22 端口(SSH 服务端口),以便通过 SSH 访问容器。 |
--ulimit memlock=-1 | 资源限制。设置进程可锁定内存大小为无限制,常用于运行需要大量固定内存的应用程序(如数据库)。 |
-m 8g | 内存限制。限制容器最多只能使用 8GB 的物理内存。 |
-td | 选项组合。 • -t : 分配一个伪终端(pseudo-TTY)。• -d : 在后台运行容器(分离模式)。 |
centos:centos7 | 指定用于创建容器的镜像名称和标签(CentOS 7)。 |
/usr/sbin/init | 容器启动命令。启动系统的初始化进程,这是为了在容器内正常使用 systemctl 等系统管理命令所必需的。 |
三、CentOS 7 安装 SSH、本机使用工具连接到 CentOS 容器
1、进入我们的容器内部(CentOS 7)
# 下面出现 # 就代表我们进入了 Linux 的环境
C:\Users\Admin>docker exec -it my-centos bash
[root@1e03b7aa6415 /]#
2、修改 yum 镜像源、安装 net-tools 和 vim
按照下面一步一步走就好了,我们首先需要配置yum
镜像源,后续下载 SSH 的操作需要使用yum
net-tools
提供了 ifconfig
, netstat
等网络诊断工具
vim
则是一个功能强大的文本编辑器,用于修改 SSH 的配置文件(比自带的 vi 好用点)
#repos 目录
$ cd /etc/yum.repos.d/# 在更换 YUM 源之前,建议先备份系统自带的 YUM 源配置文件,以防需要恢复原配置。
$ cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak# 使用 curl 替换成阿里云提供的 CentOS 7 Base 源配置文件
$ curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 清理原有缓存
$ yum clean all# 重新生成缓存
$ yum makecache# 更新Yum
$ yum update -y# 安装 net-tools 和 vim
$ yum install -y net-tools vim# 验证 net-tools
$ which ifconfig# 验证 vim
$ which vim
vim常用命令
命令 | 说明 | 执行模式 |
---|---|---|
i | 进入插入模式(开始编辑) | 命令模式下执行 |
ESC | 退出插入模式,返回命令模式 | 插入模式下执行 |
:wq | 保存文件并退出 | 命令模式下执行 |
:q | 退出(仅当文件未修改时) | 命令模式下执行 |
:q! | 不保存强制退出 | 命令模式下执行 |
/关键词 | 搜索关键词,搜索完后, 按 n :查找下一个匹配项。(n 代表 next) 按 N :查找上一个匹配项。输入 :noh :清除所有搜索匹配项的高亮显示 | 命令模式下执行 |
u | 撤销上一步操作 | 命令模式下执行 |
Ctrl + f | 向下翻一页 | 命令模式下执行 |
Ctrl + b | 向上翻一页 | 命令模式下执行 |
3、安装 OpenSSH 服务器
下载 SSH 并修改配置
# 安装ssh服务
$ yum install -y openssh-server openssh-clients openssh
# 安装密码
$ yum install -y passwd# 检查ssh安装情况
$ yum list installed | grep openssh-server# 使用 vim 修改 /etc/ssh/sshd_config 文件
$ vim /etc/ssh/sshd_config
# 查看配置 PermitRootLogin 配置
$ grep -E "^#?PermitRootLogin" /etc/ssh/sshd_config
# 允许 root 用户通过 SSH 登录(PermitRootLogin yes)(默认关闭,需要打开,通过 vim 或者执行下面代码修改)
$ sed -i 's/^#*PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
# 禁用 DNS 反向解析,防止 SSH 连接很卡(UseDNS no)(默认开启,需要关闭,通过 vim 或者执行下面代码修改)
$ sed -i 's/^#*UseDNS.*/UseDNS no/' /etc/ssh/sshd_config
# 监听端口:需要和启动的端口对应(Port 22)(默认开启 22 端口,如果没有改执行容器时的端口,这里就不需要改)
# 开启用户名密码验证关键字(PasswordAuthentication yes)(默认开启,不需要改)# 如果感觉 vim 查看或修改很麻烦,可以复制一份文件放到 linux 的 /home/centos 目录下(docker 配置的 -v 后面的参数,是docker容器与宿主机共享数据的目录),这样我们就可以在我们 windows 的 D:\docker\centos 目录下看见对应文件了,再用你自己喜欢的编辑器修改后,再把 /etc/ssh 目录下的 sshd_config 文件替换掉就好了# 生成 SSH 主机密钥
# 切换到 SSH 配置目录
$ cd /etc/ssh
# 生成所有密钥(自动设置正确权限)
$ ssh-keygen -A# 修改systemctl
$ mv /usr/bin/systemctl /usr/bin/systemctl.old
$ curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > /usr/bin/systemctl
$ chmod +x /usr/bin/systemctl# 启动 sshd
$ systemctl start sshd
# Linux 配置开机启动,但 Docker 容器不是完整的 Linux 系统,所以这种 Linux 开启启动方案,在 Docker 容器启动后并不能自启动,解决办法我方后面,这里只是让 SSH 能完整的工作
$ systemctl enable sshd# 检查端口监听,确认 SSH 是否开启,有值代表 SSH 监听了 22 端口
$ netstat -tulnp | grep :22# 配置密码 需要确认两次 且密码不可见
$ passwd# 测试本地 SSH 连接,输入yes,输入密码,输出 SSH内部连接测试成功 就代表成功了
$ ssh -o ConnectTimeout=2 localhost echo "SSH内部连接测试成功"# 退出 docker 容器内部
$ exit# 按照上面一步一步来就可以了 贴一个我成功的案例
[root@a4242078dc52 ssh]# ssh -o ConnectTimeout=2 localhost echo "SSH内部连接测试成功"
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:ulfMtPZ7yOws5KE7D16GGdyKBPOmpY/mBHBmtKXvsy4.
ECDSA key fingerprint is MD5:41:ef:37:9d:e4:11:63:a0:87:db:16:d3:52:0b:9a:25.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
root@localhost's password:
SSH内部连接测试成功
4、本机使用工具连接到 CentOS 容器(FinalShell)
输入主机号、端口、用户名和密码点击确认
连接成功
5、解决 Docker 容器重启(停止再启动)后 SSH 不能自启动的问题
docker容器在启动的时候,会自动执行
/root/.bashrc
文件,所以,环境变量需要配置在该文件内,这样镜像启动时,可自动执行该文件,使环境变量生效。
# 编辑 /root/.bashrc 文件
$ vim /root/.bashrc
# 在.bashrc末尾添加如下代码
$ systemctl start sshd
.bashrc 修改后的完整代码
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fisystemctl start sshd
测试:可以看见停止再启动后,端口 22 被监听了,用 FinalShell 也能直接连接
docker 重启命令(下面的命令是停止后启动):docker restart my-centos
C:\Users\Admin>docker stop my-centos
my-centosC:\Users\Admin>docker start my-centos
my-centosC:\Users\Admin>docker exec -it my-centos bash
[root@a4242078dc52 /]# netstat -tulnp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 24/sshd
tcp6 0 0 :::22 :::* LISTEN
参考文档:
使用 Docker Desktop 安装 Centos 系统-CSDN博客