设为首页 收藏本站
查看: 597|回复: 0

[经验分享] 创建一个支持 sshd 服务的 docker 镜像

[复制链接]

尚未签到

发表于 2018-5-26 10:29:11 | 显示全部楼层 |阅读模式
前言
  当我们运行容器后,第一件会想到的事情,就是如何连接容器。一般来说,连接容器的方式大概有四种。分别是attach、exec、ssh 和 nsenter.
  attach 和 exec 都是 docker 自带的命令,不需要做任何配置。
  这篇文章,主要尝试配置一个实现 sshd 服务的镜像。并用这个镜像生成容器,然后验证 ssh 登录的功能。

操作过程

环境说明
  宿主机 :   ubunt:16.04

用 Dockerfile 文件建立一个镜像

hell@hell:~/mysshd_ubuntu$ cat Dockerfile
FROM ubuntu:16.04
MAINTAINER hellochenpro  hellochenpro@hotmail.com
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   hell@127.0.0.1   -p   10035  -f   id_rsa   # 在宿主机通过端口10035 登录容器,使用 id_rsa 密钥文件

  成功!

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481264-1-1.html 上篇帖子: iHealth基于Docker的DevOps CI/CD实践 下篇帖子: Docker的安装及镜像管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表