制作镜像与配置推送阿里云仓库

一、制作jdk镜像

1.1、Alpine linux简介

Alpine Linux是一个轻量级的Linux发行版,专注于安全、简洁和高效。它采用了musl libc和BusyBox,使得系统资源占用较少,启动速度较快。

Alpine Linux也提供了一个简单的包管理工具APK,(注意:ubuntu中是apt-get),我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息,可以方便地安装、升级和管理软件包。由于其轻量级和高安全性,Alpine Linux常被用于容器化应用和嵌入式系统中

Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker镜像,它的体积非常小

     对比常用的、没有压缩过的基础镜像(查看当前的:latest标签):

     Alpine - 4.8MB

     centos - 124.8 MB                 之前200MB

     Debian - 125.1MB

     Centos - 196MB

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

     alpine:3.10

1.2、基于alpine制作JDK8镜像

原因:

1. Alpine是一个轻量级的Linux发行版,它的基础镜像大小很小,因此构建的镜像也会更加轻量化,节省存储空间和网络带宽。

2. Alpine使用了musl libc代替了glibc,这样可以减少一些依赖和提高性能,尤其是在容器环境下。

3. Alpine采用了最小化的设计原则,只包含最基本的软件包,因此更加安全,减少了潜在的安全风险。

4. Alpine的包管理工具apk相对于CentOS的yum更加简洁和高效,构建镜像的过程会更加快速。

不基于centos,而基于alpine,可以带来更好的性能、安全性和效率。

1.3、具体操作v2.0

   下载镜像

 docker pull alpine:latest

   创建并编辑dockerfile

#进到data目录
cd /home/sha/data/#创建文件夹
vim  myjdkDockerfile1

复制的内容

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

FROM alpine:latest

#FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件

MAINTAINER xyz "sha@qq.com"

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

WORKDIR /sha_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>

## ADD与COPY的区别:ADD复制并解压,COPY仅复制

ADD jdk-8u221-linux-x64.tar.gz /sha_docker/jdk/

## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中

COPY glibc-2.29-r0.apk /sha_docker/jdk/

COPY glibc-bin-2.29-r0.apk /sha_docker/jdk/

COPY glibc-i18n-2.29-r0.apk /sha_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=/sha_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"]

粘贴后不能乱码

上传文件

制作镜像

 docker build -f myjdkDockerfile1 -t jdk8:v2.0 .

测试

 docker run -it --name mj1 +容器ID(docker images查出来 第三列就是)

1.4、具体操作v3.0

编译环境(写代码)的是class文件,运行文件是jre

   1.首先下载jre或者上传

下载地址是https://www.java.com/en/download/manual.jsp,大概是77M

    最终下载的资料为:/jre-8u221-linux-x64.tar.gz

   解压

      tar -zxvf jre-8u221-linux-x64.tar.gz

      #查看jre大小(瘦身前230M)

      du -sh jre1.8.0_221

      #进入jre目录,并执行瘦身命令

      cd jre1.8.0_221

      #执行瘦身命令(命令见资料,瘦身后111M)

\换行|隔行运行命令

#删除文本文件
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

测试

返回上级,再次测试du -sh jre1.8.0_221大小

          

      返回上级目录,重新打包jre

   

   

#返回上一级
cd ../#删除之前220M的
rm -rf jre-8u221-linux-x64.tar.gz#打成压缩包
tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221

创建并编辑dockerfile

vim myjdkdockerfile1

      注1:dockerfile内容如下

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

FROM alpine:latest

#FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件

MAINTAINER xyz "xyz@qq.com"

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

WORKDIR /javaxl_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>

## ADD与COPY的区别:ADD复制并解压,COPY仅复制

## 注意~~~上传的瘦身后的jre

ADD jre1.8.0_221.tar.gz /javaxl_docker/jdk/

## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中

COPY glibc-2.29-r0.apk /javaxl_docker/jdk/

COPY glibc-bin-2.29-r0.apk /javaxl_docker/jdk/

COPY glibc-i18n-2.29-r0.apk /javaxl_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.配置环境变量

## 注意~~~没有jdk啦,直接指向jre

ENV JAVA_HOME=/javaxl_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"]

 执行dockerfile创建镜像

docker build -t myjdkdockerfile2 -t jdk8:v3.0 .

测试

