关于alpine如何制作JDK镜像

news2024/9/20 18:47:55
    • Docker制作jdk镜像(v1.0)

1.1首先编写Dockerfile文件

#1.指定基础镜像,并且必须是第一条指令
        RROM centos:7

        #2.指明该镜像的作者和其电子邮件
        MAINTAINER xnx "zwc@qq.com"

        #3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
        WORKDIR /zwc_docker/jdk

        #4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
        ADD jdk-8u221-linux-x64.tar.gz /xnx_docker/jdk/

        #5.配置环境变量
        ENV JAVA_HOME=/zwc_docker/jdk/jdk1.8.0_221
        ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
        ENV PATH=$JAVA_HOME/bin:$PATH

        #容器启动时需要执行的命令
        #CMD ["java","-version"]

1.2.执行Dockerfile文件

docker build -t jdk8:v1.0 .

1.3.查看镜像

docker images

1.4.创建并启动容器

docker run -it jdk8:v1.0 /bin/bash

1.5.检查是否有问题

2.alpine制作jdk镜像

2.1.alpine Linux简介

1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 
BusyBox以减少系统的体积和运行时的资源消耗

2.Alpine Linux提供了自己的包管理工具:apk(注意:ubuntu中是apt-get),我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息

3.Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker镜像,它的体积非常小
     对比常用的、没有压缩过的基础镜像(查看当前的:latest标签):
     Alpine - 4.8MB
     centos - 124.8 MB
     Debian - 125.1MB
     Centos - 196MB

4.建议使用Alpine Linux 3.10.0版本,这也是 v3.10 稳定系列的首个版本
     alpine:3.10 

2.2.基于alpine制作JDK8镜像

编写Dockerfile文件

vi Dockerfile

#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件
MAINTAINER zwc "xnx@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /zwc_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u221-linux-x64.tar.gz /zwc_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /zwc_docker/jdk/
COPY glibc-bin-2.29-r0.apk /zwc_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /zwc_docker/jdk/

#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade

#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
## ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add ca-certificates wget \
    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
    && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \
    && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk

#7.配置环境变量
ENV JAVA_HOME=/zwc_docker/jdk/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

#容器启动时需要执行的命令
#CMD ["java","-version"]


执行Dockerfile文件

docker build -t jdk8:v2.0 .

若出现如下错误:

则:

修改/etc/sysctl.conf文件,添加如下内容:
net.ipv4.ip_forward=1
然后重启网络:
systemctl restart network
查看是否添加成功:
sysctl net.ipv4.ip_forward
排除非网络问题导致后,尝试重启docker后,即可顺利解决以上问题。
systemctl restart docker

设置完成后重新运行:

3.Alpine制作jre镜像(瘦身)

3.1.首先下载jre

下载地址是 https://www.java.com/en/download/manual.jsp,大概是77M
最终下载的资料为:/jre-8u221-linux-x64.tar.gz

3.2.gz上传至centos,并删除无用的文件,并重新压缩

解压
tar -zxvf jre-8u221-linux-x64.tar.gz
查看jre大小(瘦身前230M)
du -sh jre1.8.0_221
进入jre目录,并执行瘦身命令
cd jre1.8.0_221
执行瘦身命令
删除文本文件
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txtTHIRDPARTYLICENSEREADME.txt Welcome.html
删除其他无用文件
rm -rf lib/plugin.jar
lib/ext/jfxrt.jar
bin/javaws
lib/javaws.jar
lib/desktop
plugin
lib/deploy*
lib/javafx
lib/jfx
lib/amd64/libdecora_sse.so
lib/amd64/libprism_.so
lib/amd64/libfxplugins.so
lib/amd64/libglass.so
lib/amd64/libgstreamer-lite.so
lib/amd64/libjavafx.so
lib/amd64/libjfx*.so
返回上级目录,重新打包jre
cd …/
tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221

3.3.创建并编辑dockerfile


#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10
#2.指明该镜像的作者和其电子邮件
MAINTAINER zwc " zwc@qq.comMAINTAINER zwc "zwc@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /zwc_docker/jdk
#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
## 注意~~~上传的瘦身后的jre
ADD jre1.8.0_221.tar.gz /zwc_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /zwc_docker/jdk/
COPY glibc-bin-2.29-r0.apk /zwc_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /zwc_docker/jdk/
#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
echo http://mirrors.aliyun.com/alpine/v3.10/community/ echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade
#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
## ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add ca-certificates wget \
&& wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
&& apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \
&& rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk
#7.配置环境变量
## 注意~~~没有jdk啦,直接指向jre
ENV JAVA_HOME=/zwc_docker/jdk/jre1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#容器启动时需要执行的命令
#CMD ["java","-version"]

