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

简介: 制作docker镜像文件,用来编译pinpoint1.6.x分支

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos
  • 在上一章《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网站上,方便自己和他人使用;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关文章
|
1天前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
50 28
|
1月前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
20天前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
44 3
docker push推送自己搭建的镜像
|
24天前
|
Docker 容器
|
1月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
60 9
|
2月前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
2635 30
|
1月前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
51 4
|
1月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
78 3
|
2月前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
2月前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
178 2

热门文章

最新文章