查看(里面有id)
docker imagesdocker run -it --name mj2 容器iDjava -version

   注1:openjdk:8-jdk-alpine这个镜像就和我们自己创建的镜像是一样,只不过JDK瘦身过了,体积更小。

        另外,openjdk和jdk也是有一定区别的,大家可以看下资料“14 OpenJDK与JDK的区别分析 - 简书.mht”了解一下

   注2:Alpine制作JDK8镜像是有时区问题的,可以使用时区查看命令看一下

    

二、配置阿里云镜像仓库

2.1、Docker镜像上传至阿里云

容器镜像服务 (aliyun.com)

认证一下

退出去再次按照之前那样进入

2.2、推送阿里云

复制这个去浏览器

复制令牌

绑定成功就代表成功了

回答上传阿里再次开始

发现Godeup有选择了

复制它去登录,注意不用把$它也复制上去,否则报错

登录

输入密码后要等一会

忘记密码可以点击菜单:“容器镜像服务”->“默认实例”-->“访问凭证”进行修改

   docker login --username=javaxl registry.cn-shenzhen.aliyuncs.com

上传

#查看(可以看到容器id)
docker images#打标
docker tag 容器id registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]#上传
docker push registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

 

检查成功

下拉

假设换了服务器,所有要删除本地的

#删除,删除失败用下面的
dockker rmi -f 容器端口号#查看
docker ps#
docker rm -f mj2docker rmi -f 容器端口号

   从Registry中拉取镜像

   docker pull registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

测试运行

#
docker images#mj3 取一个名字
docker run -it --name mj3 容器idjava -version

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

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

相关文章

【计算机网络_应用层】协议定制序列化反序列化

文章目录 1. TCP协议的通信流程2. 应用层协议定制3. 通过“网络计算器”的实现来实现应用层协议定制和序列化3.1 protocol3.2 序列化和反序列化3.2.1 手写序列化和反序列化3.2.2 使用Json库 3.3 数据包读取3.4 服务端设计3.5 最后的源代码和运行结果 1. TCP协议的通信流程 在之…

深入分析Android运行时环境ART:原理、特点与优化策略

摘要 随着移动互联网的快速发展&#xff0c;智能手机的性能和功能日益强大&#xff0c;其中Android操作系统因其开放性和灵活性而占据主导地位。Android运行时环境&#xff08;ART&#xff09;作为执行应用程序代码的关键组件&#xff0c;在系统性能和用户体验方面起着至关重要…

Vue+SpringBoot打造高校学生管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学生选课模块2.4 成绩管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学院课程表3.2.3 学生选课表3.2.4 学生成绩表 四、系统展示五、核心代码5.1 查询课程5.2 新…

超详细红黑树的模拟实现

前言 有人说设计出AVL树的的人是个大牛&#xff0c;那写红黑树&#xff08;RBTree&#xff09;的人就是天才&#xff01; 上一篇文章&#xff0c;我们已经学习了AVL树&#xff0c;牛牛个人认为AVL树已经够优秀了&#xff0c;那让我们一起探究一下&#xff0c;为什么红黑树比AV…

链表类型题目

文章目录 简介链表的常用技巧两数相加原理代码代码|| 两两交换链表中的节点代码原理 重排链表(重要)原理代码 合并 K 个升序链表代码递归代码 K 个一组翻转链表原理代码 简介 大家好,这里是jiantaoyab,这篇文章给大家带来的是链表相关的题目练习和解析,希望大家能相互讨论进步 …

[线代]自用大纲

部分内容整理自张宇和网络 序 题型分布&#xff1a; 题型单题分值题目数量总分值选择题5315填空题515解答题12112 *一道大题可能用到六部分所有知识 矩阵 性质 k k k倍和乘积行列式 ∣ k A ∣ k n ∣ A ∣ |kA|k^n|A| ∣kA∣kn∣A∣ ∣ A B ∣ ≠ ∣ A ∣ ∣ B ∣ |AB|≠…

如何解决微服务的数据一致性分发问题?

介绍 系统架构微服务化以后,根据微服务独立数据源的思想,每个微服务一般具有各自独立的数据源,但是不同微服务之间难免需要通过数据分发来共享一些数据,这个就是微服务的数据分发问题。Netflix/Airbnb等一线互联网公司的实践[参考附录1/2/3]表明,数据一致性分发能力,是构…

【 10X summary report】怎么看?详细解读笔记

