快速构建支持SSH的Docker容器
在构建之前,我们先想一个问题:你需要ssh来干什么?
大部分需求是,你要检查日志,做备份,或者重启进程,调整配置,查看服务器情况,
虽然目前docker提供很多工具来做这些工作,但,为我们的容器提供SSH支持,也是不错的补充方案。
本文,省略了镜像,容器的构建、生产id_rsa的步骤,这些可以去谷歌查阅相关资料。
1. 在容器内安装SSH
我们这里选择了一个普通的ubuntu容器,名称叫ubdemo,进入容器内:
sudo docker exec -t -i ubdemo /bin/bash
进入ubdemo容器后,更新apt-get源
root@fc1:/# apt-get update
root@fc1:/# get-get install openssh-server
安装后, 创建相关文件夹:
root@fc1:/# mkdir -p /var/run/sshd
root@fc1:/# /usr/sbin/sshd -D &
查看服务是否启动成功
root@fc1:/# netstat -tunlp
如果发现22
端口信息,则服务启动启动
我们在root用户目录下创建.ssh
目录, 并复制需要登陆的公钥信息(在宿主机的.ssh/id_rsa.pub中)到authorized_keys中
root@fc1:/# mkdir root/.ssh
root@fc1:/# vi /root/.ssh/authorized_keys
打开authorized_keys后,把宿主机 .ssh/id_rsa.pub
的内容拷贝进去
创建自动启动SSH服务的脚本 (必须要授权执行的权限)
root@fc1:/# vi /run.sh
root@fc1:/# chmod -x run.sh
run.sh的内容如下:
#! /bin/bash
/usr/sbin/sshd -D
退出容器
root@fc1:/# exit
2.构建新的镜像
OK.. 我们是时候基于这个sshd的容器创建一个新的镜像, 加入这个容器的名字叫 ubdemo
apps@dockers:~$ sudo docker commit ubdemo sshd:ubuntu
这样我们就创建了一个新的镜像,这个新的镜像是基于我们原始容器安装SSH后构建起来的
3.构建新的容器
我们可以基于这个镜像运行一个具备ssh的容器了
apps@dockers:~$ sudo docker run -p 10022:22 -d sshd:ubuntu /run.sh
最好我们可以在宿主机ssh登陆这个docker容器了
ssh root@ip -p 10022 (可以通过sudo docker inspect sshd_ubdemo获取IP)
it work ~~