一般情况下,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. 使用epublib解析epub文件(章节内容、书籍菜单)

    链接地址https://blog.csdn.net/sonnyching/article/details/47407549

  2. python之首字母大写

    目录 首字母大写 算法说明 代码实现 首字母大写 算法说明 功能: 将传入的字符串第一个字母大写; 额外参数用来控制两种转换类型 保持不变 所有的字符转变为小写 代码实现 知识点 python 内置方 ...

  3. imx6的kernel3.4.15启动流程

    //最开始的定义为 DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad/DualLite (Device Tree)") .smp = sm ...

  4. Node.js之Express三

    端午节3天说没就没了,自己的脚伤都快一个月了还没好,原本想着去桂林或者厦门呢,可计划赶不上变化,看自己公司C#软件工程师的招聘条件有要求MongoDb,年前就打算自己学习下,买的这本书就叫Node.j ...

  5. Ionic3 UI组件之 PhotoViewer

    PhotoViewer是常用的Cordova Plugin之一,用来显示图片. 组件特性: 根据Url显示图片 支持手势,可放大缩小 带分享按钮,可分享图片 带关闭按钮 加载错误时自动关闭组件 支持B ...

  6. EF的小知识

    关于EF多表提交保存的问题,同理,修改也适用,用EF不久,总是每张表提交都SaveChanges()一下,后面查看了点资料,其实直接可以add到每张表,直接最后提交就行了,这样操作起来和性能上都要好很 ...

  7. webAPP 图片上传

    关于webAPP 手机上传 用的vue.js 首先是js代码 调用手机app 的 相册或者自己拍照 upload: function(index) { //上传 this.index = index ...

  8. css3 animation(动画)笔记

    在开始介绍Animation之前我们有必要先来了解一个特殊的东西,那就是"Keyframes",我们把他叫做“关键帧”,玩过flash的朋友可能对这个东西并不会陌生.下面我们就一起 ...

  9. [C语言] 数据结构-算法效率的度量方法-事前分析估算方法

    事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算,抛开与计算机硬件软件有关的因素,一个程序的运行时间,依赖于算法的,好坏和问题的输入规模,所谓问题输入规模是指输入量的多少 推导过程,比 ...

  10. Go 语言实现 HTTP 层面的反向代理

    最近对 Go 语言的反向代理使用得偏多,其实在大概两年前就写过 TCP 层面的代理,而且那时也是用的 Go 语言,不同之处在于之前只是偶尔尝试一下使用,最近是因为工作需要使用的.相比较于 TCP 层面 ...