为Docker镜像添加SSH服务
一、基于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服务的更多相关文章
- 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务
之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...
- 为镜像添加SSH服务
操作Docker容器介绍了一些进入容器的办法,比如attach.exec等命令,但是这些命令都无法解决远程管理容器的问题.因此,当需要远程登录到容器内进行一些操作的时候,就需要SSH的支持了. 如何自 ...
- Docker实战-为镜像添加SSH服务
1.基于docker commit命令创建 Docker提供了docker commit命令,支持用户提交自己对定制容器的修改,并生成新的镜像. 命令格式为:docker commit CONTAIN ...
- Docker实战(七)之为镜像添加SSH服务
1.基于commit命令创建 Docker提供了docker commit命令,支持用户提交自己对制定容器的修改,并生成新的镜像.命令格式为docker commit CONTAINER [REPOS ...
- docker 为镜像添加ssh服务-docker commit命令创建
环境centos7 一.准备工作 docker pull ubuntu:18.04 docker run -it ubuntu:18.04 bash 二.配置软件源apt-get update,如果系 ...
- docker为镜像添加SSH服务
启动并进入容器中 这里用db1容器完成实验. 安装openssh服务和修改sshd配置文件 安装openssh yum install openssh-server openssh-clients - ...
- Docker-为镜像添加SSH服务
进入容器的办法有很多,包括exec.attach等命令,但是这些命令都无法解决远程管理容器的问题,因此,需要SSH的支持 基于commit命令创建 docker提供了docker commit命令,支 ...
- docker 为镜像添加ssh服务-使用Dockerfile 创建
首先,基于要添加内容的镜像ubuntu:18.04运行一个容器, 在宿主机(下面步骤是在容器中创建的,应该在宿主机创建进行以下步骤) 一.创建一个工作目录 二.创建Dockerfile 和脚本run. ...
- 添加ssh服务构建新镜像-docker commit 方式01
添加ssh服务构建新镜像-docker commit 方式 1:docker commit构建自定义镜像---一般不推荐使用这种方式构建新镜像 1:ubuntu基础镜像下载 ubuntu@ubuntu ...
随机推荐
- 智课雅思词汇---二十二、-al即是名词性后缀又是形容词后缀
智课雅思词汇---二十二.-al即是名词性后缀又是形容词后缀 一.总结 一句话总结: 后缀:-al ②[名词后缀] 1.构成抽象名词,表示行为.状况.事情 refusal 拒绝 proposal 提议 ...
- 分享知识-快乐自己:mysql数据库常见两种引擎
mysql的常用引擎 在MySQL数据库中,常用的引擎主要就是2个:Innodb和MyIASM. 首先: 1.简单介绍这两种引擎,以及该如何去选择. 2.这两种引擎所使用的数据结构是什么. Innod ...
- Vue中mixin的用法
在项目中我们经常会遇到多个组件调用同一个方法的问题,为了避免每次都在.vue文件中定义并调用,我们可采用vue的mixin的用法: 具体使用如下: 我们需要在main.js中引入mixins文件夹下的 ...
- 计算机_软件技巧_01_优雅地再word中插入代码
二.参考资料 1.如何优雅的在 Microsoft word中插入代码
- hdoj-1032-The 3n + 1 problem(坑题)
题目链接 //巨坑的一道题,输入的m,n要判断大小,输出还要按照原来的顺序,范围还是i<=n<=j #include <iostream> #include <cstd ...
- Linux 线程同步的三种方法(互斥锁、条件变量、信号量)
互斥锁 #include <cstdio> #include <cstdlib> #include <unistd.h> #include <pthread. ...
- hdu 4445 Crazy Tank(物理过程枚举)
遇到物理题,千万不要一味的当成物理题去想着推出一个最终结果来,这样ACM竞赛成了物理比赛,出题人就没水平了...往往只需要基础的物理分析,然后还是用算法去解决问题.这题n小于等于200,一看就估计是暴 ...
- Effective C++ 条款10
令operator=返回一个reference to *this 将operator=返回一个reference是为了什么呢?答案很简单,就是为了实现连锁形式. 什么是连锁形式,如int x,y,z: ...
- RabbitMQ和Kafka可靠性
RabbitMQ和Kafka可靠性 https://www.cnblogs.com/haolujun/p/9641840.html 我们通过前文知道,RabbitMQ的队列分为master queue ...
- 消息队列mq总结(重点看,比较了主流消息队列框架)
转自:http://blog.csdn.net/konglongaa/article/details/52208273 http://blog.csdn.net/oMaverick1/article/ ...