通过dockerfile制作代码编译maven3.8.8+jdk17 基础镜像

一、背景:

paas平台维护过程中有一个流水线的工作需要支持运维,最近有研发提出新的需求要制作一个代码编译的基础镜像出来,代码编译的基础镜像需求如下:
maven版本:3.8.8版本
jdk版本:17版本,小版本没有具体要求的

基础镜像要求是centos 7.9的

二、下载maven、jdk软件: 

1、下载jdk-17版本:

# wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

注:在制作时,需要指定目录,这里指定的是/xhj

2、下载maven 3.8.8版本:

这里是直接在官网上下载的

Maven – Download Apache Maven

 

下载之后将文件上传至/xhj目录下,上传动作这里就描述了,自行处理; 

三、开发Dockerfile文件内容: 

[root@stsc-master-01 xhj]# vim Dockerfile
FROM centos:7.9.2009
MAINTAINER xionghj
ADD jdk-17_linux-x64_bin.tar.gz  /usr/local/java/
ADD apache-maven-3.8.8-bin.tar.gz /usr/local
ENV JAVA_HOME=/usr/local/java/jdk-17.0.10
ENV CLASSPATH=.:$JAVA_HOME/lib/jrt-fs.jar
ENV PATH=$PATH:$JAVA_HOME/bin
ENV MAVEN_HOME=/usr/local/apache-maven-3.8.8
ENV PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

语法解析:

FROM:是引入基础镜像

MAINTAINER :描述镜像信息,主要是描述作者的
ADD :复制文件到镜像内,同时支持解压功能,与COPY不同
ENV :申明环境变量

四、构建镜像并验证镜像: 

1、 构建镜像:

[root@stsc-master-01 xhj]# docker build --platform linux/amd64  -t maven-jdk:v3.8.8-17.0.10 .

命令解析:
build:表示构建

--platform:表示申明镜像操作系统类别、架构

-t:表示构建镜像的名称及tag

 . :表示使用当前目录下的Dockerfile文件

Sending build context to Docker daemon  190.8MB
Step 1/9 : FROM centos:7.9.2009
 ---> eeb6ee3f44bd
Step 2/9 : MAINTAINER xionghj
 ---> Running in 1920884fbeef
Removing intermediate container 1920884fbeef
 ---> 08bd6e233730
Step 3/9 : ADD jdk-17_linux-x64_bin.tar.gz  /usr/local/java/
 ---> 7a4b741c8d1b
Step 4/9 : ADD apache-maven-3.8.8-bin.tar.gz /usr/local
 ---> b4ee05caffa7
Step 5/9 : ENV JAVA_HOME=/usr/local/java/jdk-17.0.10
 ---> Running in b4de7726b4db
Removing intermediate container b4de7726b4db
 ---> 6b88418e0d70
Step 6/9 : ENV CLASSPATH=.:$JAVA_HOME/lib/jrt-fs.jar
 ---> Running in 1af89c3c43fd
Removing intermediate container 1af89c3c43fd
 ---> 65ab3e5b6f6f
Step 7/9 : ENV PATH=$PATH:$JAVA_HOME/bin
 ---> Running in e08584fbcd51
Removing intermediate container e08584fbcd51
 ---> d3c995b7f157
Step 8/9 : ENV MAVEN_HOME=/usr/local/apache-maven-3.8.8
 ---> Running in 2a542665d081
Removing intermediate container 2a542665d081
 ---> 6c9d4cd34098
Step 9/9 : ENV PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
 ---> Running in d35f0be3fb99
Removing intermediate container d35f0be3fb99
 ---> afada222e5ff
Successfully built afada222e5ff
Successfully tagged maven-jdk:v3.8.8-17.0.10

查看构建的镜像 

[root@stsc-master-01 xhj]# docker images | grep maven-jdk
maven-jdk    v3.8.8-17.0.10    afada222e5ff     3 minutes ago       532MB

 2、验证镜像:

