基于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/
`
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上的镜像。
docker内部开启ssh
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:docker中指定用bash
下一篇:java 如何把对象放入 年轻代
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【Docker】Dcoker开启MySQL容器binlog日志
Dcoker开启MySQL容器binlog日志
mysql vim 日志文件