Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略

前言

随着容器技术的日益成熟,Docker已经成为现代软件开发和部署的标配工具。其中,自定义Docker镜像是满足特定项目需求的关键步骤。特别是在Java开发环境中,我们可能需要为不同的项目配置不同版本的JDK。这时,通过Docker自定义JDK镜像,就能轻松实现环境的隔离和一致性。

此外,为了更好地管理和分发Docker镜像,选择一个可靠的镜像仓库至关重要。阿里云镜像仓库作为国内领先的云服务提供商,提供了稳定、高效的镜像存储和分发服务。本文将详细介绍如何使用Docker自定义JDK镜像,并将其推送到阿里云镜像仓库,以便在其他环境中轻松拉取和使用。

通过本文的指导,你将掌握Docker镜像的自定义技巧,以及如何将镜像与阿里云镜像仓库集成,为你的Java项目提供稳定、可靠的运行环境。无论你是Docker新手还是有一定经验的开发者,相信都能从中受益。

一.alpine自定义jdk镜像

1.alpine的介绍

是一个形容词,意为“高山的,阿尔卑斯山的”。它源自拉丁语“alpinus”,与阿尔卑斯山Alpine脉相关。在英语中,Alpine通常用来描述高海拔地区或高山环境。此外,在计算机技术领域中,Alpine也是一个备受瞩目的名词,指的是一种轻量级的Linux发行版,常用于构建容器化应用程序。

Alpine Linux的特点包括小巧轻便、出色的安全性以及高效的性能。其安装包体积较小,对资源的需求较低,因此能够提供更高的性能。同时,Alpine采用了自己独特的包管理工具apk,使得软件包的安装、更新和卸载变得更加快速和高效。由于这些特性,Alpine Linux在容器化技术中得到了广泛应用,如Docker等。

此外,Alpine Linux还具备高度的安全性。它通过使用堆栈保护、位置无关执行以及其他安全增强功能来减少潜在的漏洞和攻击面。同时,Alpine采用了完整的包管理系统,定期更新软件包以修复已知的安全漏洞。

总之,无论是在描述高山环境还是在计算机技术领域中的轻量级Linux发行版方面,Alpine都扮演着重要的角色。如需更多信息,建议查阅相关文献或咨询相关技术人员。

2.通过alpine进行制作镜像 

制作jdk2.0

#下载alpine镜像文件   

docker pull alpine:latest

   #2.创建并编辑dockerfile

   touch Dockerfile

   vi Dockerfile

   注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仅复制
ADD jdk-8u221-linux-x64.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、#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=/javaxl_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"]

   #3.执行dockerfile创建镜像

   docker build -t jdk8:v2.0 .

   #4.创建并启动容器

   docker create -it jdk8:v2.0   

进入容器并且校验

docker run -it --name myjdkV1  fda02c0ea41a

Alpine制作jre镜像

Docker容器之最小JRE基础镜像

 #解压

     

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

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

du -sh jre1.8.0_221

     

进行瘦身

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

创建并编辑dockerfile

      注1:dockerfile内容如下

vi myjdk

#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"]

   #4.执行dockerfile创建镜像

      docker build -t jdk8:v3.0 .

   #5.创建并启动容器

      docker create -it jdk8:v3.0   

  docker run -it --name myjdkV1  fda02c0ea41a

 二.配置阿里云镜像仓库

如何创建企业版实例_容器镜像服务(ACR)-阿里云帮助中心 (aliyun.com)icon-default.png?t=N7T8https://help.aliyun.com/zh/acr/user-guide/create-a-container-registry-enterprise-edition-instance?spm=a2c4g.11174283.0.0.3433568cepADaW

 

创建命名空间

 

 配置代码源

云效 Codeup · 企业级代码管理平台 (aliyun.com)icon-default.png?t=N7T8https://codeup.aliyun.com/

创建访问零盘

agp_796618880294070f6100ac470e4fae0b

 

 如何将其绑定在代码园中

 

配置镜像仓库

 

三.将自定义的jdk镜像拉去到阿里云仓库

登录阿里云Docker Registry

