Docker之SSH服务的镜像
浏览量:1151
一般情况下,系统运维会通过SSH服务来管理操作系统,但是docker的很多镜像是不带ssh服务的,之前我们讲过用Nsneter,attach ,exec等命令进入,但是这些命令无法解决远程管理容器,那么这个时候我们就需要创建一个带有ssh服务的镜像,下面我们介绍两种方法基于commit 和dockerfile创建。
一、基于commit命令创建
docker提供commit命令支持用户提交自己的修改,并生成新的镜像。命令格式为:
docker commit CONTAINER [REPOSTORY[:TAG]]
这里我们以centos镜像为例。
1.1 创建一个容器
$ docker run --name sshd -it centos
1.2 安装sshd
$ yum -y install openssh-server $ yum -y install openssh-clients
1.3 启动sshd服务
$ /usr/sbin/sshd -D
报错:
Could not load host key: /etc/ssh/ssh_host_rsa_key Could not load host key: /etc/ssh/ssh_host_ecdsa_key Could not load host key: /etc/ssh/ssh_host_ed25519_key
解决:
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" $ ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" $ ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
再次启动:
$ /usr/sbin/sshd -D &
1.4 编辑sshd_config配置文件
110 UsePAM no
1.5 修改密码
[root@a06b74ee8ba2 ~]# passwd root Changing password for user root. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.
注意:如果没有passwd 命令 可以执行: yum install passwd
1.5 退出并提交镜像
$ docker commit -m "sshd" a06b74ee8ba2 youngcheung/sshd
1.6 启动容器
$ docker run -d -p 10022:22 youngcheung/sshd /usr/sbin/sshd -D
1.7 登录测试
[root@linux-node1 ~]# ssh 192.168.56.10 -p 10022 root@192.168.56.10's password: [root@ecd88ab5f28b ~]#
挂载一个主机目录作为数据卷
使用-v标记也可以指定挂载一个本地的已有目录到容器中去作为数据卷:
$ docker run -d -p 10022:22 --name web -v /usr/webapp:/opt/webapp youngcheung/sshd:latest /usr/sbin/sshd -D
方便测试程序放在本地并且在容器中可以使用
二、Dockerfile创建sshd
2.1 创建工作目录及相关文件
[root@linux-node1 ~]# mkdir /opt/dockerfile/sshd [root@linux-node1 ~]# cd /opt/dockerfile/sshd/ [root@linux-node1 sshd]# touch Dockerfile run.sh
2.2 编写run.sh脚本
[root@linux-node1 sshd]# cat run.sh #!/bin/sh /usr/sbin/sshd -D
2.3 编写Dockerfile文件
#This dockerfile is sshd FROM centos MAINTAINER zhangyang zhang1@afocus.com.cn RUN yum install tree vim net-tools openssh-server openssh-clients -y && \ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && \ ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" &&\ ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config RUN echo '123456' | passwd --stdin root ADD run.sh /root/run.sh RUN chmod +x /root/run.sh EXPOSE 22 CMD ["/root/run.sh"]
2.4 创建镜像
$ docker build -t youngcheng/sshd:v1 /opt/dockerfile/sshd/
创建成功,镜像ID为c1fc484f7b90
2.5测试运行镜像
$ docker run -d -p 10023:22 youngcheng/sshd:v1
2.6 测试连接
[root@linux-node1 sshd]# ssh 192.168.56.10 -p 10023 root@192.168.56.10's password: Last login: Thu Jul 27 10:21:29 2017 from 192.168.56.10 [root@2cea410c0d74 ~]#
效果和上面commit一样,创建成功!

神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。