Docker怎么创建centos容器集群并实现远程登录功能


这篇“Docker怎么创建centos容器集群并实现远程登录功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Docker怎么创建centos容器集群并实现远程登录功能”文章吧。

Docker 创建centos容器集群并实现远程登录

0.拉取Docker镜像(Centos7官方版)

拉取官方镜像(这个镜像里面几乎什么都没有,很多依赖库需要自己配置,实实在在的“纯净版”。关注我,下期教你用ISO镜像文件使用dockerfile制作究极完整版docker镜像)

dockerpullcentos:centos7

1.搭建网桥加入网络

创建docker bridge网桥

搭建网桥可以方便管理结点,并且让结点同时位于同一个网段下

sudodockernetworkcreateNodeNetWork

创建三个不同端口的结点容器

zwb@test-algo:~$sudodockerrun-itd--restart=always--hostnamenode01--nameNode01-p50001:22-v/data/sda/sharedata:/share--networkNodeNetWork--privileged=truecentos:centos7/sbin/initzwb@test-algo:~$sudodockerrun-itd--restart=always--hostnamenode02--nameNode02-p50002:22-v/data/sda/sharedata:/share--networkNodeNetWork--privileged=truecentos:centos7/sbin/initzwb@test-algo:~$sudodockerrun-itd--restart=always--hostnamenode03--nameNode03-p50003:22-v/data/sda/sharedata:/share--networkNodeNetWork--privileged=truecentos:centos7/sbin/init#参数解释:#-itd#选项选项简写说明#–detach-d在后台运行容器,并且打印容器id。#–interactive-i即使没有连接,也要保持标准输入保持打开状态,一般与-t连用。#–tty-t分配一个伪tty,一般与-i连用。#--restart=always机器启动时自启动#--hostname初始化的hostname#-p50001:22端口映射宿主机端口:容器端口这里为22表示容器内ssh端口#--privileged=true通过特权模式进入docker,不仅可以使用systemctl命令(centos7系统),还可以开启ssh服务#--networkNodeNetWork将容器结点加入网桥中#注意:在LinuxDocker中无法使用systemd(systemctl)相关命令的原因是1号进程不是init,而是其他例如/bin/bash,所以导致缺少相关文件无法运行。(Systemhasnotbeenbootedwithsystemdasinitsystem(PID1).Can'toperat#解决方案:/sbin/init并且--privilaged=true一定要加上

2.配置机器网络环境并加入ssh

以Node01为例子,进入结点容器并配置网络环境并加入ssh

(base)zwb@test-algo:~$sudodockerexec-itNode01/bin/bash[root@aa92cb71e3ab/]#yum-yinstallnet-tools.x86_64Failedtosetlocale,defaultingtoC.UTF-8CentOSLinux8-AppStream26B/s|38B00:01Error:Failedtodownloadmetadataforrepo'appstream':Cannotprepareinternalmirrorlist:NoURLsinmirrorlist

可以看到我们在安装网络工具包的时候出错了,上面的报错信息意思是,从仓库 ‘appstream’ 下载元数据失败:由于镜像列表中没有 URL,不能准备内部镜像列表。

问题分析:

?第一种可能的情况便是网络连接问题。检查是否可以连接外部网络,可以使用 ping baidu 查看是否有丢包情况。如果丢包,则进一步检查网络连接是否正常;如果没有丢包,继续阅读下文
?那么第二种情况,便是 CentOS 已经停止维护的问题。2023 年 12 月 8 号,CentOS 官方宣布了停止维护 CentOS Linux 的计划,并推出了 CentOS Stream 项目,CentOS Linux 8 作为 RHEL 8 的复刻版本,生命周期缩短,于 2023 年 12 月 31 日停止更新并停止维护(EOL),更多的信息可以查看 CentOS 官方公告。如果需要更新 CentOS,需要将镜像从 mirror.centos.org 更改为 vault.centos.org
那么针对上面提到的第二种情况,给出的解决方法如下:

首先,进入到 yum 的 repos 目录

cd/etc/yum.repos.d/

其次,修改 centos 文件内容

sed-i's/mirrorlist/#mirrorlist/g'/etc/yum.repos.d/CentOS-*sed-i's|#baseurl=mirror.centos.org|baseurl=vault.centos.org|g'/etc/yum.repos.d/CentOS-*

然后,生成缓存更新(第一次更新,速度稍微有点慢,耐心等待两分钟左右)

yummakecache

