一、基于commit命令创建

  1、 首先下载镜像

$ docker run -it ubuntu:16.04 /bin/bash

  2、 安装SSH服务

#更新apt缓存
root@5ef1d3163265:/# apt-get update root@5ef1d3163265:/# apt-get install openssh-server -y

  3、 配置SSH服务:如果需要正常启动SSH服务,则需手动创建/var/run/sshd目录,并启动ssh服务。

    1) 创建目录

root@5ef1d3163265:/# mkdir -p /var/run/sshd

    

    2) 启动ssh服务

root@5ef1d3163265:/# /usr/sbin/sshd -D &

    3) 修改SSH服务的安全登录设置,取消pam登录限制

root@5ef1d3163265:/# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

    4) 在/root下创建.ssh目录

root@5ef1d3163265:/# mkdir /root/.ssh

    5) 创建文件/root/.ssh/authorized

root@5ef1d3163265:/# vim /root/.ssh/authorized

    6) 将宿主机的.ssh目录下的id_rsa.pub内容全部copy到authorizedj里

  

  4、 在docker镜像里添加运行脚本run.sh

root@5ef1d3163265:/# vim run.sh

【/run.sh】

#!/bin/bash
/usr/sbin/sshd -D &
# 退出镜像
root@5ef1d3163265:/# exit

  5、 用docker commit命令保存镜像

# 查看刚刚运行的镜像的CONTAINER ID,复制一会有用
$ docker ps -a # 5ef1d3163265为刚刚运行的ubuntu的CONTAINER ID
$ docker commit 5ef1d3163265 sshd:ubuntu # 查看镜像
$ docker images

  6、 使用刚刚创建的镜像sshd:ubuntu

# 启动容器,并添加端口映射,6666是宿主机的端口,22是窗口的端口
$ docker run -p 6666:22 -d sshd:ubuntu /run.sh # 查看容器运行情况
$ docker ps

  7、 宿主机连接容器

#采用以下两个方法都可以连接
$ ssh root@localhost -p 6666
$ ssh 172.17.0.2 -p 6666       //此处的IP为容器IP,查看方法: docker inspect + 容器ID | grep IP

二、 使用Dockerfile创建基于带有ssh的镜像

  1、 创建Dockerfile根目录

$ mkdir sshd_ubuntu
$ cd sshd_ubuntu

  2、 编写run.sh脚本

$ vim run.sh

【run.sh】

#!.bin/bash
/usr/sbin/sshd -D

  3、 创建authorized_keys文件

$ ssh-keygen
$ cat ~/.ssh/id_rsa.pub >authorized_keys

  4、 复制/var/pam.d/sshd到Dockerfile目录下

$ sudo cp /var/pam.d/sshd  ./
$ sudo vim sshd # 注释以下一行
# session required pam_loginuid.so

  5、 编写Dockerfile

#设置继承镜像
FROM ubuntu:latest #作者信息
MAINTERNET Foo Bar foo@bar.com #安装apt-utils和ssh
RUN apt-get update
RUN apt-get install -y apt-utils
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd //容器中需有此目录后SSH服务方能运行
RUN mkdir /run/.ssh #复制文件到相应的目录
ADD sshd /var/pam.d/sshd
ADD authorized_keys /root/.ssh
RUN chmod 755 /run.sh # 开放端口
EXPOSE 22 #设置自启动命令
CMD 【“/run.sh”】

  6、 创建镜像

jeff@node1:~/$ cd sshd_ubuntu
jeff@node1:~/sshd_ubuntu$ docker build -t sshd:dockerfile .

  7、 查看镜像

$ docker images

  8、 测试镜像,运行容器

#启动镜像,并映射窗口的22端口到本地的6666端口
$ docker run -d -p 6666:22 #查看镜像
$ docker images

  9、 在宿主机连接到新建的容器

$ ssh root@localhost -p 6666