3.4.执行dockerfile创建镜像

docker build -t jdk8:v3.0 .

3.5.进入容器

docker exec -it 容器ID /bin/sh

3.6.测试jdk

java -version

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python自制简易版计算器小程序

前言 今天来给你们分享一个自制的桌面小程序【简易版计算器】 文章内有效果展示&#xff0c;你们可以自行看看哦 不想看文章&#xff0c;想直接领取源码的话&#xff0c;可以直接点击文章末尾的名片哈 环境准备 Python 3.6 Pycharm 代码展示 界面设置 导入模块 所有 源码 …

STM32读取SHT3x系列温湿度传感器,标准库和HAL库

STM32读取SHT3x系列(SHT30、SHT31、SHT35)温湿度传感器的数据并显示在0.96寸OLED屏上。 我下面提供两份代码&#xff0c;一份是标准库使用硬件I2C的&#xff0c;另一份是HAL库使用软件模拟IIC的。 我用的单片机是STM32F103C8T6&#xff0c;温湿度传感器是SHT30。 STM32软件I…

Spring Cloud与Nacos部署Spring Boot项目

本文记录一个用于Spring Cloud 和nacos的一个项目配置方案 本文主要通过nacos实现了两点功能&#xff1a; 1、服务的注册与发现 2、nacos的动态配置 项目中主要包括了nacos-consumer和nacos-provider&#xff0c;一个消费者&#xff0c;一个生产者的角色&#xff0c;消费者负责…

旋转目标检测复现-yolov5-obb

复现源码&#xff1a; https://github.com/hukaixuan19970627/yolov5_obb 亲测可行 安装流程&#xff1a; 按照https://github.com/hukaixuan19970627/yolov5_obb/blob/master/docs/install.md 确保安装过程不报错&#xff0c;否则影响后续训练 安装成功即可准备数据集 hf_t…

MySQL复制技术方案——组复制

1&#xff0e;原理 增强半同步复制虽然解决了HA切换之后的幻读问题&#xff0c;也从一定程度上使得主从实例 之间的数据一致性保障得到增强&#xff0c;但是仍然还有很多问题需要解决。 例如&#xff1a; HA切换程度需要依赖于MySQL服务器之外的第三方程序实现&#xff0c;维…

2022年12月安全事件盘点

2022年12月安全事件盘点 一、基本信息 2022年12月安全事件共造成约8327万美元损失&#xff0c;金额数量较上月有所下降。本月RugPull数量基本与上月持平。但临近年底&#xff0c;熊市社媒诈骗等较上个月有所增加&#xff0c;Discord攻击诈骗成为重灾区。另外本月依然有钱包&…

产线工控设备安全现状分析

工控设备安全现状 工业控制系统是支撑国民经济的重要设施&#xff0c;是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域&#xff0c;支撑起国计民生的关键基础设施。 随着传统的工业转型&#xff0c;数字化、网络化和智能化的工…

IB课程为什么深受国际学生的喜爱?

凯恩斯是一个被大自然包围的城市。由于得天独厚的地理位置&#xff0c;在凯恩斯随时都可以让你感受到与自然融为一体的亲近与惬意。此外&#xff0c;安全性高也是一大优势&#xff0c;昆士兰当地人对国际学生非常热情友好&#xff0c;在你需要帮助的时候&#xff0c;从来不会感…

C++跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架源码

C跨平台&#xff08;支持LINUX&#xff0c;WIN32&#xff0c;Solaris&#xff0c;MacOS&#xff0c;FreeBSD&#xff09;的网络通信库及服务器编程框架源码 完整代码下载地址&#xff1a;跨平台的网络通信库及服务器编程框架源码 一、描述 1.1、库组成1.2、功能模块组成 1.2.1…

linux配置xrdp

源码 https://github.com/neutrinolabs/xrdp.git xrdp需要安装openssl-devel, pam-devel, libX11-devel, libXfixes-devel, libXrandr-devel ./bootstrap //git submodule下载&#xff0c;需要安装nasm&#xff0c;autoconf生成configure ./configure && make -j4 &a…

