本文的安装流程为:windows开启hyper-v,在hyper-v上安装wsl2,进而安装Ubuntu分发,在Ubuntu分发上安装docker,在docker上安装centos7等容器
安装wsl
先开启hyper-v
wsl的安装:
如果是win11家庭版,可能没有hyper-v,但可以通过脚本安装hyper-v:参考链接
win11参考和Windows 10版本2004及更高版本:安装WSL
win10旧版本参考:旧版 WSL 的手动安装步骤
win11下安装wsl2: wsl --install
安装Ubuntu
命令:wsl --install -d Ubuntu-18.04
(最好安装18版本的,网上教程多)
发现多出一个Ubuntu的系统终端,新建用户zenger,然后切换到root,为root设置密码。
更改主机名
wsl下的ubuntu更改主机名的方法:
更改主机名
安装完Ubuntu后,查看磁盘和内存,可以发现,是和win主机共享的:
但我物理内存其实是有32G,但这里只有16G,是因为只能读一个内存条?
wsl常用命令:
- 升级wsl:
wsl --update
- 查看系统wsl:
wsl -l -v
- 查看运行中的分发:
wsl --list --running
wsl迁移Ubuntu到其他磁盘
- 停止wsl:
wsl --shutdown
- 导出ubuntu:
wsl --export Ubuntu-18.04 F://WSL2-Ubuntu18//ubuntu-18.04.tar
- 注销原来的分发:
wsl --unregister Ubuntu-18.04
- 导入:
wsl --import Ubuntu-18.04 F://WSL2-Ubuntu18 F://WSL2-Ubuntu18//ubuntu-18.04.tar
迁移完成后的文件夹:
输入wsl,查看是否迁移成功。
在Ubuntu中安装docker
wsl安装docker有两种方式,可以安装docker desktop,也可以在wsl的Ubuntu中安装docker,这里选择第二种方法。
进入之前安装好的 Ubuntu,添加Docker源,依次输入以下命令
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt update
安装docker: sudo apt install -y docker-ce
启动docker: sudo service docker start
检查docker安装是否正常:
# 检查dockerd进程启动,注意wsl上ubuntu不支持systemctl
service docker status
ps aux|grep docker
# 查看 Docker 版本
docker version
# 检查拉取镜像是否正常
docker pull centos:7
docker images
注意:拉取centos镜像时,可能出现无权限的情况,需将当前用户加入docker用户组:
sudo gpasswd -a username docker
newgrp docker
如果速度太满,配置阿里云镜像加速器(自行百度下,参考链接):
新建/etc/docker/daemon.json文件,将加速器地址粘贴进去:
{
"registry-mirrors": ["https://3k6qw3vs.mirror.aliyuncs.com"]
}
重启docker: sudo service docker restart
然后拉取centos7就嘎嘎快了
运行centos容器
设置固定ip:参考链接
注意设置固定ip一定要使用自定义的网络模式,默认的bridge模式不行。
// 创建一个新的docker网络类型
// 这会在ubunut上新建一个网桥
sudo docker network create --subnet=172.17.0.0/16 staticnet2
// 查看网络类型
docker network ls
// 使用新的网络类型创建并启动容器
sudo docker run -it --name centos7 --net staticnet --ip 172.17.1.101 centos:7 /bin/bash
// 查看容器ip
docker inspect <containtor_id>
容器重启,容器ip未变动,则设置成功
修改容器静态ip
出现的问题:
-
user specified IP address is supported only when connecting to networks with user configured subnets
解决:只有自定义网段才能配置静态ip,不能用默认的bridge网络模式
-
Error response from daemon: Invalid address 172.18.1.101: It does not belong to any of this network’s subnets
解决:ip不属于网段
进入centos
进入centos:docker exec -it 容器id /bin/bash
然后会发现,所有命令都不能使用,需要自己安装,如ifconfig:
// ifconfig,whois等命令都在这个包里
yum install net-tools
wsl网卡就是docker的代理
win连接centos容器
windows ping通docker容器
在win11中添加路由,如
route add 172.18.0.0 mask 255.255.0.0 172.20.151.225 -p
但其实,windos ping不通容器也可以通过端口映射访问
win通过shell连接centos容器
- 首先centos需要安装ssh服务,但启动时一般会出现问题:
Failed to get D-Bus connection: Operation not permitted
解决方法:
只能保存镜像,然后删除原容器,再开启新容器了。。。但是这样新容器的ip配置全都变了,需要重新设置下。
对于初学者,尽量在docekr run时多考虑下,比如ip设置,端口映射,特权模式的开启,数据卷的绑定等,免得以后一直改配置啥的,命令类似于:
docker run -itd --name=centos-cpp -v /root/remote_test:/root/remote_test -p <服务器外网ip>:36022:22 --privileged centos /usr/sbin/init
- 添加端口映射进行shell连接:
需要在ubunut上映射centos的端口,并在win上映射ubunut的端口:
其中,容器添加端口映射的方法为:容器添加端口映射
其他功能:
注意事项及问题:
-
配置文件写错,可能导致你的容器没了
-
hostconfig.json不能有127.0.0.1,写容器ip,端口映射和启动web服务都尽量用容器ip,而非127.0.0.1或0.0.0.0或localhost
-
dism不是内部命令:
解决方法:
将
C:\Windows\System32
加入系统环境变量然后,如果提示需要提升dism权限,以管理员身份运行即可
-
每次进入docker的centos文件夹,都说没权限,sudo chmod -R 777 /home/xxx;但是每次重启docker,都要重新设置权限…
待解决…