最后,运行 yum update 并重新安装工具包、ssh网络环境和vim

yumupdate-yyum-yinstallnet-tools.x86_64yum-yinstallopenssh-serveryuminstallvim

安装passwd并修改root密码

yuminstallpasswd[root@aa92cb71e3abyum.repos.d]#passwdChangingpasswordforuserroot.Newpassword:Retypenewpassword:passwd:allauthenticationtokensupdatedsuccessfully.

重启docker

systemctlstopdockersystemctlstartdocker

查看容器

(base)zwb@test-algo:~$sudodockerps-aCONTAINERIDIMAGE&nbspMANDCREATEDSTATUSPORTSNAMES2b8fa155e71fcentos"/sbin/init"17minutesagoUp9seconds0.0.0.0:50003->22/tcp,:::50003->22/tcpNode0397041252bf37centos"/sbin/init"17minutesagoUp9seconds0.0.0.0:50002->22/tcp,:::50002->22/tcpNode02aa92cb71e3abcentos"/sbin/init"17minutesagoUp9seconds0.0.0.0:50001->22/tcp,:::50001->22/tcpNode01

开放宿主机防火墙

(base)zwb@test-algo:~$firewall-cmd--add-port=50022/tcp--permanentYou'reperforminganoperationoverdefaultzone('public'),butyourconnections/interfacesareinzone'docker'(see--get-active-zones)Youmostlikelyneedtouse--zone=dockeroption.Authorizationfailed.Makesurepolkitagentisrunningorruntheapplicationassuperuser.(base)zwb@test-algo:~$sudofirewall-cmd--add-port=50022/tcp--permanentYou'reperforminganoperationoverdefaultzone('public'),butyourconnections/interfacesareinzone'docker'(see--get-active-zones)Youmostlikelyneedtouse--zone=dockeroption.Warning:ALREADY_ENABLED:50022:tcpsuccess(base)zwb@test-algo:~$sudofirewall-cmd--reloadsuccess(base)zwb@test-algo:~$sudofirewall-cmd--list-portYou'reperforminganoperationoverdefaultzone('public'),butyourconnections/interfacesareinzone'docker'(see--get-active-zones)Youmostlikelyneedtouse--zone=dockeroption.50022/tcp

手动启动sshd

