一般情况下,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. Chapter 3 Phenomenon——14

    They wheeled me away then, to X-ray my head. 他们把我移到了一边用X光照射我的头. 他们把我放到轮椅上,推着我去做头部X光检查. I told them t ...

  2. epoll—IO多路复用

    1.在socket.listen()后创一个epoll对象   epoll = select.epoll() 2.将server_socket注册到epoll中        epoll.regist ...

  3. ActiveMQ开发注意要点

    目录1.如何保证消息的成功处理2.避免消息队列的并发3.消息有效期的管理4.过期消息,处理失败的消息如何处理 1.保证消息的成功处理消息发送成功后,接收端接收到了消息.然后进行处理,但是可能由于某种原 ...

  4. ubuntu 16.04 安装PhpMyAdmin

    首先,安装mysql $ sudo apt-get install mysql-server $ sudo apt-get install mysql-client 安装时输出root用户的密码 然后 ...

  5. springcloud-05-ribbon中不使用eureka

    ribbon在有eureka的情况下, 可以不使用eureka, 挺简单, 直接上代码 application.xml server: port: spring: # 设置eureka中注册的名称, ...

  6. 在没有jre环境下运行jar

    1.首先将程序打包(这一步可以通过eclipse的导出完成). 2.为项目添加第三方jar包.在第1步打好的jar包的同级目录下,新建一个lib(名字可以自取)文件夹.用winrar等解压文件打开第1 ...

  7. 遇见CUBA CLI

    原文:Meet CLI for CUBA Platform 翻译:CUBA China CUBA-Platform 官网 : https://www.cuba-platform.com CUBA Ch ...

  8. [BJOI 2018]求和

    Description 题库链接 给你一棵 \(n\) 个结点的有根树, \(m\) 次询问这棵树上一段路径上所有节点深度的 \(k\) 次方和. \(1\leq n\leq 300000,1\leq ...

  9. Wordpress性能优化:使用crontab+wp-cli代替wp-cron

    wp-cron的问题     Wordpress内置wp-cron的模块,可以用来执行定时任务,比如定时检查更新,定时发布文章等都需要用到,属于必备功能.但是该模块的特点是:它只能在用户发起请求时检查 ...

  10. java 生成Excel开门篇

    本随笔的Excel所用的poi jar包(3.17版本)链接: https://pan.baidu.com/s/1gaa3dJueja8IraUDYCSLIQ 提取密码: 9xr7 简单实现:两个类: ...