为Docker镜像添加SSH服务
一、基于commit命令创建
1、 首先下载镜像
$ docker run -it ubuntu:16.04 /bin/bash
2、 安装SSH服务
#更新apt缓存 root@5ef1d3163265:/# apt-get update root@5ef1d3163265:/# apt-get install openssh-server -y
3、 配置SSH服务:如果需要正常启动SSH服务,则需手动创建/var/run/sshd目录,并启动ssh服务。
1) 创建目录
root@5ef1d3163265:/# mkdir -p /var/run/sshd
2) 启动ssh服务
root@5ef1d3163265:/# /usr/sbin/sshd -D &
3) 修改SSH服务的安全登录设置,取消pam登录限制
root@5ef1d3163265:/# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
4) 在/root下创建.ssh目录
root@5ef1d3163265:/# mkdir /root/.ssh
5) 创建文件/root/.ssh/authorized
root@5ef1d3163265:/# vim /root/.ssh/authorized
6) 将宿主机的.ssh目录下的id_rsa.pub内容全部copy到authorizedj里
4、 在docker镜像里添加运行脚本run.sh
root@5ef1d3163265:/# vim run.sh 【/run.sh】 #!/bin/bash /usr/sbin/sshd -D &
# 退出镜像 root@5ef1d3163265:/# exit
5、 用docker commit命令保存镜像
# 查看刚刚运行的镜像的CONTAINER ID,复制一会有用 $ docker ps -a # 5ef1d3163265为刚刚运行的ubuntu的CONTAINER ID $ docker commit 5ef1d3163265 sshd:ubuntu # 查看镜像 $ docker images
6、 使用刚刚创建的镜像sshd:ubuntu
# 启动容器,并添加端口映射,6666是宿主机的端口,22是窗口的端口 $ docker run -p 6666:22 -d sshd:ubuntu /run.sh # 查看容器运行情况 $ docker ps
7、 宿主机连接容器
#采用以下两个方法都可以连接 $ ssh root@localhost -p 6666 $ ssh 172.17.0.2 -p 6666 //此处的IP为容器IP,查看方法: docker inspect + 容器ID | grep IP
二、 使用Dockerfile创建基于带有ssh的镜像
1、 创建Dockerfile根目录
$ mkdir sshd_ubuntu $ cd sshd_ubuntu
2、 编写run.sh脚本
$ vim run.sh 【run.sh】 #!.bin/bash /usr/sbin/sshd -D
3、 创建authorized_keys文件
$ ssh-keygen $ cat ~/.ssh/id_rsa.pub >authorized_keys
4、 复制/var/pam.d/sshd到Dockerfile目录下
$ sudo cp /var/pam.d/sshd ./ $ sudo vim sshd # 注释以下一行 # session required pam_loginuid.so
5、 编写Dockerfile
#设置继承镜像 FROM ubuntu:latest #作者信息 MAINTERNET Foo Bar foo@bar.com #安装apt-utils和ssh RUN apt-get update RUN apt-get install -y apt-utils RUN apt-get update RUN apt-get install -y openssh-server RUN mkdir -p /var/run/sshd //容器中需有此目录后SSH服务方能运行 RUN mkdir /run/.ssh #复制文件到相应的目录 ADD sshd /var/pam.d/sshd ADD authorized_keys /root/.ssh RUN chmod 755 /run.sh # 开放端口 EXPOSE 22 #设置自启动命令 CMD 【“/run.sh”】
6、 创建镜像
jeff@node1:~/$ cd sshd_ubuntu jeff@node1:~/sshd_ubuntu$ docker build -t sshd:dockerfile .
7、 查看镜像
$ docker images
8、 测试镜像,运行容器
#启动镜像,并映射窗口的22端口到本地的6666端口 $ docker run -d -p 6666:22 #查看镜像 $ docker images
9、 在宿主机连接到新建的容器
$ ssh root@localhost -p 6666