(base)zwb@test-algo:~$sudo/usr/sbin/sshd(base)zwb@test-algo:~$sudonetstat-antp|grepsshdtcp000.0.0.0:220.0.0.0:*LISTEN929/sshd:/usr/sbintcp076172.21.198.185:2210.3.16.31:53836ESTABLISHED127529/sshd:zwb[ptcp00127.0.0.1:50522127.0.0.1:38979ESTABLISHED127629/sshd:zwb@notcp00127.0.0.1:50510127.0.0.1:38979ESTABLISHED127629/sshd:zwb@notcp00172.21.198.185:2210.3.16.31:52932ESTABLISHED127260/sshd:zwb[ptcp600:::22:::*LISTEN929/sshd:/usr/sbin

若发生以下问题

问题

[root@79a70e3d26cd/]#/usr/sbin/sshdUnabletoloadhostkey:/etc/ssh/ssh_host_rsa_keyUnabletoloadhostkey:/etc/ssh/ssh_host_ecdsa_keyUnabletoloadhostkey:/etc/ssh/ssh_host_ed25519_keysshd:nohostkeysavailable--exiting.[root@79a70e3d26cd/]#

解决方案

执行:

#ssh-keygen-trsa-f/etc/ssh/ssh_host_rsa_key-N""#ssh-keygen-tecdsa-f/etc/ssh/ssh_host_ecdsa_key-N""#ssh-keygen-ted25519-f/etc/ssh/ssh_host_ed25519_key-N""

通过宿主机ip和端口远程连接容器

#这是在windows上的shell远程连接,可以看到已经通过ssh连接上了node01,aa92cb71e3ab表示的是Node01的docker容器idPSC:\Users\99140>sshroot@172.21.198.185-p50001Theauthenticityofhost'[172.21.198.185]:50001([172.21.198.185]:50001)'can'tbeestablished.ED25519keyfingerprintisSHA256:zqNzugPY6dYmLFlaDGFOfkxOF8qtY/a5mP0DXH7Vxbk.ThiskeyisnotknownbyanyothernamesAreyousureyouwanttocontinueconnecting(yes/no/[fingerprint])?yesWarning:Permanentlyadded'[172.21.198.185]:50001'(ED25519)tothelistofknownhosts.root@172.21.198.185'spassword:[root@aa92cb71e3ab~]#

3. 查看容器中自启项内容

[root@79a70e3d26cd~]#systemctllist-unit-files|grepenabledautovt@.serviceenabledgetty@.serviceenabledkdump.serviceenablednis-domainname.serviceenabledsshd.serviceenabledremote-fs.targetenableddnf-makecache.timerenabled[root@62435d2d7fd2~]#

容器在创建时通过----restart=always实现自启动 但还可以在使用on - failure策略时,指定Docker将尝试重新启动容器的最大次数

dockerrun--restart=on-failure:10xxx

最后重启测试一下自启动是否成功

reboot

最后在远程主机上ssh连接三台centos结点并查看其网络ip情况

#Node01PSC:\Users\99140>sshroot@172.21.198.185-p50001root@172.21.198.185'spassword:Lastlogin:TueMar2111:37:042023from10.3.16.31[root@aa92cb71e3ab~]#ifconfigeth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet172.18.0.4netmask255.255.0.0broadcast172.18.255.255ether02:42:ac:12:00:04txqueuelen0(Ethernet)RXpackets46bytes5625(5.4KiB)RXerrors0dropped0overruns0frame0TXpackets30bytes4929(4.8KiB)TXerrors0dropped0overruns0carrier0collisions0eth2:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet172.17.0.4netmask255.255.0.0broadcast172.17.255.255ether02:42:ac:11:00:04txqueuelen0(Ethernet)RXpackets11bytes946(946.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inet127.0.0.1netmask255.0.0.0looptxqueuelen1000(LocalLoopback)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0#Node02PSC:\Users\99140>sshroot@172.21.198.185-p50002root@172.21.198.185'spassword:Lastlogin:TueMar2111:37:162023from10.3.16.31[root@97041252bf37~]#ifconfigeth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet172.18.0.3netmask255.255.0.0broadcast172.18.255.255ether02:42:ac:12:00:03txqueuelen0(Ethernet)RXpackets46bytes5625(5.4KiB)RXerrors0dropped0overruns0frame0TXpackets29bytes4819(4.7KiB)TXerrors0dropped0overruns0carrier0collisions0eth2:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet172.17.0.3netmask255.255.0.0broadcast172.17.255.255ether02:42:ac:11:00:03txqueuelen0(Ethernet)RXpackets11bytes946(946.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inet127.0.0.1netmask255.0.0.0looptxqueuelen1000(LocalLoopback)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0#Node03PSC:\Users\99140>sshroot@172.21.198.185-p50003Theauthenticityofhost'[172.21.198.185]:50003([172.21.198.185]:50003)'can'tbeestablished.ED25519keyfingerprintisSHA256:JdfhD5YG8cVOheu8diTuPlByz+KKdjYtQW8c6/XL28I.ThiskeyisnotknownbyanyothernamesAreyousureyouwanttocontinueconnecting(yes/no/[fingerprint])?yesWarning:Permanentlyadded'[172.21.198.185]:50003'(ED25519)tothelistofknownhosts.root@172.21.198.185'spassword:[root@2b8fa155e71f~]#ifconfigeth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet172.18.0.2netmask255.255.0.0broadcast172.18.255.255ether02:42:ac:12:00:02txqueuelen0(Ethernet)RXpackets47bytes6271(6.1KiB)RXerrors0dropped0overruns0frame0TXpackets27bytes5135(5.0KiB)TXerrors0dropped0overruns0carrier0collisions0eth2:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet172.17.0.2netmask255.255.0.0broadcast172.17.255.255ether02:42:ac:11:00:02txqueuelen0(Ethernet)RXpackets11bytes946(946.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inet127.0.0.1netmask255.0.0.0looptxqueuelen1000(LocalLoopback)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0

其他常用工具命令

#安装ifconfigyuminstallnet-tools#修改hostnamehostnamectlset-hostname想要的名字#会报错误:Couldnotsetproperty:Failedtosetstatichostname:Deviceorresourcebusy,#exit退出重新进入容器即可

以上就是关于“Docker怎么创建centos容器集群并实现远程登录功能”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注主机评测网行业资讯频道。


上一篇:php class类内部函数如何调用

下一篇:Swoole同步请求如何使用


远程登录服务器 远程登录
Copyright © 2002-2019 测速网 https://www.inhv.cn/ 皖ICP备2023010105号 城市 地区 街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!
热门搜索