创建一个支持 sshd 服务的 docker 镜像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建一个支持 sshd 服务的 docker 镜像相关的知识,希望对你有一定的参考价值。

前言

当我们运行容器后,第一件会想到的事情,就是如何连接容器。一般来说,连接容器的方式大概有四种。分别是attach、exec、ssh 和 nsenter.

attach 和 exec 都是 docker 自带的命令,不需要做任何配置。

这篇文章,主要尝试配置一个实现 sshd 服务的镜像。并用这个镜像生成容器,然后验证 ssh 登录的功能。

操作过程

环境说明

宿主机 : ubunt:16.04

用 Dockerfile 文件建立一个镜像

[email protected]:~/mysshd_ubuntu$ cat Dockerfile 
FROM ubuntu:16.04

MAINTAINER hellochenpro  [email protected]
ENV REFRESHED_AT 2018-02-02

RUN apt-get -qqy update &&          apt-get install -qqy openssh-server &&                  apt-get autoclean &&                  apt-get autoremove &&                  rm -rf /var/lib/apt/lists/*

RUN useradd -s  /bin/bash hell
RUN echo ‘hell:123456‘ | chpasswd

COPY  id_rsa.pub  /home/hell/.ssh/authorized_keys

RUN   chmod 700 /home/hell/.ssh/ &&            chmod 600 /home/hell/.ssh/authorized_keys &&                      chown  -R  hell:hell   /home/hell/.ssh

RUN mkdir -p /var/run/sshd

EXPOSE 22

CMD /usr/sbin/sshd -D

Dockerfile 说明:
用ubuntu:16.04 的原生系统创建,
先用 apt-get 更新源,并安装了 openssh-server
然后,创建了一个用户 hell
接着,将 Dockerfile 上下文环境的 id_rsa.pub 公钥复制到 镜像中,
并且将 /home/hell/.ssh 和 authorized_keys 目录和文件的权限,所属组、所属主都进行修改,否则实现不了免密码登录
然后,将容器的22端口暴露;
最后,以后台守护进程的方式运行 sshd 服务

创建容器

先准备秘钥对
ssh-keygen   -t   rsa  -b  2048   # 一路回车确认,然后将公钥 id_rsa.pub 放到 Dockerfile 目录(上下文)环境
开始创建镜像
 docker  build   --rm  -t   my_sshd    .
 # 创建成功 my_sshd 镜像
启动镜像
docker  run  -d   -p   10035:22   --name container_sshd   my_sshd
# 启动一个容器 container_sshd 
尝试用 ssh 登录容器
ssh   [email protected]   -p   10035  -f   id_rsa   # 在宿主机通过端口10035 登录容器,使用 id_rsa 密钥文件

成功!

总结

其实,一般不推荐使用 ssh 的方式登录容器,因为这样和一个容器只运行一个进程的原则相违背。详细的讨论请移步这篇文章《为什么不需要在 Docker 容器中运行 sshd》

以上是关于创建一个支持 sshd 服务的 docker 镜像的主要内容,如果未能解决你的问题,请参考以下文章

系列2使用Dockerfile创建带sshd服务的Centos Docker镜像

docker创建sshd服务(最简单)

用dockerfile创建支持ssh服务的centos镜像

docker为centos镜像添加sshd服务

docker 之 commit提交sshd镜像

Docker:创建支持ssh服务的镜像!!!