这里的验证镜像,就是通过docker run方式生成一个容器服务,然后登入容器里,执行:
java -version命令验证java环境
mvn -version命令验证maven环境

[root@stsc-master-01 xhj]# docker run -di --name maven-cicd -d maven-jdk:v3.8.8-17.0.10
e0fde146249af20ae0aec81102e141026d8a7c4ff3eaa76846e7b365a86fe729

 登入容器执行java、maven环境验证命令

[root@stsc-master-01 xhj]# docker exec -it maven-cicd /bin/bash
[root@e0fde146249a /]# java -version
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)
[root@e0fde146249a /]# mvn -version
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: /usr/local/apache-maven-3.8.8
Java version: 17.0.10, vendor: Oracle Corporation, runtime: /usr/local/java/jdk-17.0.10
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.10.0-1127.el7.x86_64", arch: "amd64", family: "unix"
[root@e0fde146249a /]# 

 通过命令验证了java、maven环境是正常的,那就是使用了。

五、上传镜像到harbor仓库里: 

将制作好的基础镜像上传到harbor镜像仓库里

# docker push maven-jdk:v3.8.8-17.0.10

 总结:

到此就结束了代码编译基础镜像maven3.8+jdk17,希望可以帮助到大家!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/500062.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++中的STL简介与string类

目录 STL简介 STL的版本 STL的六大组件 string类 标准库中的string类 string类的常用接口 string类对象对容量的操作 size()函数与length()函数 capacity()函数 capacity的扩容方式 reserve()函数 resize()函数 string类对象的操作 push_back()函数 append()函数 operator()函数…

Redis与数据库的一致性

Redis与数据库的数据一致性 在使用Redis作为应用缓存来提高数据的读性能时,经常会遇到Redis与数据库的数据一致性问题。简单来说,就是同一份数据同时存在于Redis和数据库,如何在数据更新的时候,保证两边数据的一致性。首先&#…

用Blender给MetaHuman不同胖瘦身体模型做插值,计算过度模型

用Blender给MetaHuman不同胖瘦身体模型做插值,计算过度模型 本篇文章所有想法和代码均为ChatGPT所写 需求:MetaHuman的身体有瘦、标准、胖三个体型,想要通过三个体型插值计算出符合用户体型的更多模型 建议:chatGPT建议用Blender&…

Mysql数据库:主从复制与读写分离

