公司开发及测试的linux环境为CentOS-7.X,因此以CentOS-7.2.15作为基础镜像,镜像尺寸确实比较大,最终Mono-4.6.0.125+Jexus-5.8.1.10镜像尺寸已将近1G(900+M);


Mono镜像


Mono镜像制作基本按照手动安装Mono的步骤即可,但需要注意以下4点:

1)除mono依赖的各种组件需要安装外,还需要安装wget及bzip2两个组件,前者用于下载源码,后者用于解压mono源码,因为mono源码用bz2压缩;

2)安装openssh,openssh-server两个组件,用于以守护进程启动镜像;

3)mono及libgdiplus源码的下载,解压,安装,删除,必须在Dockerfile的一条RUN中进行,原因是基于Docker的分层镜像压缩原理,如果将这几个步骤分别压缩至不同的docker层,则最终镜像将包含每一条RUN中的状态,也就是说,镜像中将包含下载的压缩包,解压后的文件夹,但是在最终层,这些文件却不可见-被压缩在中间层中。

4)将mono的bin路径加入环境变量。

以下是mono-4.6.0.125镜像的Dockerfile:

FROM centos:7.2.1511
MAINTAINER JiaKai "jiakai@gridsum.com"
COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
RUN yum update -y -q && yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel libtiff-devel libexif-devel giflib-devel libX11-devel freetype-devel fontconfig-devel  cairo-devel wget bzip2 openssh openssh-server.x86_64 && rm -rf /var/cache/yum
RUN wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-4.2.tar.gz \
    && tar zxf libgdiplus-4.2.tar.gz \
    && cd libgdiplus-4.2 && ./configure --prefix=/usr/mono/ && make && make install \
    && rm -rf /libgdiplus-4.2/ && rm -rf /libgdiplus-4.2.tar.gz \
    && echo "/usr/mono/lib" > /etc/ld.so.conf.d/mono.conf
RUN wget http://download.mono-project.com/sources/mono/mono-4.6.0.125.tar.bz2 \
    && tar xjf mono-4.6.0.125.tar.bz2 \
    && cd mono-4.6.0 && ./configure --prefix=/usr/mono/ && make -j2 && make install \
    && rm -rf /mono-4.6.0/ && rm -rf /mono-4.6.0.125.tar.bz2 \
    && echo "export PATH=$PATH:/usr/mono/bin">>/etc/profile
ENV PATH $PATH:/usr/mono/bin

这里是完成后的Mono-4.6.0.125镜像公开地址

Jexus镜像


先以之下的脚本创建Jexus镜像(基于mono镜像):

FROM jiakai/mono-4.6.0.125:1.0.17
MAINTAINER JiaKai "jiakai@gridsum.com"
COPY ./jexus-5.8.1/ /jexus
RUN /jexus/install \
    && sed -i "s;^root=/ /var/www/default;root=/ /data;" /usr/jexus/siteconf/default \
    && rm -rf /jexus/ \
    && mkdir /data && chmod a+rwx /data
EXPOSE 80 8080

有以下一些问题需要注意:

1)jexus-5.8.1文件夹包含预先下载的jexus安装包解压后的所有内容,拷贝至镜像中/jexus目录;

2)安装jexus镜像后将默认站点的启动目录改为镜像中的/data目录;

镜像制作完毕后,如果需要以守护进程启动镜像,即以/usr/sbin/sshd -D的方式启动镜像,则缺少4个ssh私钥文件;

一个解决方法是, docker run 这个镜像,手动创建这4个私钥文件后保存该容器为新的镜像:

ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

退出镜像后,commit该容器即可:

 sudo docker commit xxx容器IDxxx XXXXX:vvvvv

最终得到Mono-Jexus基础镜像。

这里是完成后的Jexus-5.8.1.10镜像公开地址