区块链与智慧城市

智慧城市的概念涵盖了城市领域的硬件、软件、管理、计算、数据分析等服务的集成。概括地说&#xff0c;就是利用信息通信技术&#xff08;ICT&#xff09;对城市运行各个环节的关键信息进行感知、整合、存储、处理、分析、预测和响应&#xff0c;从而提供智能响应和辅助决策。满…

工业建筑的应急照明系统的设计原则及常见电气设计问题与解决方案

【摘要】:文章根据《消防应急照明和疏散指示系统技术标准》&#xff08;GB513O9-2018&#xff09;,介绍了工业建筑的应急照明系统的设计原则及常见电气设计问题与解决方案。 【关键词】:工业建筑&#xff1b;消防;应急照明&#xff1b;疏散标志;系统设计&#xff1b;安科瑞 李…

p2机器学习基本概念简介

2. 第 1 讲&#xff1a;机器学习基本概念简介上_哔哩哔哩_bilibili 机器学习找一个合适的函数&#xff1a; 随着找的函数不同&#xff0c;机器学习就有了不同的类别&#xff0c;下面了解一些专有名词&#xff1a; Regression&#xff1a;假设找的函数输出是一个数值&#xff…

学习笔记4:数据的存储

目录 一. 整形家族数据在内存中的存储 1.整形数据的原码&#xff0c;反码和补码 2.数据的大小端存储 3.相关练习 1.编写一个函数用于判断当前机器是大端存储类型还是小端存储类型 2.阅读代码判断程序输出内容 3.阅读代码判断程序输出内容 4.阅读代码判断程序输出内容 5.附头文…

5G NR标准 第13章 重传协议

第13章 重传协议 通过无线信道的传输容易出错&#xff0c;例如&#xff0c;由于接收信号质量的变化。 在某种程度上&#xff0c;这种变化可以通过第 14 章中讨论的链路适配来抵消。但是&#xff0c;接收机噪声和不可预测的干扰变化无法抵消。 因此&#xff0c;几乎所有无线通…

数字化时代,聊一聊企业的信息化整合

现如今&#xff0c;企业搭建的OA、ERP、CRM、HR、BI 以及财务软件等软件系统&#xff0c;其数据格式、数据库类别、操作系统、应用系统等不尽相同&#xff0c;位置分散相互独立&#xff0c;甚至有的企业在同一个系统下的财务、办公、销售、生产等系统也各自独立&#xff0c;相互…

蓝牙资讯|消息称苹果正开发 AirPods Lite 耳机

据 9to5Mac 报道&#xff0c;苹果目前正销售四种不同型号的 AirPods&#xff0c;包括第二代 AirPods 到定位更高端的 AirPods Max。虽然 AirPods 已成为非常受欢迎的耳机&#xff0c;但其并不便宜。 据海通国际分析师 Jeff Pu 爆料&#xff0c;苹果目前正在研发新的“AirPods…

SAP入门技术分享二:数据类型

数据类型1.概要2.数据类型的种类&#xff08;1&#xff09;ABAP基本数据类型&#xff08;2&#xff09;局部数据类型&#xff08;3&#xff09;全局数据类型3.DATA语句&#xff08;1&#xff09;TYPE type&#xff08;2&#xff09;LIKE num&#xff08;3&#xff09;VALUE int…

智能车|ROS主控与STM32建立通信软硬件全方位讲解

智能车|ROS主控与STM32建立通信软硬件全方位讲解前言智能车控制器功能通信内容硬件连接软件设置更新电平转换芯片的serial创建设备别名使用设备别名ROS与STM32串口通信代码ROS主控读取stm32发送的数据ROS主控向stm32发送数据前言 通常复杂的机器人会存在多个控制器&#xff0c;…

吴恩达《机器学习》——神经网络与反向传播

神经网络与反向传播1. 神经网络1.1 神经网络的前馈传播1.2 利用反向传播求梯度1.2.1 正则化梯度2. 目标函数&#xff08;损失函数&#xff09;2.1 PyTorch官方文档版本2.2 吴恩达讲解版本2.3 两种版本的区别在哪&#xff1f;2.4 正则化目标函数3. Python实现3.1 梯度校验3.2 封…