运行环境:Windows11(有WSL2),Docker Desktop(使用WSL2 引擎 Use the WSL2 based Engine)

  1. Docker Hub获取centos相关的镜像

    使用Docker安装Centos,并通过SSH连接到容器

  2. 选择Offical image的镜像

    使用Docker安装Centos,并通过SSH连接到容器

  3. 从Tags中找到合适镜像,并复制命令,在cmd中运行命令

    使用Docker安装Centos,并通过SSH连接到容器

    使用Docker安装Centos,并通过SSH连接到容器

    使用Docker安装Centos,并通过SSH连接到容器

    然后就可以在Docker Desktop软件中看到此镜像

    使用Docker安装Centos,并通过SSH连接到容器

  4. 使用此镜像启动容器 使用的命令:

    docker run -itd --privileged --name my_centos7 -p 50003:22 centos:7 /usr/sbin/init

    该命令的操作是为此容器定义了一个my_centos7的名字,同时将该容器的22端口绑定到主机50003端口,并以特权模式在后台启动。如果对命令不太了解可以去Docker 命令大全 | 菜鸟教程 (runoob.com)查看。 运行之后获取到此容器的id,如图: 使用Docker安装Centos,并通过SSH连接到容器

  5. 进入容器 使用的命令:

    docker exec -it my_centos7 /bin/bash

    使用exec的原因是因为容器以特权模式启动,使用attach的话貌似会有问题。还不太了解,一直在使用exec操作 运行之后的结果,如图:

    使用Docker安装Centos,并通过SSH连接到容器 

  6. 进行一些初始的操作,对系统进行升级

    yum update

    然后回输出一些需要升级的东西,并询问是否升级安装,输入y确定升级。等待升级完成(如果中途出现了询问y/n的情况,输入y即可)。(Docker中的centos7中安装软件的时候会自动查找最快的镜像站,所以下载速度还是挺快的,不需要配置镜像源。实际的系统应该也是这样吧。)

  7. 安装需要的软件

    使用的命令:

     #安装openssh-server
     yum install openssh-server -y
     #安装需要用到的软件vim用于编辑文件、passwd用于设置root或其他用户的密码、openssh-clients用于让此容器可以使用ssh命令、net-tools我暂时只是用来查看ip
     yum install vim passwd openssh-clients net-tools

    等待安装即可。

  8. 查看ssh服务的状态

    systemctl status sshd

    使用Docker安装Centos,并通过SSH连接到容器

    当前还是关闭的。

    启动ssh服务(此处用到的systemctl命令是在特权模式下才能起作用的,也就是在启动时时候加了 --privileged 选项。)

    systemctl start sshd

    再次查看,可以看到已经运行了

    使用Docker安装Centos,并通过SSH连接到容器

    将ssh服务加入到自启项。

    systemctl enable sshd

    如果想停止服务,则使用下面的命令

    systemctl stop sshd

    如果先移除ssh的自启,则使用这条命令

    systemctl disable sshd
  9. 编辑ssh的配置文件

    vim /etc/ssh/sshd_config

    将 Port 22、ListenAddress 0.0.0.0、ListenAddress :: 前面的#号去掉(即取消这几行的注释)

    使用Docker安装Centos,并通过SSH连接到容器

    将PermitRootLogin yes、PubkeyAuthentication yes的注释去掉(可以使用vim的搜索功能,即在普通模式下输入 /Per 即可查找到)

    使用Docker安装Centos,并通过SSH连接到容器

    编辑完成之后按esc回到普通模式,输入 :wq 保存并退出。

  10. 为root用户设置密码

    执行命令:

    passwd root

    接下来输入两次密码(是看不到的)。

  1. 重启ssh,并测试通过主机连接容器

    systemctl restart sshd

    通过主机连接容器(该操作在Windows的环境下进行)

    ssh root@localhost -p 50003

    因为前面我们把容器的22端口绑定到了宿主机的50003端口上,所以在连接时不能够直接使用

    shh root@localhost 要在后面说明通过端口50003连接,即加上 -p 50003.

    成功之后会出现这个询问,输入yes

    使用Docker安装Centos,并通过SSH连接到容器

    然后会让输入root的密码,即可连接

    使用Docker安装Centos,并通过SSH连接到容器

    连接成功之后,使用uname -a,可以看到现在是Linux,结果如下图:

    使用Docker安装Centos,并通过SSH连接到容器

  1. 退出ssh连接,使用exit命令退出ssh连接(退出容器也是用exit命令)

    exit

    结果如下:

    使用Docker安装Centos,并通过SSH连接到容器

  1. 利用此容器做成本地镜像,方便以后部署同样的环境

    docker commit my_centos7 centos:ssh

    此命令是用已有的容器(my_centos7)生成镜像,名为centos,tag为ssh

    可以看到在Docker Desktop的Images中有了name为centos,tag为ssh的镜像使用Docker安装Centos,并通过SSH连接到容器

  2. 注:当使用此容器生成的镜像来生成新的容器的时候依旧需要使用特权模式,并绑定一个新的端口。

使用Docker安装Centos,并通过SSH连接到容器