一般情况下,Linux系统管理员通过SSH服务来管理操作系统,但Docker的很多镜像是不带SSH服务的,那么我们怎样才能管理操作系统呢?在第一部分中我们介绍了一些进入容器的办法,比如用attach、exec等命令,但是这些命令都无法解决远程管理容器的问题。因此,当读者需要远程登录到容器内进行一些操作的时候,就需要SSH的支持了。

1、基于commit创建

  # sudo docker run -it ubuntu:14.04  /bin/bash  (以Ubuntu14.04为例创建一个容器)

  # sshd   (bash: sshd: command not found)

  # apt-get install openssh-server  (安装openssh-server)

  # apt-get update  (更新apt)

  # vi /etc/apt/sources.list.d/163.list  (创建镜像源)

  添加:

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

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

  # apt-get install openssh-server  (安装服务)

  # mkdir -p /var/run/sshd  (要正常启动SSH服务,需要目录/var/run/sshd存在)

  # /usr/sbin/sshd -D &  (启动服务)

  # netstat -tunlp  (查看容器的22端口(SSH服务默认监听的端口),已经处于监听状态)

  # sed -ri 's/session    required     pam_loginuid.so/#session    required pam_loginuid.so/g' /etc/pam.d/sshd  (修改SSH服务的安全登录配置,取消pam登录限制)

  # mkdir root/.ssh

  # vi /root/.ssh/authorized_keys  

  在root用户目录下创建.ssh目录,并复制需要登录的公钥信息(一般为本地主机用户目录下的.ssh/id_rsa.pub文件,可由ssh-keygen-t rsa命令生成)到authorized_keys文件中:

  # vi /run.sh

  # chmod +x run.sh

  run.sh脚本内容如下:

    #!/bin/bash
  

    /usr/sbin/sshd -D

  # exit

  # docker commit  容器id sshd:ubuntu  

2、使用dockerFile创建

  在宿主主机上生成SSH密钥对,并创建authorized_keys文件:

  # ssh-keygen -t rsa

  # cat ~/.ssh/id_rsa.pub >authorized_keys

  # vi /run.sh

  # chmod +x run.sh

  run.sh脚本内容如下:

    #!/bin/bash   

    /usr/sbin/sshd -D

  # vi dockerfile    

    FROM ubuntu:14.04

    #提供一些作者的信息

    MAINTAINER from wu-wu

    #下面开始运行命令,此处更改ubuntu的源为国内163的源

    RUN echo "deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse" > /etc/apt/sources.list

    RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list

    RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list

    RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list

    RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list

    RUN apt-get update

    #安装ssh服务

    RUN apt-get install -y openssh-server

    RUN mkdir -p /var/run/sshd

    RUN mkdir -p /root/.ssh

    #取消pam限制

    RUN sed -ri 's/session required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd

    #复制配置文件到相应位置,并赋予脚本可执行权限

    ADD authorized_keys /root/.ssh/authorized_keys

    ADD run.sh /run.sh

    RUN chmod 755 /run.sh

    #开放端口

    EXPOSE 22

    #设置自启动命令

    CMD ["/run.sh"]

  # docker build -t sshd:dockerfile .  (构建镜像)