$ docker login --username=aliyun9101505856 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

$ docker pull registry.cn-hangzhou.aliyuncs.com/lz007/lz:[镜像版本号]

3. 将镜像推送到Registry

$ docker login --username=aliyun9101505856 registry.cn-hangzhou.aliyuncs.com$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lz007/lz:[镜像版本号]$ docker push registry.cn-hangzhou.aliyuncs.com/lz007/lz:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

4. 选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。

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

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

相关文章

List<Object>集合对象属性拷贝工具类

目录 问题现象&#xff1a; 问题分析&#xff1a; 解决方法&#xff1a; 问题现象&#xff1a; 最近在项目中经常会使用到BeanUtils工具类来作对象的属性字段拷贝&#xff0c;但如果应用到List集合的话就需要遍历去操作了&#xff0c;如下&#xff1a; 打印结果&#xff1a; …

Cocos Creator 3.8.x 后效处理(前向渲染)

关于怎么开启后效效果我这里不再赘述&#xff0c;可以前往Cocos官方文档查看具体细节&#xff1a;后效处理官网 下面讲一下怎么自己定义一个后处理效果&#xff0c;想添加自己的后效处理的话只需要在postProcess节点下添加一个BlitScreen 组件即可&#xff0c;然后自己去添加自…

Selenium基础:自动化你的网页交互!

在构建Python爬虫的过程中&#xff0c;你可能会遇到需要与网页进行交互的情况&#xff0c;比如填充表单、点击按钮等。这时&#xff0c;Selenium库就成了你的有力工具。Selenium是一个强大的工具&#xff0c;能够模拟用户在网页上的各种操作。本篇博客将向你介绍Selenium的基础…

EdgeX Foundry 设备服务

文章目录 1.设备服务2.设备配置文件3.设备资源4.资源属性&#xff08;Attributes&#xff09;5.资源属性&#xff08;Properties&#xff09;6.设备命令7.资源操作8.REST 命令端点9.推送事件 EdgeX Foundry # EdgeX Foundryhttps://iothub.org.cn/docs/edgex/ https://iothub.…

好用的AI模型集合

AI-Chat 这个网站提供的AI-Chat 3.5和AI-Chat 4.0聊天机器人&#xff0c;每天都可以免费使用。 不管是学习、工作还是日常生活&#xff0c;都能给我们带来很大的帮助&#xff0c;效率真的可以说是翻倍了。我觉得&#xff0c;如果你想让自己的生活更加高效、更加有序&#xff0…

WEB漏洞 SSRF简单入门实践

一、漏洞原理 SSRF 服务端请求伪造 原理&#xff1a;在某些网站中提供了从其他服务器获取数据的功能&#xff0c;攻击者能通过构造恶意的URL参数&#xff0c;恶意利用后可作为代理攻击远程或本地的服务器。 二、SSRF的利用 1.对目标外网、内网进行端口扫描。 2.攻击内网或本地的…

戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

前言 师弟&#xff1a;“师兄&#xff0c;我又被鄙视了。说我的系统太差&#xff0c;测试不过关。” 我&#xff1a;“怎么说&#xff1f;” 师弟&#xff1a;“每次发布版本给程夏&#xff0c;都被她发现一些bug&#xff0c;太丢人了。师兄&#xff0c;有什么方法来衡量测试的…

css实现背景渐变叠加

线性渐变效果图: .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#fff 30%),linear-gradient(to right,pink,skyblue);}径像渐变效果图&#xff1a; .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#…

【SVN】使用TortoiseGit删除Git分支

使用TortoiseGit删除Git分支 前言 平时我在进行开发的时候&#xff0c;比如需要开发一个新功能&#xff0c;这里以蘑菇博客开发服务网关-gateway功能为例 一般我都会在原来master分支的基础上&#xff0c;然后拉取一个新的分支【gateway】&#xff0c;然后在 gateway分支上进…

langchain学习笔记(七)

