Bootstrap

windows下wsl2安装centos容器

本文的安装流程为:windows开启hyper-v,在hyper-v上安装wsl2,进而安装Ubuntu分发,在Ubuntu分发上安装docker,在docker上安装centos7等容器

安装wsl

先开启hyper-v

202303212152312

wsl的安装:

如果是win11家庭版,可能没有hyper-v,但可以通过脚本安装hyper-v:参考链接

win11参考和Windows 10版本2004及更高版本:安装WSL

win10旧版本参考:旧版 WSL 的手动安装步骤

win11下安装wsl2: wsl --install

202303121553083

安装Ubuntu

命令:wsl --install -d Ubuntu-18.04 (最好安装18版本的,网上教程多)

202303121615791

发现多出一个Ubuntu的系统终端,新建用户zenger,然后切换到root,为root设置密码。

更改主机名

wsl下的ubuntu更改主机名的方法:
更改主机名

安装完Ubuntu后,查看磁盘和内存,可以发现,是和win主机共享的:

202303212235091

但我物理内存其实是有32G,但这里只有16G,是因为只能读一个内存条?

wsl常用命令:

  • 升级wsl:wsl --update
  • 查看系统wsl:wsl -l -v
  • 查看运行中的分发:wsl --list --running

wsl迁移Ubuntu到其他磁盘

  1. 停止wsl:wsl --shutdown
  2. 导出ubuntu:wsl --export Ubuntu-18.04 F://WSL2-Ubuntu18//ubuntu-18.04.tar
  3. 注销原来的分发:wsl --unregister Ubuntu-18.04
  4. 导入:wsl --import Ubuntu-18.04 F://WSL2-Ubuntu18 F://WSL2-Ubuntu18//ubuntu-18.04.tar

迁移完成后的文件夹:
202303142129906

输入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

如果速度太满,配置阿里云镜像加速器(自行百度下,参考链接):

202303142202132 202303142202528

新建/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

  1. 若要修改网段,则需更改网络模式:参考连接
  2. 修改ip => 参考连接

出现的问题:

  1. user specified IP address is supported only when connecting to networks with user configured subnets

    解决:只有自定义网段才能配置静态ip,不能用默认的bridge网络模式

  2. 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容器

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容器
  1. 首先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

  1. 添加端口映射进行shell连接:

需要在ubunut上映射centos的端口,并在win上映射ubunut的端口:

widos连接docker:ssh

其中,容器添加端口映射的方法为:容器添加端口映射

其他功能:

docker配置开机自启动

容器基本命令

注意事项及问题:

  1. 配置文件写错,可能导致你的容器没了

  2. hostconfig.json不能有127.0.0.1,写容器ip,端口映射和启动web服务都尽量用容器ip,而非127.0.0.1或0.0.0.0或localhost

  3. clion远程开发

  4. dism不是内部命令:

    解决方法:

    C:\Windows\System32加入系统环境变量

    然后,如果提示需要提升dism权限,以管理员身份运行即可

  5. 每次进入docker的centos文件夹,都说没权限,sudo chmod -R 777 /home/xxx;但是每次重启docker,都要重新设置权限…

    待解决…

;