快乐学习
前程无忧、中华英才非你莫属!

Day8-Docker入门教程-创建镜像SSH登陆服务

在第一部分中介绍了一些进入容器的办法,比如attach、exec等命令,但是这些命令都无法解决远程管理容器的问题。因此,当读者需要远程登录到容器内进行一些操作的时候,就需要SSH的支持了。
本章将具体介绍如何自行创建一个带有SSH服务的镜像,并详细介绍了两种创建容器的方法:基于docker commit命令创建和基于Dockerfile创建。
 
10.1 基于commit命令创建
Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像。命令格式为docker commit CONTAINER[REPOSITORY[:TAG]]。
这里将介绍如何用docker commit命令。笔者以ubuntu:14.04镜像添加SSH服务的操作流程为例。
 
1.准备工作
首先,使用ubuntu:14.04镜像来创建一个容器:
$ docker run -it ubuntu:14.04  /bin/bash
更新apt缓存,并安装openssh-server:
root@fc1936ea8ceb:/# apt-get update; apt-get install openssh-server -y
 
 
2.安装和配置SSH服务
选择主流的openssh-server作为服务端:
如果需要正常启动SSH服务,则目录/var/run/sshd必须存在。手动创建它,并启动SSH服务:
 
4.使用镜像
启动容器,并添加端口映射10022–>22。其中10022是宿主主机的端口,22是容器的SSH服务监听端口:
$ docker  run -p 10022:22  -d sshd:ubuntu /run.sh
3ad7182aa47f9ce670d933f943fdec946ab69742393ab2116bace72db82b4895
启动成功后,可以在宿主主机上看到容器运行的详细信息:
3ad7182aa47f   sshd:ubuntu    “/run.sh”   2 seconds ago   Up 2 seconds
ds 0.0.0.0:10022->22/tcp   focused_ptolemy
在宿主主机(192.168.1.200)或其他主机上上,可以通过SSH访问10022端口来登录容器:
 

10.2 使用Dockerfile创建
 
在第一部分中笔者曾介绍过Dockerfile的基础知识,下面将介绍如何使用Dockerfile来创建一个支持SSH服务的镜像。
 
1.创建工作目录
 
 
安装ssh服务
 
取消pam限制
如果读者使用Dockerfile创建自定义镜像,那么需要注意的是Docker会自动删除中间临时创建的层,还需要注意每一步的操作和编写的Dockerfile中命令的对应关系。
 
命令执行完毕后,如果读者可见“Successfully built XXX”字样,则说明镜像创建成功。
可以看到,以上命令生成的镜像ID是570c26a9de68。
在本地查看sshd:Dockerfile镜像已存在:
 
 
 
在Docker社区中,对于是否需要为Docker容器启用SSH服务一直有争论。
 
反对方的观点是:Docker的理念是一个容器只运行一个服务。因此,如果每个容器都运行一个额外的SSH服务,就违背了这个理念。另外认为根本没有从远程主机进入容器进行维护的必要。
支持方的观点是:在Docker 1.3版本之前,如果要用attach进入容器,经常容易出现卡死的情况。1.3之后,虽然官方推出了docker exec命令,再从宿主主机进入是没有障碍了,但是如果要从其他远程主机进入容器依然没有更好的解决方案。
笔者认为,这两种说法各有道理,其实是在讨论不同的容器场景:即作为应用容器还是作为系统容器。应用容器行为围绕应用生命周期,较为简单,不需要人工的额外干预;而系统容器则需要支持管理员的登录操作,这个时候,对SSH服务的支持就变得十分必要了。
因此,在Docker推出更加高效、安全的方式对系统容器进行远程操作之前,容器的SSH服务还是比较重要的,而且它对资源的需求不高,同时安全性可以保障。
 
 
 来源:Docker技术入门与实战 (第2版)   作者:杨保华 戴王剑 曹亚仑
打赏

未经允许不得转载:同乐学堂 » Day8-Docker入门教程-创建镜像SSH登陆服务

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

特别的技术,给特别的你!

联系QQ:1071235258QQ群:226134712
error: Sorry,暂时内容不可复制!