zoukankan      html  css  js  c++  java
  • 使用Docker安装Centos,并通过SSH连接到容器

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

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

    2. 选择Offical image的镜像

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

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

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

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

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

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

      docker exec -it my_centos7 /bin/bash

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

       
    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

      当前还是关闭的。

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

      systemctl start sshd

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

      将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 :: 前面的#号去掉(即取消这几行的注释)

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

      编辑完成之后按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

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

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

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

      exit

      结果如下:

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

      docker commit my_centos7 centos:ssh

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

      可以看到在Docker Desktop的Images中有了name为centos,tag为ssh的镜像
    2. 注:当使用此容器生成的镜像来生成新的容器的时候依旧需要使用特权模式,并绑定一个新的端口。

  • 相关阅读:
    01背包
    用动态规划求两个自然数的最大公约数
    编程实现文件的复制功能,要求源文件名及目标文件名在程序运行后根据提示输入
    this和super
    JAVA中static的使用
    结构化异常处理 笔记
    继承和多态 笔记
    javascript 客户端验证和页面特效制作 学习笔记
    定义封装的类类型 笔记
    C# 核心编程结构Ⅱ 笔记
  • 原文地址:https://www.cnblogs.com/MXming/p/15256954.html
Copyright © 2011-2022 走看看