MacOS系统下Docker客户端安装CentOS容器

1,102 阅读2分钟

CentOS

1.安装镜像并创建容器;

CentOS镜像库地址

# 1.拉取指定版本的 CentOS 镜像
$ docker pull centos:centos8
# 2.查看本地镜像
$ docker images
# 3.运行容器
$ docker run -itd -p 7050:22 --name centos-sls --privileged=true centos:centos8 /sbin/init
# 4.进入容器
$ docker exec -it centos-sls /bin/bash
# 退出容器(或者用快捷键: ctrl+d)
$ exit
# 查看ip地址
$ docker inspect centos-dev
# ---------->start
# "Networks": {
#     "bridge": {
#         "Gateway": "172.17.0.1",
#         "IPAddress": "172.17.0.3"
#     }
# }
# ---------->end

2.配置docker容器支持SSH

让Mac本地计算机支持 SSH KEY 连接centos容器。

# 1.安装net-tool支持ifconfig查看ip地址
$ yum install -y net-tools.x86_64

# 2.检查是否安装过 sshd/ssh
# 查询一个安装包是否安装:rpm -qa
$ rpm -qa | grep sshd
$ rpm -qa | grep ssh
# 查找ssh先关的信息
# netstat显示各种网络相关信息
$ netstat -tnlp | grep ssh
# ---------->start
# -q 是查询一个包是否安装
# -a 查询所有已经安装的软件包。
# -t (tcp)仅显示tcp相关选项
# -u (udp)仅显示udp相关选项
# -n 拒绝显示别名,能显示数字的全部转化成数字。
# -l 仅列出有在 Listen (监听) 的服務状态
# -p 显示建立相关链接的程序名
# -r 显示路由信息,路由表
# -e 显示扩展信息,例如uid等
# -s 按各个协议进行统计
# -c 每隔一个固定时间,执行该netstat命令。
# ---------->end

# 3.安装 openssh-server
# openssh-server:用于开启 ssh 服务供外部连接
$ yum install -y openssh-server

# 4.更改sshd的配置
# 编辑文件/etc/ssh/sshd_config,大概从 29 行开始主要更改三处,更改后内容如下:
# ---------->start
# 允许登录root用户:
# PermitRootLogin yes 
# 可以使用ssh公钥许可:
# PubkeyAuthentication yes 
# 设置公钥信息保存到文件.ssh/authorized_keys中:
# AuthorizedKeysFile .ssh/authorized_keys 
# ---------->end
$ vi /etc/ssh/sshd_config
# 保存并退出
esc->:wq

# 5.安装service,用于启动ssh
$ yum install -y initscripts 

# 6.启动ssh服务
$ service sshd restart
# 或者使用如下命令启动ssh
# /bin/systemctl restart sshd.service
# systemctl restart sshd.service

# 7.检查启动的网络服务是否有ssh
$ netstat -antp | grep sshd

# 8.将Mac本地ssh公钥添加到docker的centos容器中
# 8.1 定位到home目录,并创建.ssh/authorized_keys文件
$ cd home 
$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys
# 8.2 查看Mac本地计算机的ssh公钥,添加到centos容器的~/.ssh/authorized_keys文件中:
$ cat ~/.ssh/id_rsa.pub
$ vi ~/.ssh/authorized_keys
esc->:wq

# 退出容器: 完成SSH访问支持的添加,ctrl+d或使用如下命令->退出容器。
$ exit

# 9.重启容器centos-sls, 在Mac本地计算机上连接centos-sls
$ docker restart centos-sls
$ ssh -p 7050 root@localhost

让Mac本地计算机支持root用户密码登录来连接centos容器。

# 进入容器
$ docker exec -it centos-sls /bin/bash

# 1.编辑文件/etc/ssh/sshd_config禁用空密码
$ vi /etc/ssh/sshd_config
#------------>start
# 打开允许空密码选项的注释, 值设置为no
# PermitEmptyPasswords no
#------------>end
# 保存并退出
esc->:wq

# 2.安装passwd
yum install -y passwd
# 3.执行命令修改root密码:
passwd root
# 密码设置为:[asdjkl1120]

# 4.重启docker容器以生效
$ docker restart centos-sls
$ ssh -p 7050 root@localhost

3.根据容器生成支持SSH的镜像

上面配置了支持SSH连接的centos-sls容器,为了快速复制多个容器,可根据centos-sls的配置生成一个新的支持SSH的镜像备份,最终通过备份镜像很方便快捷的创建多个容器。

  1. 根据配置好的支持SSH服务的容器生成支持SSH的镜像centos8-ssh;
# 1.查看centos容器的id("CONTAINER ID"),并复制这个ID号,比如“1df1ec9d43c0”
docker ps -a

# 2.执行下面的命令, 将修改了的contos容器提交,并生成新版本的centos镜像centos-sls
$ docker commit -m 'gen ssh server' -a 'ethan' 1df1ec9d43c0 centos8-ssh
# -m: 指定提交信息
# -a: 指定提交者

# 3.删除无用的镜像
# 查看新生成的镜像
$ docker image ls
# 此时之前创建的容器就没用了,通过命令删除无用的镜像
$ docker rm centos-tmp
  1. 根据新镜像centos8-ssh,创建并启动支持SSH的容器。
# 1.通过centos-sls镜像,创建支持ssh的容器
$ docker run -d -p 7050:22 --name server-sls centos8-ssh /usr/sbin/sshd -D
#------------>start
# -d:后台运行
# -p: 端口映射(7050:22)
# -name image: 指定容器名称+镜像名称
# /usr/sbin/sshd -D:指定容器启动使用的应用及参数
#------------>end

# 2.Mac本地计算机连接centos服务
$ ssh -p 7050 root@localhost
连接SSH遇到的问题
mac@me ~ % ssh -p 7050 root@localhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:xxxx....
Please contact your system administrator.
Add correct host key in /Users/x/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/x/.ssh/known_hosts:7
ECDSA host key for [localhost]:7050 has changed and you have requested strict checking.
Host key verification failed.

打开Mac本地计算机的~/.ssh/known_hosts文件,删除冲突的hostname对应的指纹信息。