构建一个拥有sshd服务的docker镜像
不直接描述结果,通过一个过程探究如何写一个 Dockerfile
一、环境
虚拟机CentOS7.4,Docker1.13.1
二、尝试步骤
1.下载基础镜像 docker pull alpine:3.8
下载镜像的时候习惯带上tag,否则下载的是 latest,后面不知道具体的版本。在 Dockerfile 的编写中也需要注意,指定具体的版本,不然当有了新的版本发布后,这个 Dockerfile 就会有差异了
2.启动一个容器
docker run -itd -p 10022:22 -v /home/docker-volume:/home alpine:3.8
-p将容器的 22 端口暴露出来是方便测试 sshd,挂载卷是为了后面步骤拷贝文件需要

3.进入容器
docker exec -it 8f sh
添加阿里云软件源

更新软件,安装open-ssh
apk update
apk add openssh-server
直接启动 sshd 会出现如下错误:

需要安装一个服务管理软件

但是安装 openrc 后还是会有如下问题。原因是,容器本身是一个进程,已经是属于 init 0 进程的,不能使用/init.d下来启动

所以使用 /usr/sbin/sshd -D 方式启动。但是又出现如下错误,查看是由于没有公钥文件,ls /etc/ssh 下只有sshd_config 配置

使用下述方式创建公钥
创建完成后,/usr/sbin/sshd -D 启动成功
此处先拷贝 ssh 配置到 /home 目录下,后续步骤使用
cp /etc/ssh/* /home
三、编写Dockerfile
编写 dockerfile 的过程就是将上述手动操作的过程,翻译成 dockerfile 的语法。
FROM alpine:3.8
# 拷贝软件园文件和公钥文件到容器内
COPY file/ /tmp/
# 先替换软件源
RUN \mv /tmp/repositories /etc/apk/repositories \
# 安装 sshd 软件
&& apk update && apk add openssh-server --no-cache \
# 拷贝公钥文件
&& mv /tmp/ssh* /etc/ssh/ \
# 修改初始密码
&& echo "root:admin" | chpasswd \
# 清理环境
&& rm -rf /var/cache/apk/* /tmp/*
# 暴露22端口
EXPOSE 22
# 启动 sshd 服务
CMD ["/usr/sbin/sshd", "-D"]
将公钥文件放在目录 file 下,Dockerfile 文件与 file 目录放在同一级目录下。然后执行命令,docker build -t alpine-sshd:v1 . 进行构建。完成后能在 docker images 镜像中看见
测试:
docker run -itd -p 10022:22 alpine-sshd:v1 启动一个容器,然后使用命令 ssh root@[ip] 10022 连接到容器
到此,整个编写 Dockerfile 的流程就结束了。但是上面的 Dockerfile 还能优化一下
四、进阶
比如,初始密码不能通过启动参数修改,启动服务没有使用启动脚本,扩展性不好等
对于以上修改后的文件链接:https://github.com/ucookie/DockerBuild/tree/master/alpine-sshd,可以直接构建
构建一个拥有sshd服务的docker镜像的更多相关文章
- 从零开始构建一个centos+jdk7+tomcat7的docker镜像文件
从零开始构建一个centos+jdk7+tomcat7的镜像文件 centos7系统下docker运行环境的搭建 准备centos基础镜像 docker pull centos 或者直接下载我准备好的 ...
- 基于CentOS的SSHD服务的Docker镜像
原文地址 1.Dockerfile文件 FROM registry.aliyuncs.com/acs-sample/centos:6 MAINTAINER xuqh "xqh_163@163 ...
- 利用Dockerfile文件创建带有sshd服务的centos镜像
利用Dockerfile文件创建带有sshd服务的centos镜像 标签:dockerfile 1.安装docker并启动docker,不在赘述 2.创建使用Dockerfile安装sshd服务的目录 ...
- CoSky-Mirror 就像一个镜子放在 Nacos、CoSky 中间,构建一个统一的服务发现平台
CoSky 基于 Redis 的服务治理平台(服务注册/发现 & 配置中心) Consul + Sky = CoSky CoSky 是一个轻量级.低成本的服务注册.服务发现. 配置服务 SDK ...
- [译]Spring Boot 构建一个RESTful Web服务
翻译地址:https://spring.io/guides/gs/rest-service/ 构建一个RESTful Web服务 本指南将指导您完成使用spring创建一个“hello world”R ...
- 使用commit方式构建具有sshd服务的centos镜像
一般我们是通过SSH服务来管理服务器的,但是现在很多Docker镜像不带SSH服务,那我们该如何来管理这些容器呢?现在我们通常使用attach和nsenter工具.但是都无法解决远程管理容器的问题,当 ...
- Centos7创建支持ssh服务的docker镜像
如何在centos7中使用docker创建一个支持ssh连接的容器 1.拉取centos7.4镜像(由于7.4目前是最稳定的版本,所以推荐使用centos7.4) docker pull centos ...
- 「六」创建一个带 weblogic 服务的基础镜像
Weblogic Weblogic 简单介绍以及其在 Docker 环境下的特殊应用 WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE ...
- 构建一个java环境的centos系统镜像并上传到阿里云镜像仓库
编辑dockerfile 文件 FROM centos MAINTAINER zhaoweifeng ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zonei ...
随机推荐
- MATLAB GUI之ABC
GUIDE 属性设置 name 更改名字 logo 在GUI的".m"文件中的OpeningFcn函数或者OutputFcn函数中添加以下代码: % 设置页面左上角的 LogoI ...
- Python split分割字符串
s = input(); str = s.split("-") print("{}+{}".format(str[0],str[-1]))
- 谈谈JVM(基础模型)
一,基本概念 JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈. 一个垃圾回收,堆 和 一个存储方法域. JVM 是运行在操作系统之上的,它与硬件没 ...
- 关于JS深拷贝和浅拷贝
最近在前端开发中遇到一些问题,就是数组中的某个对象或某个对象的值改变之后,在不刷新页面的时候需要重新渲染值时,页面显示的还是原来的数据.比如: data{ A:[{id:1,num:1},{id:2, ...
- web测试中不容忽视的细节
最近在自动化测试的圈子里,我总是碰到很多人在群里和其他地方问为什么这个会出现错误? 为什么这个运行不了?为什么我百度了还是没用? 其实真正的原因可能是你忽略了下面这些需要注意的小地方: 1.页面分辨率 ...
- Ethical Hacking - NETWORK PENETRATION TESTING(22)
MITM - Wireshark WIreshark is a network protocol analyser that is designed to help network administa ...
- Python Ethical Hacking - WEB PENETRATION TESTING(1)
WHAT IS A WEBSITE Computer with OS and some servers. Apache, MySQL ...etc. Cotains web application. ...
- BT面板安装教程
面板特点 一键配置服务器环境(LAMP/LNMP) 一键安全重启 一键创建管理网站.ftp.数据库 一键配置(定期备份.数据导入.伪静态.301.SSL.子目录.反向代理.切换PHP版本) 一键安装常 ...
- 【Nginx】如何使用Nginx实现MySQL数据库的负载均衡?看完我懂了!!
写在前面 Nginx能够实现HTTP.HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡.那么,问题来了,可不可以通过Nginx实现MySQL数据库的负载均衡呢?答案是:可以.接下来,就让我们一 ...
- 搭建高可用kubernetes集群(keepalived+haproxy)
序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...