docker如何创建支持SSH服务的镜像的更多相关文章

  1. 使用Dockerfile创建支持SSH服务的镜像

    1.前面我们学习了使用Dockerfile,那接下来我们就用Dockerfile创建一个支持SSH服务的镜像. 2.首先创建一个目录ssh_centos [root@rocketmq-nameserv ...

  2. Docker(2):使用Dockerfile创建支持SSH服务的镜像

    1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...

  3. docker基于commit命令创建支持ssh服务的镜像

    以centos为基础,目的使用ssh服务远程连接docker容器. 环境:宿主机centos7(宿主机ip地址为192.168.164.130),直接搜索docker的centos镜像,下载最新版本. ...

  4. ubuntu-docker入门到放弃(八)创建支持SSH服务的镜像

    我们知道进入docker容器可以使用attach.exec等命令来操作和管理,但是如果需要远程登录并管理容器,就需要ssh服务的支持了. 1.基于commit命令创建 docker提供了commit命 ...

  5. 创建支持SSH服务的镜像

    一.基于commit命令创建 docker commit CONTAINER [REPOSITORY [:TAG]] 1.使用ubuntu镜像创建一个容器 docker run -it ubuntu ...

  6. docker基于Dockerfile命令创建支持ssh服务的镜像

    首先,创建一个sshd_centos工作目录: [root@localhost ~]# mkdir sshd_centos [root@localhost ~]# cd sshd_centos [ro ...

  7. Docker创建支持ssh服务的容器和镜像

    原文链接:Docker创建支持ssh服务的容器和镜像 1. 这里使用的centos作为容器,所以首先下载centos的images # sudo docker pull centos 2. 下载后执行 ...

  8. Docker使用Dockerfile创建支持ssh服务自启动的容器镜像

    原文链接:Docker使用Dockerfile创建支持ssh服务自启动的容器镜像 1. 首先创建一个Dockerfile文件.文件内容例如以下 # 选择一个已有的os镜像作为基础 FROM cento ...

  9. 创建支持ssh服务的docker容器和镜像

    http://www.kongxx.info/blog/?p=57 1. 这里使用的centos作为容器,所以首先下载centos的imagessudo docker pull centos 2. 下 ...

随机推荐

  1. Android_问卷调查

    这个是一个简单的问卷调查,对于我这样的初学者可能会绞尽脑汁想尽办法,去实现一个看起来特别简单的功能,我这个是用Intent传参的办法,来实现将前边的调查来进行统计,并记录,之后将这些信息显示到最后一个 ...

  2. 关于daterangepicker取消默认值的设置

    1.项目中用到了daterangepicker这个插件,需求要求不能有默认值. 2.查资料得知,可以修改插件内的属性 autoUpdateInput值来实现这个效果. 顾虑有二: 1.修改插件内容,导 ...

  3. 值得收藏的TCP套接口编程文章

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由jackieluo发表于云+社区专栏 TCP客户端-服务器典型事件 下图是TCP客户端与服务器之间交互的一系列典型事件时间表: 首先启 ...

  4. linux tar 命令

    tar [-cxtzjvfpPN] 文件与目录 ....参数:-c :建立一个压缩文件的参数指令(create 的意思):-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件! ...

  5. bzoj 2138: stone

    Description 话说Nan在海边等人,预计还要等上M分钟.为了打发时间,他玩起了石子.Nan搬来了N堆石子,编号为1到N,每堆 包含Ai颗石子.每1分钟,Nan会在编号在[Li,Ri]之间的石 ...

  6. tap 和click 事件区别

    clike事件和 Zepto.js 中tap的区别 首先介绍下Zepto: 最初是作为移动端开发的库,但是却可以作为JQuery轻量级的替代品,因为API和JQuery相似,而文件更小. 介绍下tap ...

  7. div中让文字垂直居中

    在div中如何让文字垂直居中? 作者在刚接触web前端开发时就遇到了这个问题,一直没有记录下来,今天正好有空,便记录下来. 为了方便展示,我把style先直接写在了div里. 效果如下图所示: 图1. ...

  8. gRPC 的 RoadMap 20151022 更新

    gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发 ...

  9. git相关的简单命令

    初次使用建议看这个ppt:http://www.bootcss.com/p/git-guide/    从现有仓库克隆 这需要用到 git clone 命令.如果你熟悉其他的 VCS 比如 Subve ...

  10. spring 中 InitializingBean 接口使用理解

    前言:这两天在看 spring 与 quart 的集成,所以了解到 spring 是如何初始化 org.springframework.scheduling.quartz.SchedulerFacto ...