您的位置:首页 > 运维架构 > Docker

Docker之创建SSH服务功能的镜像(commit方法)

2016-11-15 21:09 871 查看

基于commit命令的方式

//运行基于Ubuntu:14.04的镜像的容器

docker run -it --rm ubuntu:14.04 /bin/bash


//修改一下ubuntu14:04的源我用的是163的源

163源的内容是这

deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiversedeb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse


可以用这样的命令将上述内容追加到source.list文件中

echo 源内容 >> /etc/apt/source.list


sudo apt-get update
//更新安装源

sudo apt-get install openssh-server
//安装openssh-server服务

到现在我们还不能使用ssh功能

我们需要在/var/run创建一个sshd的目录

mkdir -p /var/run/sshd


//并以后台的形式打开sshd服务

/var/run/sshd -D &


netstat -natp
//查看22号端口是否被监控

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         S

tcp        0      0 0.0.0.0:22              0.0.0.0:*               L

tcp6       0      0 :::22                   :::*


确认sshd服务已经开启

默认情况下pam认证程序会对我们的ssh登录进行限制,修改/etc/pam.d/sshd的配置。

#session    required     pam_loginuid.so


找到这一行,并在前面如上述加一个#作为注释。

接下来容器的ssh服务开启后,而我们需要远程连接容器的主机A上生成公钥和私钥,并将公钥放到容器中。

一般用
ssh-keygen -t rsa
生成公钥和私钥

一路回车后,
cd ~/.ssh


ls
//查看目录中的内容

[root@VM_116_112_centos .ssh]# ls

id_rsa  id_rsa.pub  known_hosts


id_rsa.pub中的内容就是你的公钥

上述命令请在你远程登入容器的主机上运行,(其实原理自己想想应该可以明白,你的容器上开启了ssh服务,你远程的主机需要连接容器,那么需要将你远程的主机的公钥加到容器中,才可以以ssh的方式登录容器)

之后进入容器
cd ~


mkdir .ssh


touch .ssh/authorized_keys
将远程主机的公钥放入这个新建的文件中。

接下来制作ssh运行脚本。

由于容器运行时一般只能运行一个命令,那么我们将要启动的服务和程序放在一个脚本中,运行这个脚本。

root@1307917db024:~# vi run.sh

root@1307917db024:~# chmod u+x run.sh

root@1307917db024:~# cat run.sh


#! /bin/bash

/usr/sbin/sshd -D


脚本中的命令不能添加&,如果添加了脚本会立马执行完毕,则相应的容器也退出了, -D告诉SSH服务不以守护进程运行,而是和运行终端关联,有了关联终端,容器就不会退出了。

exit退出容器。

最后打包成镜像

docker commit 容器名 ssh:commit

docker images

REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE

ssh                       commit              d079b544a6dc        30 seconds ago       293.1 MB


注意一点主机A下必须是root用户,不然会有认证失败。

容器主机

[root@VM_116_112_centos .ssh]# docker run -d -p 2022:22 ssh:commit /root/run.sh

1f780de627866424ade43c7faf041f6f56b73d2bc27bbb25b078201f8afb117b

[root@VM_116_112_centos .ssh]# docker ps

CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                     NAMES

1f780de62786        ssh:commit                "/root/run.sh"           8 seconds ago       Up 3 seconds        0.0.0.0:2022->22/tcp      nostalgic_morse


远程主机

root@ubuntu:~/.ssh# ssh 123.206.33.231 -p 2022

Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-96-generic x86_64)


* Documentation:  https://help.ubuntu.com/[/code] 
`

The programs included with the Ubuntu system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by

applicable law.

root@1f780de62786:~# ls

`

PS:https://hub.docker.com/r/tonyxinminghui/ssh/

这是我的dockerhub上的镜像。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息