晓夏

YoungCheung

Zhang Sir's technical way

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一样,创建成功!

神回复

发表评论:

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