远程连接Docker容器

之前有操作过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端口:

在宿主主机新打开一个终端,连接到新建的容器:

可以看到已进入容器;也可以使用其他宿主机远程连接容器进行管理。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180716G1MIQN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券