构建一个拥有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 ...
随机推荐
- python中os模块用法大全
os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前工作目录 os.chdir(dirname):改变工作目录到dirname os.path.r ...
- 【网鼎杯2018】fakebook
解题过程: 首先进行目录扫描,发现以下目录: user.php.bak login.php flag.php user.php robots.txt user.php.bak猜测存在源码泄露. 查看源 ...
- 临时解决GitHub的raw.githubusercontent.com无法连接问题
http://qjzd.net:3000/topic/5e48cc33dcf06d6a181ffb81 查询真实IP 通过IPAddress.com首页,输入raw.githubusercontent ...
- 渐进式Web应用(PWA)
什么是渐进式Web应用? 渐进式Web应用是一种全新的Web技术,让Web应用和原生APP的体验相近或一致. 渐进式Web应用它可以横跨Web技术及Native APP开发的解决方案,对于开发者的优势 ...
- CMMI规范目录结构
- Spring AOP底层实现分析
Spring AOP代理对象的生成 Spring提供了两种方式来生成代理对象: JdkProxy和Cglib,具体使用哪种方式生成由AopProxyFactory根据AdvisedSupport对象的 ...
- java的干儿子锁Lock
目录 Lock的由来 线程之间的交互 Lock方法简介 lock() lockInterruptibly() trylock() trylock(long,TimeUnit) unlock() new ...
- 谷歌浏览器扩展 crx 下载
下方服务可让国内成功下载谷歌浏览器.crx 扩展,如谷歌浏览器无法安装,可以使用终极解决方法,把.crx 解压缩,然后在扩展中心中开启 开发者模式然后选择加载已解压的扩展程序. 需要注意的是解压缩的文 ...
- java io流根据url读取图片
//获取图片大小 public void readFileSize(String url,HttpServletRequest request){ //根路径 File file = new File ...
- Java Web(1)-JavaScript
一.JavaScript 和 html 代码的结合方式 1. 第一种方式 只需要在 head 标签中,或者在 body 标签中, 使用 script 标签 来书写 JavaScript 代码 < ...