目录 前言 一、Mysql主从复制概述 1、Mysql主从复制概念 2、Mysql主从复制功能和使用场景 2.1 功能(为何使用主从复制) 2.2 适用场景(何时使用主从复制) 3、Mysql复制的类型 3.1 基于SQL语句的复制(Statement默…

【原生小程序-增加友盟统计】

1.project.config.json中 //最外面的 {"packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./"}] }2.在终端中输入npm init -y 3.再输入命令np…

整理git上的模板框架

vite-vue3.0-ts-pinia-uni-app 技术栈的app框架 功能:基于 uni-app,一端发布多端通用,目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 taro3vue3tsnutuipinia taro3 框架小程序跨端平台 vue3.0-element-vite-qiankun 后台…

HarmonyOS实战开发-如何构建多种样式弹窗

介绍 本篇Codelab将介绍如何使用弹窗功能,实现四种类型弹窗。分别是:警告弹窗、自定义弹窗、日期滑动选择器弹窗、文本滑动选择器弹窗。需要完成以下功能: 点击左上角返回按钮展示警告弹窗。点击出生日期展示日期滑动选择器弹窗。点击性别展…

【动态规划】Leetcode 62. 不同路径I 63. 不同路径II

【动态规划】Leetcode 62. 不同路径I 63. 不同路径II Leetcode 62. 不同路径ILeetcode 63. 不同路径II ---------------🎈🎈62. 不同路径I 题目链接🎈🎈------------------- ---------------🎈🎈63. 不同路…

【YOLOv5改进系列(7)】高效涨点----使用yolov8中的C2F模块替换yolov5中的C3模块

文章目录 🚀🚀🚀前言一、1️⃣ C3模块和C2F模块详解1.1 🎓 C3模块1.2 ✨BottleNeck模块1.3 ⭐️C2F模块 二、2️⃣添加C2f和C2F_Bottleneck模块代码三、3️⃣新建yolov5s_C2F.yaml文件四、4️⃣修改yolo.py中的parse_model函数五…

Collction的三种遍历

目录 集合体系结构 迭代器遍历: 增强for遍历: Lambda表达式遍历 集合体系结构 List 系列集合 : 添加元素是有序的、可重复的,有索引的; 有序的:存和取的顺序是一样的; Set 系列集合 &#…

综合实验1

一、配置IP地址 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [AR1-GigabitEthernet0/0/0]int se4/0/0 [AR1-Serial4/0/0]ip add 15.1.1.1 24 [AR1-Serial4/0/0] [AR2]int g0/0/0 [AR2-GigabitEthernet0/0/0]ip add 192.168.2.254 24 [AR2-Giga…

Sui与Revolut合作,加速Sui区块链教育和采用

作为全球一体化金融平台,Revolut与Sui合作推出了最新的加密货币学习课程。Revolut拥有全球超过4,000万用户,提供一系列数字银行产品和服务,包括购买和出售加密货币,其中包括SUI。 Revolut的学习计划为其用户提供有关Sui的教育&am…

蓝桥杯嵌入式学习笔记(7):ADC程序设计

目录 前言 1. ADC原理 1.1 主要特性 1.2 模拟输出电路图 2. 使用CubeMX进行源工程的配置 2.1 引脚配置 2.2 配置AD1 2.3 配置AD2 2.4 配置时钟 3. 代码编程 3.1 预备工作 3.2 bsp_adc.h文件编写 3.3 bsp_adc.c文件编写 3.4 main.c编写 3.4.1 时钟函数配置 3…

java子集(力扣Leetcode78)

子集 力扣原题链接 问题描述 给定一个整数数组 nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。可以按任意顺序返回解集。 示例 示例 1: 输入:nums [1,2,3] 输出&#x…

python3将exe 转支持库错误 AssertionError: None does not smell like code

exe -> pyc包(*.exe_extracted) 安装反编译工具 exe反编译工具:pyinstxtractor.py下载:https://sourceforge.net/projects/pyinstallerextractor/ python pyinstxtractor.py hello.exe包反编译 懒的写!!! 这有详…

英语广场期刊投稿发表论文

《英语广场》是由国家新闻出版总署批准的正规期刊,杂志本着“轻松读原作,快乐学英语”的宗旨,倡导“寓学于乐”的学习理念,其活泼的办刊风格和优秀的文章选材受到读者特别是广大中学生的广泛欢迎,取得了良好的社会效益…

redis 的设计与实现(三)——对象

1. 前言: 在第一章节我们了解到了,redis底层所涉及的数据结构,但是这并非是离我们最近的一层,在此之上,redis实现了一层对象与我们交互。我们在本篇内容中将了解到: 对象对应的实现redis一些常用特性的实现…

数字化坚鹏:小熊电器面向数字化转型的大数据顶层设计实践培训

小熊电器面向数字化转型的大数据顶层设计实践培训圆满结束 ——努力打造“数据技术营销”三轮驱动的数字化领先企业 小熊电器股份有限公司由李一峰创立于2006年,是一家专业从事创意小家电研发、设计、生产和销售的实业型企业。2019年8月23日正式在深交所挂牌上市。…

rust使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令,就需要知道对应的平台是windows还是linux,如果是windows就需要调用cmd命令,如果是linux平台,就需要调用sh命令,所以可以通过cfg!实现不同平台的判断,然后调用不同…

【21-40】操作系统基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【21-40】操作系统基础知识(非常详细)从零基础入门到精通,看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用44、程序从堆中动态分配内存时,虚拟内存上怎么操作的45、常见的几种磁盘调度算法1. 先来…