运行环境:Windows11(有WSL2),Docker Desktop(使用WSL2 引擎 Use the WSL2 based Engine)
-
从Docker Hub获取centos相关的镜像
-
选择Offical image的镜像
-
从Tags中找到合适镜像,并复制命令,在cmd中运行命令
然后就可以在Docker Desktop软件中看到此镜像
-
使用此镜像启动容器 使用的命令:
docker run -itd --privileged --name my_centos7 -p 50003:22 centos:7 /usr/sbin/init
该命令的操作是为此容器定义了一个my_centos7的名字,同时将该容器的22端口绑定到主机50003端口,并以特权模式在后台启动。如果对命令不太了解可以去Docker 命令大全 | 菜鸟教程 (runoob.com)查看。 运行之后获取到此容器的id,如图:
-
进入容器 使用的命令:
docker exec -it my_centos7 /bin/bash
使用exec的原因是因为容器以特权模式启动,使用attach的话貌似会有问题。还不太了解,一直在使用exec操作 运行之后的结果,如图:
-
进行一些初始的操作,对系统进行升级
yum update
然后回输出一些需要升级的东西,并询问是否升级安装,输入y确定升级。等待升级完成(如果中途出现了询问y/n的情况,输入y即可)。(Docker中的centos7中安装软件的时候会自动查找最快的镜像站,所以下载速度还是挺快的,不需要配置镜像源。实际的系统应该也是这样吧。)
-
安装需要的软件
使用的命令:
#安装openssh-server yum install openssh-server -y #安装需要用到的软件vim用于编辑文件、passwd用于设置root或其他用户的密码、openssh-clients用于让此容器可以使用ssh命令、net-tools我暂时只是用来查看ip yum install vim passwd openssh-clients net-tools
等待安装即可。
-
查看ssh服务的状态
systemctl status sshd
当前还是关闭的。
启动ssh服务(此处用到的systemctl命令是在特权模式下才能起作用的,也就是在启动时时候加了 --privileged 选项。)
systemctl start sshd
再次查看,可以看到已经运行了
将ssh服务加入到自启项。
systemctl enable sshd
如果想停止服务,则使用下面的命令
systemctl stop sshd
如果先移除ssh的自启,则使用这条命令
systemctl disable sshd
-
编辑ssh的配置文件
vim /etc/ssh/sshd_config
将 Port 22、ListenAddress 0.0.0.0、ListenAddress :: 前面的#号去掉(即取消这几行的注释)
将PermitRootLogin yes、PubkeyAuthentication yes的注释去掉(可以使用vim的搜索功能,即在普通模式下输入 /Per 即可查找到)
编辑完成之后按esc回到普通模式,输入 :wq 保存并退出。
-
为root用户设置密码
执行命令:
passwd root
接下来输入两次密码(是看不到的)。
-
重启ssh,并测试通过主机连接容器
systemctl restart sshd
通过主机连接容器(该操作在Windows的环境下进行)
ssh root@localhost -p 50003
因为前面我们把容器的22端口绑定到了宿主机的50003端口上,所以在连接时不能够直接使用
shh root@localhost 要在后面说明通过端口50003连接,即加上 -p 50003.
成功之后会出现这个询问,输入yes
然后会让输入root的密码,即可连接
连接成功之后,使用uname -a,可以看到现在是Linux,结果如下图:
-
退出ssh连接,使用exit命令退出ssh连接(退出容器也是用exit命令)
exit
结果如下:
-
利用此容器做成本地镜像,方便以后部署同样的环境
docker commit my_centos7 centos:ssh
此命令是用已有的容器(my_centos7)生成镜像,名为centos,tag为ssh
可以看到在Docker Desktop的Images中有了name为centos,tag为ssh的镜像