Docker下搭建Centos8并通过SSH链接

本章节给为大家分享一篇,如何在容器中创建centos8环境,可以用来学习或者模拟一些线上Centos8的操作,例如,来做配置ssh,sftp,web服务等。

下载centos镜像

首先下载centos8 镜像。

docker pull centos:centos8

启动镜像

docker run -itd --privileged --name centos-test -p 5022:22 centos:centos8 /usr/sbin/init

  • 该命令的操作是实例化一个容器,并定义了一个centtos-test名字。
  • 同时将该容器的22端口 绑定到 主机5022端口,注意并以特权模式在后台启动。

进入容器

docker exec -it centos-test /bin/bash

需要进入容器并执行下面操作。

容器的一些配置

当然这里可以使用Dockerfile 完成配置,并打包成为镜像。这里采用的是使用 docker commit 方式将容器形成本地镜像。

升级系统

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

yum update -y

如果遇到了下面问题(centos版本太高问题):

vbnet 复制代码
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream                                                                                                              55  B/s |  38  B     00:00
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

解决方法\]T o migrate from CentOS 8 to CentOS Stream 8, run the following commands: ```css dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos dnf distro-sync ``` 问题解决过后,继续执行升级命令,并等待升级完成。 升级完成后安装一些需要的软件。 如下,见下个章节介绍。 #### 安装必要软件 ```shell # 安装openssh-server yum install openssh-server -y # 安装需要用到的软件vim用于编辑文件、 # passwd用于设置root或其他用户的密码 # openssh-clients用于让此容器可以使用ssh命令 # net-tools我暂时只是用来查看ip yum install vim passwd openssh-clients net-tools -y ``` #### 启动ssh服务并加入自启动 查看ssh的服务状态。 `systemctl status sshd` 当前还是关闭的。 启动ssh服务(此处用到的`systemctl`命令是在特权模式下才能起作用的,也就是在启动时时候加了 `--privileged` 选项。) 执行启动命令 `systemctl start sshd` 再次查看,可以看到已经运行了。 将ssh服务加入到自启项。 `systemctl enable sshd` 如果想停止服务,则使用命令 `systemctl stop sshd` 如果想移除ssh的自启,则使用这条命令 `systemctl disable sshd` #### 编辑ssh的配置文件 下面我们开始ssh,用于从宿主机登录到容器中。 `vim /etc/ssh/sshd_config` 将 `Port 22`、`ListenAddress 0.0.0.0`、`ListenAddress ::` 前面的#号去掉(即取消这几行的注释) 最终效果显示如下: ```arduino Port 22 AddressFamily any ListenAddress 0.0.0.0 ListenAddress :: ``` 将 `PermitRootLogin yes`、`PubkeyAuthentication yes`的注释去掉。 结果如下: ```bash PermitRootLogin yes PubkeyAuthentication yes ``` 编辑完成之后按`esc`回到普通模式,输入 `:wq` 保存并退出。 #### 为root用户设置密码 执行命令 `passwd root` 然后会连续输入两次密码,密码看不到。 注意前后的密码要输入一致。 例如:我们设置密码为 `Newcoder123` #### 重启ssh,并测试通过主机连接容器 `systemctl restart sshd` 通过主机连接容器(该操作在宿主机上执行) `ssh root@localhost -p 5022` 退出ssh的方法和普通的链接一样使用`exit`命令 ### 利用此容器做成本地镜像,方便以后部署同样的环境 `docker commit centos-test centos:ssh` 此命令是用已有的容器(`centos-test`)生成镜像,名为`centos`,tag为`ssh` 然后执行 `docker images` 可以看到在`Images`列表中有了`name`为`centos`,`tag`为`ssh`的镜像。 ### 小结 这样我们就在容器中创建centos8环境,用来学习或者模拟一些centos8的操作。 后边,我们将会进行一些sftp,web服务 等部署学习。

相关推荐
Victor3563 小时前
MongoDB(2)MongoDB与传统关系型数据库的主要区别是什么?
后端
JaguarJack3 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端·php·服务端
BingoGo3 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端
Victor3563 小时前
MongoDB(3)什么是文档(Document)?
后端
牛奔5 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌10 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX11 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了11 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法12 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment12 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端