基于CentOS-7.2.15的Mono+jexus镜像的更多相关文章

  1. 配置 ASP.NET Linux( CentOS 6.5 ) 运行环境 MONO + Jexus

    1.更新系统 在命令行下执行 yum –y update 2.安装必要的软件 yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettex ...

  2. CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

    最新更新参看: Centos 7.0 安装Mono 3.4 和 Jexus 5.6 2012年初写过一篇<32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0 ...

  3. ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus

    ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...

  4. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.5.安装Grid,创建ASM磁盘组空间不足

    因之前分区时,分区的Last cylinder的值选了“1”,导致创建磁盘组空间不足.解决办法是先删除分区,重新创建分区并删除ASM磁盘,然后重建ASM磁盘 1. 先删除分区,重新创建分区: 1)查询 ...

  5. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境

    1.资源准备 最近,在VmwareStation 10虚拟机上,基于CentOS5.4安装Oracle 11g RAC,并把过程记录下来.刚开始时,是基于CentOS 6.4安装Oracle 11g ...

  6. Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建)

    Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建) 具体案例:局域网内有两台主机,一台Linux.一台Windows,现在需要配置一台Cacti监控服务器对这两台 ...

  7. (转)基于CentOS 7安装Zabbix 3.4和Zabbix4.0

    原文:https://blog.csdn.net/leshami/article/details/78708049 CentOS 7环境下Zabbix4.0的安装和配置实例-----------htt ...

  8. 基于CentOS与VmwareStation10搭建hadoop环境

    基于CentOS与VmwareStation10搭建hadoop环境     目 录 1. 概述.... 1 1.1. 软件准备.... 1 1.2. 硬件准备.... 1 2. 安装与配置虚拟机.. ...

  9. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.2.安装 cvuqdisk 软件包

    3.2.安装 cvuqdisk 软件包 3.2.1. 准备Oracle  Grid安装包 上传Grid .Oracle 安装文件: sftp> put E:\Software\linux.x64 ...

随机推荐

  1. Android Do not keep activities选项分析

    Android Do not keep activities选项分析 Developer Options里面有一项: Do not keep activities -> 不保留Activitie ...

  2. iOS多线程之5.GCD的基本使用

      上一篇文章我对GCD的几个基本概念做了介绍,但是大家看完了可能觉得对理解GCD并没有什么卵用.其实会用GCD其实很简单,只要记住两条就可以了. 1. 主队列里的任务必须在异步函数中执行.   主队 ...

  3. iOS - Json解析精度丢失处理(NSString, Double, Float)

    开发中处理处理价格金额问题, 后台经常返回float类型, 打印或转成NSString都会有精度丢失问题, 因此使用系统自带的NSDecimalNumber做处理, 能解决这问题:经过测试其实系统NS ...

  4. The operation couldn’t be completed. (LaunchServicesError error 0.)

    问题描述: 当运行Xcode时,编译代码成功,但是登陆模拟器失败,显示错误:The Operation couldn't be completed.(LaunchServicesError error ...

  5. 可扩展的事件复用技术:epoll和kqueue

    通常来说我喜欢Linux更甚于BSD系统,但是我真的想在Linux上拥有BSD的kqueue功能. 什么是事件复用技术 假设你有一个简单的web服务器,并且那里已经打开了两个socket连接.当服务器 ...

  6. 新书出版《.NET框架设计—模式、配置、工具》感恩回馈社区!

    很高兴我的第一本书由图灵出版社出版.本书总结了我这些年来对框架学习.研究的总结,里面纯干货,无半句废话. 书的详情请看互动网的销售页面:http://product.china-pub.com/377 ...

  7. CDH离线数据导入solr:利用MapReduceIndexerTool将json文件批量导入到solr

    场景描述:前段时间,将实时数据通过kafka+flume+morphline的方式接入到solr中.新进来的数据已经可以在solr中看到了,但是以前的历史数据还没有导入solr. CDH提供利用Map ...

  8. Solr嵌套子文档的弊端以及一种替代方式

    背景:在考察了多种工具后,我们决定使用solr来作为多标签用户管理体系的查询方案. 原计划:电话,call客,跟进等等记录上报到kafka,然后通过flume+morphline录入到solr中.每一 ...

  9. 【Linux学习】Linux下用户组、文件权限详解

    原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...

  10. MSSQL复制中的发布与订阅

    准备条件 1.2台服务器 2.WINDOWS SERVER 2008 64bit + 3.SQL SERVER 2008 R2 + 4.MSSQLSERVER服务与MSSQLAGENT服务正常运行中 ...