Docker-为镜像添加SSH服务
进入容器的办法有很多,包括exec、attach等命令,但是这些命令都无法解决远程管理容器的问题,因此,需要SSH的支持
基于commit命令创建
docker提供了docker commit命令,支持用户提交自己对指定容器的修改,并生成新的镜像。命令格式为docker commit CONTAINER [REPOSITORY[:TAG]]
Centos6开启SSH服务
启动容器
1 | FengZhen$ docker run -it --name centos6 centos:6 /bin/bash |
-t选项让docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开
当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载
(2)利用镜像创建并启动一个容器
(3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
(4)从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
(5)从地址池配置一个 ip 地址给容器
(6)执行用户指定的应用程序
(7)执行完毕后容器被终止
查看centos版本信息
1 2 | [root@ee8961b00872 /]# cat /etc/redhat-release CentOS release 6.9 (Final) |
修改root密码
使用passwd来修改密码(如果没有这个命令,使用yum install passwd安装)
1 2 3 4 5 6 7 | [root@ee8961b00872 /]# passwd Changing password for user root. New password: BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully. |
安装Openssh
使用下面的命令安装ssh server / ssh client
1 2 | [root@ac1a6c198331 /]# yum -y install openssh-server [root@ac1a6c198331 /]# yum -y install openssh-clients |
修改SSH配置文件以下选项,去掉#注释,将四个选项启动
1 2 3 4 5 | [root@ac1a6c198331 /]# vi /etc/ssh/sshd_config RSAAuthentication yes #启用 RSA 认证 PubkeyAuthentication yes #启用公钥私钥配对认证方式 AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同) PermitRootLogin yes #root能使用ssh登录 |
重启SSH服务,并设置开机启动
1 2 3 4 5 6 7 8 | [root@ee8961b00872 /]# service sshd restart Stopping sshd: [FAILED] Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ] [root@ee8961b00872 /]# chkconfig sshd on |
退出容器并保存更改
exit
现在容器已经改变了,使用docker commit 命令来提交更新后的副本
1 2 | FengZhen$ docker commit -m 'install openssh' -a 'Docker FZ' ee8961b00872 centos6:ssh sha256:c524261c526e33f69c88137c40cd3b37b47fe28456e18829f17c10172c37a8cc |
其中,-m来指定提交的说明信息, -a可以指定更新的用户信息
启动新的容器并打通22端口
1 2 | FengZhen$ docker run -d -p 50001:22 centos6:ssh /usr/sbin/sshd -D b32b35215f14fd97ccee644a2aacd36027db975001d8e58fe332c7f52f7cf2f2 |
1 2 3 | FengZhen$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b32b35215f14 centos6:ssh "/usr/sbin/sshd -D" 8 minutes ago Up 8 minutes 0.0.0.0:50001->22/tcp |
端口成功绑定到宿主主机50001上
ssh连接容器
1 2 3 4 5 6 7 | FengZhen$ ssh root@localhost -p 50001 The authenticity of host '[localhost]:50001 ([::1]:50001)' can't be established. RSA key fingerprint is SHA256:qvyvwqtXimyC+lN1fiLENbpgdjgO9tvCT89hs/DUhBY. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[localhost]:50001' (RSA) to the list of known hosts. root@localhost's password: [root@b32b35215f14 ~]# |
成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示