RunnablePassthrough: Passing data through | &#x1f99c;️&#x1f517; Langchain 1、RunnablePassthrough可以在不改变或添加额外键的情况下传递输入。通常和RunnableParallel结合使用去分配数值给到字典的新键 两种方式调用RunnablePassthrough &#xff08;1&#…

FL Studio21编曲制作软件中文版2024最新版本功能详细介绍

一、软件概述 FL Studio 21&#xff0c;全称Fruity Loops Studio 21&#xff0c;是一款功能强大的编曲制作软件&#xff0c;被广泛应用于音乐创作、编曲、录音、混音和后期制作等领域。其中文版为中国的音乐制作人和爱好者提供了更加便捷的操作体验。 FL Studio 21 Win-安装包…

P10166 [DTCPC 2024] 环

解题思路 满足的序列即为环若图上有环&#xff0c;则代价为0若无环&#xff0c;则在图上已有的边在添加一条回边可形成环对所有的点由小到大排序由于环的大小可以为2初值设为&#xff0c;先不管最小点之间是否有边&#xff0c;反正不会更劣通过拓扑排序找环&#xff0c;在找环…

AI技术大揭秘!你不可不知的顶级大模型

在这个数字化飞速发展的时代&#xff0c;AI大模型以其惊人的应用范围和深远的影响力&#xff0c;正逐渐成为各行各业的革命性力量。想象一下&#xff0c;在一个晴朗的午后&#xff0c;一个智能客服系统正轻松地处理着成千上万的客户咨询&#xff0c;不仅回答速度快捷&#xff0…

http状态,cookie、session、token的对比

http是无状态的&#xff0c;也就是说断开会话了服务器就不记得任何事情了&#xff0c;但这样对于用户会很麻烦&#xff0c;因为要不停输入用户名和密码 cookie是放在浏览器里的数据&#xff0c;第一次访问后服务器会set cookie&#xff0c;然后浏览器保存这个cookie&#xff0…

win10如何添加指纹登陆

1、首先进入设置,进入下一个设置页面 2、在下一个设置页面内,我们直接使用右上角的搜索框,输入“指纹/finger”进行搜索。回车之后进入设置指纹登陆选项 3、设置指纹登陆的前期是设置好你的密码和pin码(先要设定登录密码和pin码),这里pin和密码都可以直接登陆我们的win10,设…

qt 5.15版本安装

1.qt5.15版本安装 2.安装慢时&#xff0c;切换到清华镜像源&#xff1a;.\qt-unified-windows-x64-online.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt/ 3.没有qt 5.15版本在旁边进行筛选&#xff0c;只选archive

YOLOv9:使用可编程梯度信息学习您想学习的内容

摘要 arxiv.org/pdf/2402.13616.pdf 当今的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果能最接近于实际结果。同时,还必须设计一个适当的架构,以便于获取足够的预测信息。现有的方法忽略了一个事实,即当输入数据经历层层特征提取和空间变换时,会损失…

机器人与AGI会撞出什么火花?

真正的科技变革是不是就要来临了&#xff1f;各方大佬都开始布局机器人&#xff0c;对于普通人的就业会造成什么影响&#xff1f; ​ 优牛企讯-企业动态信息监控专家 在优牛企讯-企业动态监控专家搜索可知&#xff0c;全国目前的机器人公司已经达到了26401家&#xff0c;近一年…

关于机械臂的控制和基于tftp文件的上传和下载功能的实现

1、TCP客户端控制机械臂代码实现&#xff1a; #include <myhead.h> #define IP "192.168.126.58" #define PORT 8888#define CLI_IP "192.168.126.91" //客户端IP #define CLI_PORT 6666 //客户端端口号int main(int argc, const char *argv[]) {…

【AI Agent系列】【MetaGPT多智能体学习】3. 开发一个简单的多智能体系统,兼看MetaGPT多智能体运行机制

本系列文章跟随《MetaGPT多智能体课程》&#xff08;https://github.com/datawhalechina/hugging-multi-agent&#xff09;&#xff0c;深入理解并实践多智能体系统的开发。 本文为该课程的第四章&#xff08;多智能体开发&#xff09;的第一篇笔记。主要记录下多智能体的运行…