把pinpoint编译环境做成Docker镜像文件

在上一章《Docker下,极速体验编译pinpoint1.6.x分支》我们以最快的速度对pinpoint1.6.x分支进行编译构建,由于镜像文件bolingcavalry/jdk7-mvn339-pinpoint16x-compile:0.0.1中把pinpoint源码、jdk、maven这些东西都准备好了,甚至编译中所依赖的所有jar包都放进了本地仓库(450兆),使我们可以高效完成编译实战;

今天我们就来回顾一下这个镜像是怎么做的;

编译环境简述

先抛开Docker不谈,我们梳理一下编译构建pinpoint需要准备哪些东西: 1. linux环境,比如:CentOS release 6.7; 2. 提供ssh服务,以便上传下载文件; 3. jdk1.7; 4. maven3,例如maven3.3.9版本; 5. pinpoint源码,git地址是:https://github.com/naver/pinpoint.git; 6. pinpoint源码的master目前提交比较活跃,所以建议使用1.6.x分支; 7. 编译前,设置所需的环境变量,如:JAVA_HOME、JAVA_6_HOME、JAVA_7_HOME、JAVA_8_HOME等;

比较耗时的操作

以下这些步骤相对比较耗时: 1. git下载pinpoint源码; 2. 编译过程中,下载依赖的jar;

镜像规划

我们的镜像主要功能是把前面所说的编译环境搭建好,另外把那两个耗时的操作也做了,所以要把以下材料先准备好: 1. 基础镜像,用kinogmt/centos-ssh:6.7,集成了ssh服务; 2. 准备好jdk1.7的安装包,构建镜像的时候本地安装; 3. 提前把maven3.3.9安装包下载好,修改setting配置,加入阿里云的镜像服务器,构建镜像的时候直接复制到镜像中就行了; 4. 提前下载好pinpoint源码,构建镜像的时候直接复制; 5. 编译过程中会下载大量jar包,如果不提前准备好,编译时会耗费我们大量时间,我的做法是做个在一个干净的容器中做一次编译,这样依赖的jar包就保存到该容器的/root/.m2/目录下了,再把这个目录复制出来,制作镜像的时候复制到镜像就好;(不做这一步的话编译要四十多分钟,有了本地jar包编译时间缩短在十分钟之内); 6. 配置好环境变量,这样容器启动后就不用自己手动配置了;

可以在我的git下载上述材料

上述材料我已经上传到git上,地址是:git@github.com:zq2599/jdk7-mvn339-pinpoint16x-compile.git,如下图:

Dockerfile

接下来可以开始制作Dockerfile了,详细内容如下,每行都加了注释,就不多说了:

# Docker image of compile and build pinpoint 1.6.x
# VERSION 0.0.1
# Author: bolingcavalry

#基础镜像使用kinogmt/centos-ssh:6.7,支持ssh登录
FROM kinogmt/centos-ssh:6.7

#作者
MAINTAINER BolingCavalry <zq2599@gmail.com>

#定义工作目录
ENV WORK_PATH /usr/local/work

#定义jdk1.7的文件名
ENV JDK_RPM_FILE jdk-7u71-linux-x64.rpm

#定义JAVA_HOME
ENV JAVA_HOME /usr/java/jdk1.7.0_71

#定义编译pinpoint所需的环境变量
ENV JAVA_6_HOME $JAVA_HOME

#定义编译pinpoint所需的环境变量
ENV JAVA_7_HOME $JAVA_HOME

#定义编译pinpoint所需的环境变量
ENV JAVA_8_HOME $JAVA_HOME

#定义maven文件夹名称
ENV MAVEN_PACKAGE_NAME apache-maven-3.3.9

#把maven的bin加入PATH
ENV PATH $PATH:$WORK_PATH/$MAVEN_PACKAGE_NAME/bin

#定义pinpoint文件夹名称
ENV PINPOINT_PACKAGE_NAME pinpoint-1.6.x

#定义maven本地仓库路径
ENV MAVEN_REPOSITORY_PATH /root/.m2

#定义maven本地仓库文件夹名称
ENV MAVEN_REPOSITORY_PACKAGE_NAME repository