为Docker镜像添加SSH服务的更多相关文章

  1. 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务

    之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...

  2. 为镜像添加SSH服务

    操作Docker容器介绍了一些进入容器的办法,比如attach.exec等命令,但是这些命令都无法解决远程管理容器的问题.因此,当需要远程登录到容器内进行一些操作的时候,就需要SSH的支持了. 如何自 ...

  3. Docker实战-为镜像添加SSH服务

    1.基于docker commit命令创建 Docker提供了docker commit命令,支持用户提交自己对定制容器的修改,并生成新的镜像. 命令格式为:docker commit CONTAIN ...

  4. Docker实战(七)之为镜像添加SSH服务

    1.基于commit命令创建 Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像.命令格式为docker commit CONTAINER [REPOS ...

  5. docker 为镜像添加ssh服务-docker commit命令创建

    环境centos7 一.准备工作 docker pull ubuntu:18.04 docker run -it ubuntu:18.04 bash 二.配置软件源apt-get update,如果系 ...

  6. docker为镜像添加SSH服务

    启动并进入容器中 这里用db1容器完成实验. 安装openssh服务和修改sshd配置文件 安装openssh yum install openssh-server openssh-clients - ...

  7. Docker-为镜像添加SSH服务

    进入容器的办法有很多,包括exec.attach等命令,但是这些命令都无法解决远程管理容器的问题,因此,需要SSH的支持 基于commit命令创建 docker提供了docker commit命令,支 ...

  8. docker 为镜像添加ssh服务-使用Dockerfile 创建

    首先,基于要添加内容的镜像ubuntu:18.04运行一个容器, 在宿主机(下面步骤是在容器中创建的,应该在宿主机创建进行以下步骤) 一.创建一个工作目录 二.创建Dockerfile 和脚本run. ...

  9. 添加ssh服务构建新镜像-docker commit 方式01

    添加ssh服务构建新镜像-docker commit 方式 1:docker commit构建自定义镜像---一般不推荐使用这种方式构建新镜像 1:ubuntu基础镜像下载 ubuntu@ubuntu ...

随机推荐

  1. PHP版微信第三方实现一键登录及获取用户信息的方法

    本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法.分享给大家供大家参考,具体如下: 注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请. 一开始你需要进入微信 ...

  2. MySQL InnoDB与MyISAM存储引擎差异

    言: 之前简单介绍过 MySQL 常用的存储引擎,今天对两个主流的存储简单分析下差异,书上没有参考的笔试题解答注解: 差异: MyISAM 只支持表锁,不支持事务,表损坏率较高.较老的存储引擎.   ...

  3. s3cmd 安装使用指南

    https://wangyan.org/blog/s3cmd-how-to-use.html s3cmd 安装使用指南 s3cmd 是一款 Amazon S3 命令行工具.它不仅能上传.下载.同步,还 ...

  4. mysql 自增长 AUTO_INCREMENT

    Mysql可以使用AUTO_INCREMENT来设定主键的值为自增长的,其默认值是1. 如果想把它的初始值设置为n,可执行:alter table table_name auto_increment= ...

  5. 如何学习html画布呢(canvas)

    我列出了canvas教学资源 http://www.gbtags.com/gb/gbliblist/1.htm  这是极客标签(不是极客学院) http://study.163.com/course/ ...

  6. java_报表_00_资源帖

    一.精选资料 二.java api 1.jfreechart (1).Java-jfree报表(学习整理)----饼状图.柱状图.折线统计图 (2).Jfreechart打造专业图表-原来Jfreec ...

  7. MAC 下配置MQTT 服务器Mosquitto

    一.简单介绍   1.MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制.    2.Mosquitto是一款实现了 MQTT v3.1 ...

  8. nyoj-1099-Lan Xiang's Square(几何,水题)

    题目链接 /* Name:nyoj-1099-Lan Xiang's Square Copyright: Author: Date: 2018/4/26 9:19:19 Description: 给4 ...

  9. 不带缓存IO和标准(带缓存)IO

    linux对IO文件的操作分为: 不带缓存:open read.posix标准,在用户空间没有缓冲,在内核空间还是进行了缓存的.数据-----内核缓存区----磁盘 假设内核缓存区长度为100字节,你 ...

  10. Android 关于后台杀死App之后改变服务器状态的一些尝试

    前言: 如题,我的需求是:我需要在App在后台运行(未退出),调出最近运行记录,杀死App服务时,程序能够向服务器发送一条指令,以此达到我想要的目的. Android方面刚刚才开始玩,我一开始想的是可 ...