报告内容 在开始正式的分析之前&#xff0c;需要查看在对齐和计数过程中生成的任何总结统计信息。下图是由Cell Ranger工具创建的10X总结报告&#xff0c;在从10X scRNA-seq实验生成计数矩阵时会生成。 The left half of the report describes sequencing and mapping statist…

C++之stack

1、stack简介 stack是实现的一个先进后出&#xff0c;后进先出的容器。它只有一个出口&#xff0c;只能操作最顶端元素。 2、stack库函数 &#xff08;1&#xff09;push() //向栈压入一个元素 &#xff08;2&#xff09;pop() //移除栈顶元素 &#xff08;3…

基于springboot+vue的中国陕西民俗网

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

nginx,php-fpm

一&#xff0c;Nginx是异步非阻塞多进程&#xff0c;io多路复用 1、master进程&#xff1a;管理进程 master进程主要用来管理worker进程&#xff0c;具体包括如下4个主要功能&#xff1a; &#xff08;1&#xff09;接收来自外界的信号。 &#xff08;2&#xff09;向各worker进…

SAP PP学习笔记04 - BOM2 -通过Serial来做简单的BOM变式配置,副明细,BOM状态,BOM明细状态,项目种类,递归BOM

本章继续讲BOM。 本章讲通过Serial来做简单的BOM变式配置。还讲了BOM的相关概念&#xff1a;副明细&#xff0c;BOM状态&#xff0c;BOM明细状态&#xff0c;项目种类&#xff0c;递归BOM 等。 1&#xff0c;通过Serial&#xff08;序列号&#xff09;来做简单的 VC&#xff0…

Some collections -- 2024.3

一、TensorFlow Android (dataset: Mnist) We used TensorFlow to define and train our machine learning model, which can recognize handwritten numbers, called a number classifier model in machine learning terminology. We transform the trained TensorFlow mod…

2024.03.01作业

1. 基于UDP的TFTP文件传输 #include "test.h"#define SER_IP "192.168.1.104" #define SER_PORT 69 #define IP "192.168.191.128" #define PORT 9999enum mode {TFTP_READ 1,TFTP_WRITE 2,TFTP_DATA 3,TFTP_ACK 4,TFTP_ERR 5 };void get_…

高维中介数据:基于交替方向乘子法(ADMM)的高维度单模态中介模型的参数估计(入门+实操)

全文摘要 用于高维度单模态中介模型的参数估计&#xff0c;采用交替方向乘子法&#xff08;ADMM&#xff09;进行计算。该包提供了确切独立筛选&#xff08;SIS&#xff09;功能来提高中介效应的敏感性和特异性&#xff0c;并支持Lasso、弹性网络、路径Lasso和网络约束惩罚等不…

npm 镜像源切换与设置

项目背景 依赖安装中断或响应特别慢。 可以看到当前所用的镜像是 https://registry.npmjs.org 。 切换淘宝镜像之后总算能够安装下来 命令行模式 查看当前镜像源 # 查看当前镜像源 npm config get registry 可以看到默认情况下是官方默认全局镜像 https://registry.npmjs.o…

竞争加剧下,登顶后的瑞幸该做什么?

瑞幸咖啡仅用短短18个月时间从品牌创立到纳斯达克上市&#xff0c;刷新全球最快上市记录。2020年因交易造假事件被勒令退市股价暴跌80%&#xff0c;有人说这个创造了赴美IPO奇迹的“巨婴”将是下一个倒下的ofo。2023年瑞幸咖啡以逆势超速增长领跑咖啡赛道有力回应了市场的质疑&…

Java多线程实现发布和订阅

目录 简介 步骤 1: 定义消息类 步骤 2: 创建发布者 步骤 3: 创建订阅者 步骤 4: 实现发布-订阅模型 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡…

棋牌室计时计费管理系统的灯控器连接教程

棋牌室计时计费管理系统的灯控器连接教程 一、前言 以下教程以 佳易王棋牌室计时计费管理系统软件V18.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 如上图&#xff0c;计时计费软件在开始计时的时候&#xff0c;点击 开始计时 如果连接了…

YOLOv9独家改进|动态蛇形卷积Dynamic Snake Convolution与空间和通道重建卷积SCConv与RepNCSPELAN4融合

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 Dynamic Snake Convolution是一种针对细长微弱的局部结构特征与复杂多变的全局形态特征设计的卷积模块。 SCConv是一种即插即用的空间…