#创建工作目录
RUN mkdir -p $WORK_PATH

#yum更新
#RUN yum -y update

#把分割过的jdk1.7安装文件复制到工作目录
COPY ./jdkrpm-* $WORK_PATH/

#用本地分割过的文件恢复原有的jdk1.7的安装文件
RUN cat $WORK_PATH/jdkrpm-* > $WORK_PATH/$JDK_RPM_FILE

#本地安装jdk1.7,如果不加后面的yum clean all,就会报错:Rpmdb checksum is invalid
RUN yum -y localinstall $WORK_PATH/$JDK_RPM_FILE; yum clean all

#把maven文件夹复制到工作目录
COPY ./$MAVEN_PACKAGE_NAME $WORK_PATH/$MAVEN_PACKAGE_NAME

#把pinpoint文件夹复制到工作目录
COPY ./$PINPOINT_PACKAGE_NAME $WORK_PATH/$PINPOINT_PACKAGE_NAME

#创建maven仓库的目录
RUN mkdir -p $MAVEN_REPOSITORY_PATH

#把maven仓库文件夹复制到本地仓库
COPY ./$MAVEN_REPOSITORY_PACKAGE_NAME $MAVEN_REPOSITORY_PATH/$MAVEN_REPOSITORY_PACKAGE_NAME

#删除分割文件
RUN rm $WORK_PATH/jdkrpm-*

#删除jdk安装包文件
RUN rm $WORK_PATH/$JDK_RPM_FILE

制作镜像

在Dockerfile文件所在目录下,执行以下命令制作镜像:

docker build -t bolingcavalry/jdk7-mvn339-pinpoint16x-compile:0.0.1 .

构建完成后,执行docker images命令可以看到刚刚做好的镜像文件,如下图:

以上就是Docker下pinpoint编译环境的制作过程,如果您有hub.docker.com的账号,还能用docker push命令将这个镜像上传到hub.docker.com网站上,方便自己和他人使用;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

React Native在Windows下修改js代码后reload无效

iOS下因为有watchman这个插件,所以启动很快(npm start),而Windows下则非常慢,最要命的是遇到了修改js文件后,点击reload居然一直...

521
来自专栏前端菜鸟变老鸟

Datepicker日期选择器插件

这个插件还是比较简单的,而且样式也比较漂亮,可以自定义选择年月日、年月日时分、年月、时间段选择等等。

891
来自专栏python3

SourceTree安装

SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mercurial和Subversion版本控...

751
来自专栏Pythonista

Gitlab不小心关闭了sign-in,无法登录web的坑。。。

这里因为启动的慢gitlab web报错出现:502 ,Whoops, GitLab is taking too much time to respond.

1031
来自专栏程序员的SOD蜜

Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持

一、Oracle XE 数据库与连接工具安装使用 Oracle数据库历来以价格昂贵出名,当然贵有贵的道理,成为一个Oracle DBA也是令人羡慕的事情,如果程...

3337
来自专栏c#开发者

BizTalk 2013R2 WCF-LOB Oracle Adapter安装配置/问题&解决方法

BizTalk 2013R2 WCF-LOB Oracle Adapter安装配置/问题&解决方法 安装Oracle Adapter ? ? 安装Oracle客...

27012
来自专栏py+selenium

linux 安装weblogic12.1.3.0步骤

需注意:fmw_12.1.3.0.0_wls.jar     需要jdk1.7.0_15以上的版本

2495
来自专栏我的博客

ES中的索引管理

一、创建索引 如果需要手动创建索引,则需要更改配置当中 action.auto_create_index: false 二、删除索引 DELETE  /i...

34112
来自专栏实战docker

把pinpoint编译环境做成Docker镜像文件

在上一章《Docker下,极速体验编译pinpoint1.6.x分支》我们以最快的速度对pinpoint1.6.x分支进行编译构建,由于镜像文件bolingca...

1986
来自专栏林德熙的博客

win10 uwp 如何让WebView标识win10手机

本文主要:如何让WebView访问的网页识别为手机. 当然这句话我说不好,换个,如何让 WebView 识别为手机。 上面两句话都是错的,因为是服务器识别,不是...

502

扫码关注云+社区