Docker安装CentOS容器并使用SSH工具远程连接

一、前言

        公司采购了一台群晖NAS服务器(型号:1821+),本想使用套件中心的VM虚拟机搭建开发测试环境,实际搭建后,发现虚拟机依赖服务器硬件配置,导致服务器CPU、内存占用很高,已经影响了服务器其他软件的运行,且对服务器的压力很大,于是放弃了使用虚拟机搭建测试环境的方式。

        随即想到采用Docker容器搭建linux系统,因为docker容器的资源占用极低,且不依赖硬件资源。动手搭建了几套centos系统,发现由于容器机制,很多linux系统命令无法执行,不能通过xshell连接操作,这是肯定无法接受的。查阅相关资料一大堆,头都大了。经过多次试验,终于成功搞定,下面给大家推荐一下安装步骤。

二、安装步骤

1、下载镜像

      推荐镜像下载地址:Docker Hubhttps://registry.hub.docker.com/r/jdeathe/centos-ssh/      该镜像带有ssh远程连接所需服务,容器安装后即可通过xshell等工具远程连接,不需要手动安装ssh服务。默认ssh登录方式为证书登录。

       这是我选择安装的版本↓

      

        该版本为CentOS Linux release 7.9

 2、群晖Docker启动容器

        由于我是使用的群晖自带的Docker容器套件,所以可以很方便的配置启动参数。

        注:非群晖服务器安装只需要添加相应的启动参数即可,在DockerHub镜像页面有详细的说明文档,此处省略。

        首先配置端口映射(图中2201端口是ssh远程连接端口):

        

        再配置启动参数:

        

        启动参数只需要配置SSH_AUTHORIZED_KEYS和SSH_USER就可以,SSH_AUTHORIZED_KEYS是SSH远程登录需要提供证书的公钥,SSH_USER是远程登录用户。

        如果启动时不指定登录证书公钥,也可以在容器启动后,宿主机通过docker exec命令进入容器,手动将证书公钥添加到/root/.ssh/authorized_keys,添加后就可以使用ssh工具远程登录。

 ssh连接:

 上图中主机ip指的是宿主机IP地址,端口号为容器22端口映射到宿主机的端口

 注:至此,群晖安装的容器可以远程连接使用了。但是!!!!

使用中你会发现一个坑爹的问题:Failed to get D-Bus connection: Operation not permitted

使用systemctl命令时,会提示这个错误,如果你需要使用涉及linux内核的命令(比如: systemctl),那么继续往下看,手动启动容器。

3、手动启动容器(非群晖)

        接第1步,下载镜像后,使用docker run命令启动容器

docker run -tdi -p 2205:22 --privileged --name centos-05 \
--env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
--env SSH_AUTHORIZED_KEYS="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwbBENS79kN633p72vzpVShwBcTdTG34ybXDCycqIEUda+LMxB54qHaHXbeVEiZ9350MIRbrbKnEWD63XMvS74mFt5I9ELN66SHXA45oPXIeTR1FQFtFXj/O2yFgxBKdqNnrkhWAg8X/7mOrrwa3S8rSvFchvRupIxTGE5LaEwaFgM1bc7V+PoAICPrIRfCggP6CKkZlEB3P2BVwvmrCoJzWoradP9ccqx2h6SgyOsigPak5Cx1jFpF4xCbZfHAZkqIu8cz5LIf6kudbIsabGsrGs8hKFOBVsMEMpKiCHbtHYvlYwYxLgUXOl7tBXWEsNbeVuVmrozCILugJlVvdBEw== OpenSSH-rsa-import-081621" \
--env SSH_USER=root \
--env SSH_AUTOSTART_SSHD=true \
--env SSH_AUTOSTART_SSHD_BOOTSTRAP=true \
--env SSH_AUTOSTART_SUPERVISOR_STDOUT=true \
--env SSH_CHROOT_DIRECTORY=%h \
--env SSH_INHERIT_ENVIRONMENT=false \
--env SSH_PASSWORD_AUTHENTICATION=false \
--env SSH_SUDO="ALL=(ALL) ALL" \
--env SSH_TIMEZONE=UTC \
--env SSH_USER_FORCE_SFTP=false \
--env SSH_USER_HOME=/home/%u \
--env SSH_USER_SHELL=/bin/bash \
jdeathe/centos-ssh:centos-7-2.5.1 /usr/sbin/init 

可以看到,容器成功启动,打印出了容器ID。

解决Failed to get D-Bus connection: Operation not permitted错误的关键,就在于使用特权参数 --privileged来启动,这样创建出来的容器中,就可以执行systemctl命令了。

这时还不能使用ssh工具远程连接,接下来使用 docker exec 命令进入容器。

docker exec -it -u root a91cacdcdb7f /bin/bash

进入容器后执行如下命令

/usr/bin/supervisord --configuration=/etc/supervisord.conf

 命令执行中会反复出现如下错误,提示端口被占用,直接ctrl + c结束命令即可

最后一步,重启sshd服务

systemctl restart sshd

 到这里就可以使用ssh工具远程连接了。

4、更换yum源

        如果通过上面的步骤,您已经可以连接到容器内的系统,那么你很快就会发现,无法通过yum命令安装软件,往下照着做~

        

  更新yum

yum update

  报错:Cannot find a valid baseurl for repo: ius/x86_64

  

   不慌,找到yum源配置文件

cd /etc/yum.repos.d/

   移除以下配置文件

mv ius-dev.repo ius-dev.repo.bak
mv ius.repo ius.repo.bak
mv ius-archive.repo ius-archive.repo.bak
mv ius-testing.repo ius-testing.repo.bak

    增加华为云yum源配置信息

sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/CentOS-Base.repo
sed -i "s/mirrorlist=http/#mirrorlist=http/g" /etc/yum.repos.d/CentOS-Base.repo
sed -i "s@http://mirror.centos.org@https://repo.huaweicloud.com@g" /etc/yum.repos.d/CentOS-Base.repo

   依次执行

yum clean all
yum makecache
yum update

如果yum update命令报错,修改dns,在/etc/resolv.conf中增加:nameserver  8.8.8.8

vi /etc/resolv.conf

  

然后你就可以使用yum命令随意安装软件了,至此,这个docker容器搭建的linux系统可以满足使用需求了,尽情的蹂躏它吧~

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶丿山有木兮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值