Docker 为镜像添加SSH服务--基于commit命令
前言
本文主要介绍学习docker的过程中为容器添加ssh服务的的方法,主要用于记录和分享,以备后续使用的时候查看。
本次以Ubuntu镜像作为基础镜像。
1. 获取Ubuntu镜像
获取Ubuntu镜像,并创建一个容器:$ docker pull ubuntu:18.04
$ docker run -it ubuntu:18.04 bash
root@mc1432dk8uhg:/#
2. 检查软件源,更新软件源信息
root@mc1432dk8uhg:/# apt-get update
3.安装和配置SSH服务
这里选择了主流的openssh-server作为服务端。
root@mc1432dk8uhg:/# apt-get install openssh-server
如果需要正常启动SSH服务,则目录/var/run/sshd
必须存在。下面手动创建它,并启动SSH服务:
root@mc1432dk8uhg:/# mkdir -p /var/run/sshd
root@mc1432dk8uhg:/# /usr/sbin/sshd -D &
[1] 2243
此时查看容器的22端口,可见此端口已经处于监听状态:
root@mc1432dk8uhg:/# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreihn Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 :::22 ::::* LISTEN -
修改SSH服务的安装登录限制,取消pam登录限制:
root@mc1432dk8uhg:/# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
在root
目录下创建.ssh
目录,并复制需要登录的公钥信息到authorized_keys
文件中:
root@mc1432dk8uhg:/# mkdir root/.ssh
root@mc1432dk8uhg:/# vi /root/.ssh/authorized_keys
在客户端主机(也就是将来要访问容器的主机上)查看.ssh
文件夹下有没有id_rsa.pub
文件,如果 没有则需要执行
[root@pc ~]# ssh-keygen
命令生成,此命令执行过程中若不想输入密码,可以一路回车。然后查看id_rsa.pub
文件内容复制到authorized_keys
中:
[root@pc ~]# cat ~/.ssh/id_rsa.pub
如果需要添加多个客户主机公钥到authorized_keys
中,依次复制粘贴进去即可。
创建自动启动SSH服务的可执行文件run.sh
(部署容器的时候会用到),并添加可执行权限:
root@mc1432dk8uhg:/# vi /run.sh
root@mc1432dk8uhg:/# chmod +x run.sh
run.sh脚本内容如下:
#!/bin/bash
/usr/sbin/sshd -D
最后退出容器:
root@mc1432dk8uhg:/# exit
4. 保存镜像
将所推出的容器用docker commit命令保存为一个新的sshd:ubuntu镜像。
$ docker commit mc1432 sshd:ubuntu
$ docker images
5. 使用镜像
启动容器,并添加端口映射10022 -->>22.其中10022是宿主机端口,22是容器的SSH服务服务监听端口:
$ docker run -p 10022:22 -d sshd:ubuntu /run.sh
$ docker ps
在宿主机或者其他已经添加公钥的主机上,可以通过访问10022端口来登录容器:
ssh 192.168.1.200 -p 10022
总结
除此之外还可以使用Dockerfile来创建,先挖个坑,等以后有时间再来填~
欢迎各位大佬批评指正!