Dockerfile编写 支持systemctl ,支持ssh ,支持nginx,(容器自启进程)

支持ssh+nginx+进程自启的dockerfile

--------Dockerfile 1 -------------------------------------------------------------------------------------------
在同一目录下编写Dokerfile文件,以及提前copy authorized_keys 文件,支持ssh验证,yum源如果下载不了自己配置源

vim Dockerfile

FROM centos:latest
MAINTAINER xiaoxue [email protected]
run  rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y nginx openssh-server sudo net-tools
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ADD authorized_keys /root/.ssh/authorized_keys
#同一目录下提前放置authorized_keys文件
RUN echo -e "#!/bin/sh \n/usr/sbin/sshd \n /usr/sbin/nginx -g ‘daemon off;‘ " > /a.sh
#在配置entrypoint时候,最后一个进程要后台运行,也就是守护进程关闭,如果sshd在最后加-D
run chmod +x /a.sh
EXPOSE  80 22
#CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/a.sh"]

然后你就执行下面两行
docker build -t nginx:1.1 .
docker run --name container1 -dit -p8080:80 -p2222:22 nginx:1.1
docker restart container1
试试容器重启是不是nginx开启,ssh可以连接了,ok。。。

如果你想支持systemctl,参考这个。

-----------Dockerfile 2------------------------------------------------------------------------------------------
在同一目录下编写Dokerfile文件,以及提前copy authorized_keys 文件,支持ssh验证
vim Dockerfile

FROM centos:latest
MAINTAINER xiaoxue [email protected]
run  rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y nginx openssh-server sudo net-tools
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
#同一目录下提前放置authorized_keys文件
ADD authorized_keys /root/.ssh/authorized_keys
RUN echo -e "#!/bin/sh  \nsystemctl enable nginx \nsystemctl enable sshd  " > /a.sh
run chmod +x /a.sh
run sh /a.sh
EXPOSE  80
#ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
CMD ["init"]

然后你就执行下面两行
docker build -t nginx:1.2 .
docker run --name container2 --privileged -dit -p222:22 -p880:80 nginx:1.2 init
docker restart container2
试试容器重启是不是nginx开启,ssh可以连接了,ok。。。
###########(cmd/entrypoit,区别在于cmd会被run指定命令覆盖)##########

原文地址:https://blog.51cto.com/982439641/2418750

时间: 2024-10-12 02:24:12

Dockerfile编写 支持systemctl ,支持ssh ,支持nginx,(容器自启进程)的相关文章

Docker创建支持ssh服务的容器和镜像

Dockerfile 支持系统启动 运行ssh 服务 原文链接:http://blog.csdn.net/kongxx/article/details/38395305 # 选择一个已有的os镜像作为基础 FROM centos:centos6 # 镜像的作者 MAINTAINER Fanbin Kong "[email protected]" # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no RUN yum install -y ope

lamp php的ssl,ssh支持

Php支持ssl,ssh扩展: 准备:可以成功解析php 1.curl的安装 [[email protected]~]# cd /usr/local/src/ [[email protected]~]# wget https://curl.haxx.se/download/curl-7.47.1.tar.gz [[email protected]~]# tar zxvf curl-7.47.1.tar.gz [[email protected]~]# cd curl-7.47.1 [[email

手动添加SSH支持、使用c3p0

之前做的笔记,现在整理一下:大家有耐心的跟着做就能成功: SSH(struts2.spring.hibernate) *  struts2 *  充当mvc的角色 *  hibernate dao层用hibernate技术来实现 *  spring *  spring的声明式事务管理 *  应用spring的IOC和di做到完全的面向接口编程 先添加一个数据库做测试用:使用的是mysql5.0 create database testoa default character set utf8;

手把手教你写Dockerfile, 附赠MongoDB和Nginx Dockerfile编写实例

手把手教你写Dockerfile, 附赠MongoDB和Nginx Dockerfile编写实例 基础镜像可以用于创建Docker容器.镜像可以非常基础,仅仅包含操作系统:也可以非常丰富,包含灵巧的应用栈,随时可以发布.当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层.这些基础镜像可以用于创建新的容器.本篇文章将手把手教您如何从基础镜 像,一步一步,一层一层的从Dockerfile构建容器的过程. Docker简介 Docker项目提供了构建在Linux内核

MNMP下nginx1.6开启支持pathinfo配置,支持thinkphp的URL格式

对于thinkphp框架项目的访问格式有多种,其中pathinfo是默认的基本访问格式,格式为:http://hostname:port/index.php/模块名/action名/参数1/参数1的值/ pathinfo其实就是一个参数,可以通过$_SERVER['PATH_INFO']获得,thinkphp框架通过解析它来找到对应的模块和方法. apache服务器默认是支持pathinfo的,但是nginx服务器默认不支持这种格式,需要进行配置,配置方式如下: 以下是mac下的MNMP中的ng

WebGL 支持检测与已支持浏览器版本汇总

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 是否我的浏览器支持 WebGL http://caniuse.com 在页面搜索 webgl,找到  WebGL - 3D Canvas grap

列出本机JCE提供者,支持消息摘要算法,支持公钥私钥算法

import java.security.Provider; import java.security.Security; public class TestBouncyCastle { public static void main(String[] args) { Provider[] providers = Security.getProviders(); for(Provider p : providers){ System.out.println("提供者名称:"+p.get

Android - 支持不同的设备 - 支持不同的屏幕

Android - 支持不同的设备 - 支持不同的屏幕 Android整体上按照两大类来分类设备屏幕:尺寸和分辨率.app在设备上运行应该考虑大小和分辨率.同样的,你应该包含不同的资源来让app适应不同的屏幕大小和分辨率. 整体上有四种尺寸:小的,正常的,大的,超级大的 和四种分辨率:低分辨率(ldpi),中分辨率(mdpi),高分辨率(hdpi),超高分辨率(xhdpi) 为了声明不同屏幕的不同的布局和突变,你需要把不同的资源放在不同的文件夹下,和处理不同语言的方法一样. 同样要注意到在考虑屏

运行时错误'430': 类不支持自动化或不支持期望的接口。New ADODB.Connection问题

运行时错误'430': 类不支持自动化或不支持期望的接口. 问题: 经调试发现,是运行到下面语句时出错:Set MyConn = New ADODB.Connection  运行到这里是提示本错误 这个MyConn在通用里是这么声明的:    Dim MyConn As ADODB.Connection 你引用 2.8 版的试试. 定位: C:\Program Files \Common Files\Sysem\ADO\msado15.dll   (用2.8解决问题) === nstalling