2 22
快速构建支持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 ~~