之前有操作过attach、exec等进入容器的命令,但这些命令无法解决远程管理容器的问题,当需要远程登录到容器进行操作,就需要SSH的支持。
一、基于commit命令创建
Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像。格式:docker commit CONTAINER [REPOSITORY [:TAG] ]。
1、准备工作
使用ubuntu:14.04镜像创建一个容器:
更新apt缓存,并安装openssh-server:
2、安装和配置SSH服务:
选择主流的openssh-server作为服务端:
提示已经是最新版本了。
如果需要正常启动SSH服务,则目录/var/run/sshd必须存在;手动创建,并启动SSH服务:
此时查看容器SSH服务默认监听的22端口:
可见端口已经处于监听状态。
修改SSH服务的安全登录配置,取消pam登录限制:
在root用户目录下创建.ssh目录,并复制需要登录的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub文件,可有ssh-keygen -t rsa命令生成)到authorized_keys文件中:
创建自动启动SSH服务的可执行文件run.sh,并添加可执行权限:
最后推出容器:
3、保存镜像
将退出的容器用docker commit命令保存为一个新的sshd:ubuntu镜像:
使用docker images查看本地生成的新镜像sshd:ubuntu,目前拥有的镜像如下:
4、使用镜像
启动容器,并添加端口映射10022 -->22。其中10022是宿主主机的端口,22是容器的SSH服务监听端口:
在宿主主机或其他主机上,可以通过SSH访问10022端口来登录容器:
二、使用Dockerfile创建
1、首先,创建一个sshd_ubuntu工作目录:
在其中创建Dockerfile和run.sh文件:
2、编写run.sh脚本和authorized_keys文件:
脚本文件run.sh的内容与上一小节中一致:
在宿主主机上生成SSH密钥对,并创建authorized_keys文件:
3、编写Dockerfile
4、创建镜像
在sshd_ubuntu目录下,使用docker bulid命令创建镜像;需要注意最后还有一个“.”,表示使用当前目录中的Dockerfile:
命令执行完毕后,可见“Successfully build xxx”字样,表示创建成功;可以看到以下创建镜像的ID为:031f21cee2c1
在本地查看sshd:dockerfile镜像:
5、测试镜像,运行容器:
使用刚创建的镜像sshd:dockerfile运行一个容器;直接启动镜像,映射容器的22端口到本地的10122端口:
在宿主主机新打开一个终端,连接到新建的容器:
可以看到已进入容器;也可以使用其他宿主机远程连接容器进行管理。
领取专属 10元无门槛券
私享最新 技术干货