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.pswp.cn/news/714231.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714231.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714231.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

臨時筆記2

臨時筆記2 數據庫設計 有哪些表 表里有哪些字段 表和表之間是什么關系 JDBC(全稱&#xff1a;JAVA DATABASE CONNECTIVITY) 本質是官方定義的一套操作所有關系型數據庫的規則&#xff0c;即接口。每個數據庫廠商去實現這一接口&#xff0c;寫出實現類&#xff0c;即驅動&…

List<Object>集合對象屬性拷貝工具類

目錄 問題現象&#xff1a; 問題分析&#xff1a; 解決方法&#xff1a; 問題現象&#xff1a; 最近在項目中經常會使用到BeanUtils工具類來作對象的屬性字段拷貝&#xff0c;但如果應用到List集合的話就需要遍歷去操作了&#xff0c;如下&#xff1a; 打印結果&#xff1a; …

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

關于怎么開啟后效效果我這里不再贅述&#xff0c;可以前往Cocos官方文檔查看具體細節&#xff1a;后效處理官網 下面講一下怎么自己定義一個后處理效果&#xff0c;想添加自己的后效處理的話只需要在postProcess節點下添加一個BlitScreen 組件即可&#xff0c;然后自己去添加自…

第三方集成站點帶token訪問SpringSecurity應用站點自動登錄方案

近期有個WEB項目需要改造。業主找第三方搞了一個集成站點&#xff0c;將多個應用站點的鏈接集中放在一個導航頁面。由于進入集成站點時已經登錄過了&#xff0c;業主要求點擊這些應用站點的鏈接時就不必再登錄。 以前做過類似項目&#xff0c;用的是單點登錄。大家都用同一個登…

關于python數據可視化的學習(多維數組)

import numpy as np # 通過這個語句可以知道其是否存在nmpy這個包 創建數據 H np.array([[[94,26],[11,11]],[[22,22],[23,23]],[[33,33],[33,34]]]) # 理解其中的邏輯結構然后開始運行 # 一個基礎維度邏輯數據結構中包含一個一個二維數據&#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.攻擊內網或本地的…

Selenium 4.0+ 版本的“正確使用”以及“驅動程序的正確安裝”

前言 本文是該專欄的第18篇,后面會持續分享python爬蟲干貨知識,記得關注。 你是否還在使用selenium 3.0+版本呢?如果還是在使用selenium的舊版本,那就好好看完這篇文章,讓你立刻使用上最新的selenium版本——selenium 4.0+版本。 我們都知道selenium是一個開源的Web自動…

python+Selenium以IE模式打開edge瀏覽器

一、修改ie的注冊表 計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones 下邊5個文件夾下的2500的值改成3 計算機\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones 下邊5個文件夾下的2…

全量知識系統問題及SmartChat給出的答復 之12 知識圖表設計

Q32. 畫一個圖表 今天&#xff0c;我們開始設計圖表&#xff0c;以便能直觀表示前面各種概念名相及其位置關系&#xff0c;發現其中的問題和錯誤。 先畫出一個3*3的表格&#xff0c;還有一根對角線&#xff08;左上到右下&#xff09;&#xff0c;上面有列名&#xff0c;分別…

戲說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分支上進…

MySQL學生成績管理系統based on C++ and Clion

mysql_free_result()函數的作用是釋放結果集的內存&#xff0c;是同步的&#xff0c;也就是要中斷一下 該實驗使用了MySQL鏈接數據庫的基本使用方法&#xff0c;具體使用了 MYSQL_RES 數據庫的mysql_store_result()函數的返回值是一個結果集&#xff0c;該函數的作用是檢索比…

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-安裝包…

探索ECMAScript語法的深度奧秘

隨著現代Web應用的崛起&#xff0c;ECMAScript&#xff08;簡稱ES&#xff09;成為了前端開發者的必備利器。ECMAScript定義了JavaScript的語法和基本結構&#xff0c;是JavaScript的標準規范。本文將深入探討ECMAScript語法的一些精妙之處&#xff0c;為讀者揭示其中的深度奧秘…

P10166 [DTCPC 2024] 環

解題思路 滿足的序列即為環若圖上有環&#xff0c;則代價為0若無環&#xff0c;則在圖上已有的邊在添加一條回邊可形成環對所有的點由小到大排序由于環的大小可以為2初值設為&#xff0c;先不管最小點之間是否有邊&#xff0c;反正不會更劣通過拓撲排序找環&#xff0c;在找環…