构建一个拥有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 ...
随机推荐
- Scala 基础(四):Scala变量 (一) 基础
1.概念 变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门 牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值). 2 变量使用的基本步骤 1) 声明/定义变量 ( ...
- JVM 专题九:运行时数据区(四)本地方法栈
1. 本地方法栈 2. 什么是本地方法栈? Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用 本地方法栈,也是线程私有的. 允许被实现成固定或者是可动态拓展的内存大小 ...
- 数据可视化之DAX篇(二十四)Power BI应用技巧:在总计行实现条件格式
https://zhuanlan.zhihu.com/p/98975646 如何将表格或者矩阵中值的条件格式也应用于总计行? 目前PowerBI并不支持这种功能,无法在总计行或者小计行上应用条件格式, ...
- POJ 1057 File Mapping 最详细的解题报告
题目来源:POJ 1057 File Mapping 题目大意:像我的电脑那样显示文件夹和文件信息,其中在同一级目录内,文件夹排在文件的前面并且文件夹的顺序不变,同一级目录中文件按字母序排列.文件以‘ ...
- Navicat连接数据库报错2059 - authentication plugin...错误解决方法
今天使用Navicat 连接MySQL数据库出现错误:2059 - authentication plugin 'caching_sha2_password'. 出现这个错误的原因是因为MySQL8. ...
- Hexo 踩坑:jquery 报错
今天玩了一下Hexo(一个基于node.js的静态博客框架),结果部署到服务器上后发现了一个报错. jquery未定义. jquery怎么会报错呢?一看是找不到链接上的文件. //ajax.googl ...
- Apache 阿帕奇 配置运行环境
阿帕奇 Apache 是一个很常用的服务器环境. 安装阿帕奇后,需要对配置文件进行修改,才能使用. https.conf是阿帕奇的配置文件,地址在 阿帕奇的安装目录\conf\httpd.conf 默 ...
- 使用 forever 启动 vue 需要注意的问题
forever 是 nodejs 生态中一个用来永久挂起一个应用(当这个应用崩溃时能自己重启)的应用(库). 但用他启动vue的时候必须注意一个问题: 在哪个路径启动vue,就在哪个路径启动forev ...
- Makefile中的目标
Makefile中的目标 一般目标 目标就是我们需要的最终文件,也是make的最终输出 Makefile的运行机制是:先将目标当成文件,查看文件是否存在,如果存在且是最新,那么直接结束,如果文件不存在 ...
- three.js 数学方法之Vector3
今天郭先生来说一说three.js的Vector3,该类表示的是一个三维向量(3D vector). 一个三维向量表示的是一个有顺序的.三个为一组的数字组合(标记为x.y和z),可被用来表示很多事物, ...