本章节给为大家分享一篇,如何在容器中创建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版本太高问题):
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:
dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos
dnf distro-sync
问题解决过后,继续执行升级命令,并等待升级完成。
升级完成后安装一些需要的软件。
如下,见下个章节介绍。
安装必要软件
# 安装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 ::
前面的#号去掉(即取消这几行的注释)
最终效果显示如下:
Port 22
AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
将 PermitRootLogin yes
、PubkeyAuthentication yes
的注释去掉。 结果如下:
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服务 等部署学习。