Docker自定義JDK鏡像并拉取至阿里云鏡像倉(cāng)庫(kù)超詳細(xì)攻略
前言
隨著容器技術(shù)的日益成熟,Docker已經(jīng)成為現(xiàn)代軟件開(kāi)發(fā)和部署的標(biāo)配工具。其中,自定義Docker鏡像是滿足特定項(xiàng)目需求的關(guān)鍵步驟。特別是在Java開(kāi)發(fā)環(huán)境中,我們可能需要為不同的項(xiàng)目配置不同版本的JDK。這時(shí),通過(guò)Docker自定義JDK鏡像,就能輕松實(shí)現(xiàn)環(huán)境的隔離和一致性。
此外,為了更好地管理和分發(fā)Docker鏡像,選擇一個(gè)可靠的鏡像倉(cāng)庫(kù)至關(guān)重要。阿里云鏡像倉(cāng)庫(kù)作為國(guó)內(nèi)領(lǐng)先的云服務(wù)提供商,提供了穩(wěn)定、高效的鏡像存儲(chǔ)和分發(fā)服務(wù)。本文將詳細(xì)介紹如何使用Docker自定義JDK鏡像,并將其推送到阿里云鏡像倉(cāng)庫(kù),以便在其他環(huán)境中輕松拉取和使用。
通過(guò)本文的指導(dǎo),你將掌握Docker鏡像的自定義技巧,以及如何將鏡像與阿里云鏡像倉(cāng)庫(kù)集成,為你的Java項(xiàng)目提供穩(wěn)定、可靠的運(yùn)行環(huán)境。無(wú)論你是Docker新手還是有一定經(jīng)驗(yàn)的開(kāi)發(fā)者,相信都能從中受益。
一.alpine自定義jdk鏡像
1.alpine的介紹
是一個(gè)形容詞,意為“高山的,阿爾卑斯山的”。它源自拉丁語(yǔ)“alpinus”,與阿爾卑斯山Alpine脈相關(guān)。在英語(yǔ)中,Alpine通常用來(lái)描述高海拔地區(qū)或高山環(huán)境。此外,在計(jì)算機(jī)技術(shù)領(lǐng)域中,Alpine也是一個(gè)備受矚目的名詞,指的是一種輕量級(jí)的Linux發(fā)行版,常用于構(gòu)建容器化應(yīng)用程序。
Alpine Linux的特點(diǎn)包括小巧輕便、出色的安全性以及高效的性能。其安裝包體積較小,對(duì)資源的需求較低,因此能夠提供更高的性能。同時(shí),Alpine采用了自己獨(dú)特的包管理工具apk,使得軟件包的安裝、更新和卸載變得更加快速和高效。由于這些特性,Alpine Linux在容器化技術(shù)中得到了廣泛應(yīng)用,如Docker等。
此外,Alpine Linux還具備高度的安全性。它通過(guò)使用堆棧保護(hù)、位置無(wú)關(guān)執(zhí)行以及其他安全增強(qiáng)功能來(lái)減少潛在的漏洞和攻擊面。同時(shí),Alpine采用了完整的包管理系統(tǒng),定期更新軟件包以修復(fù)已知的安全漏洞。
總之,無(wú)論是在描述高山環(huán)境還是在計(jì)算機(jī)技術(shù)領(lǐng)域中的輕量級(jí)Linux發(fā)行版方面,Alpine都扮演著重要的角色。如需更多信息,建議查閱相關(guān)文獻(xiàn)或咨詢相關(guān)技術(shù)人員。
2.通過(guò)alpine進(jìn)行制作鏡像
制作jdk2.0
#下載alpine鏡像文件 docker pull alpine:latest
#2.創(chuàng)建并編輯dockerfile
touch Dockerfile vi Dockerfile
注1:dockerfile內(nèi)容
1.指定基礎(chǔ)鏡像,并且必須是第一條指令 FROM alpine:latest #FROM alpine:3.10 #2.指明該鏡像的作者和其電子郵件 MAINTAINER xyz "xyz@qq.com" #3.在構(gòu)建鏡像時(shí),指定鏡像的工作目錄,之后的命令都是基于此工作目錄,如果不存在,則會(huì)創(chuàng)建目錄 WORKDIR /javaxl_docker/jdk #4.將一些安裝包復(fù)制到鏡像中,語(yǔ)法:ADD/COPY <src>... <dest> ## ADD與COPY的區(qū)別:ADD復(fù)制并解壓,COPY僅復(fù)制 ADD jdk-8u221-linux-x64.tar.gz /javaxl_docker/jdk/ ## glibc安裝包如果從網(wǎng)絡(luò)下載速度實(shí)在是太慢了,先提前下載復(fù)制到鏡像中 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的軟件源為阿里云,因?yàn)閺哪J(rèn)官源拉取實(shí)在太慢了 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.運(yùn)行指定的命令 ## Alpine linux為了精簡(jiǎn)本身并沒(méi)有安裝太多的常用軟件,apk類(lèi)似于ubuntu的apt-get, ## 用來(lái)安裝一些常用軟V件,其語(yǔ)法如下:apk add bash wget curl git make vim docker ## wget是linux下的ftp/http傳輸工具,沒(méi)安裝會(huì)報(bào)錯(cuò)“/bin/sh: wget: not found”,網(wǎng)上例子少安裝wget ## ca-certificates證書(shū)服務(wù),是安裝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.配置環(huán)境變量 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 #容器啟動(dòng)時(shí)需要執(zhí)行的命令 #CMD ["java","-version"]
#3.執(zhí)行dockerfile創(chuàng)建鏡像
docker build -t jdk8:v2.0 .
#4.創(chuàng)建并啟動(dòng)容器
docker create -it jdk8:v2.0
進(jìn)入容器并且校驗(yàn)
docker run -it --name myjdkV1 fda02c0ea41a
Alpine制作jre鏡像
Docker容器之最小JRE基礎(chǔ)鏡像
#解壓
tar -zxvf jre-8u221-linux-x64.tar.gz
#查看jre大小(瘦身前230M)
du -sh jre1.8.0_221
進(jìn)行瘦身
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
返回上級(jí)目錄,重新打包jre
cd ../ tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221
創(chuàng)建并編輯dockerfile
注1:dockerfile內(nèi)容如下
vi myjdk
#1.指定基礎(chǔ)鏡像,并且必須是第一條指令 FROM alpine:latest #FROM alpine:3.10 #2.指明該鏡像的作者和其電子郵件 MAINTAINER xyz "xyz@qq.com" #3.在構(gòu)建鏡像時(shí),指定鏡像的工作目錄,之后的命令都是基于此工作目錄,如果不存在,則會(huì)創(chuàng)建目錄 WORKDIR /javaxl_docker/jdk #4.將一些安裝包復(fù)制到鏡像中,語(yǔ)法:ADD/COPY <src>... <dest> ## ADD與COPY的區(qū)別:ADD復(fù)制并解壓,COPY僅復(fù)制 ## 注意~~~上傳的瘦身后的jre ADD jre1.8.0_221.tar.gz /javaxl_docker/jdk/ ## glibc安裝包如果從網(wǎng)絡(luò)下載速度實(shí)在是太慢了,先提前下載復(fù)制到鏡像中 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的軟件源為阿里云,因?yàn)閺哪J(rèn)官源拉取實(shí)在太慢了 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.運(yùn)行指定的命令 ## Alpine linux為了精簡(jiǎn)本身并沒(méi)有安裝太多的常用軟件,apk類(lèi)似于ubuntu的apt-get, ## 用來(lái)安裝一些常用軟V件,其語(yǔ)法如下:apk add bash wget curl git make vim docker ## wget是linux下的ftp/http傳輸工具,沒(méi)安裝會(huì)報(bào)錯(cuò)“/bin/sh: wget: not found”,網(wǎng)上例子少安裝wget ## ca-certificates證書(shū)服務(wù),是安裝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.配置環(huán)境變量 ## 注意~~~沒(méi)有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 #容器啟動(dòng)時(shí)需要執(zhí)行的命令 #CMD ["java","-version"]
#4.執(zhí)行dockerfile創(chuàng)建鏡像
docker build -t jdk8:v3.0 .
#5.創(chuàng)建并啟動(dòng)容器
docker create -it jdk8:v3.0 docker run -it --name myjdkV1 fda02c0ea41a
二.配置阿里云鏡像倉(cāng)庫(kù)
如何創(chuàng)建企業(yè)版實(shí)例_容器鏡像服務(wù)(ACR)-阿里云幫助中心 (aliyun.com)
創(chuàng)建命名空間
配置代碼源
云效 Codeup · 企業(yè)級(jí)代碼管理平臺(tái) (aliyun.com):https://codeup.aliyun.com/
創(chuàng)建訪問(wèn)零盤(pán)
agp_796618880294070f6100ac470e4fae0b
如何將其綁定在代碼園中
配置鏡像倉(cāng)庫(kù)
三.將自定義的jdk鏡像拉去到阿里云倉(cāng)庫(kù)
1. 登錄阿里云Docker Registry
$ docker login --username=aliyun9101505856 registry.cn-hangzhou.aliyuncs.com
用于登錄的用戶名為阿里云賬號(hào)全名,密碼為開(kāi)通服務(wù)時(shí)設(shè)置的密碼。
您可以在訪問(wèn)憑證頁(yè)面修改憑證密碼。
2. 從Registry中拉取鏡像
$ docker pull registry.cn-hangzhou.aliyuncs.com/lz007/lz:[鏡像版本號(hào)]
3. 將鏡像推送到Registry
$ docker login --username=aliyun9101505856 registry.cn-hangzhou.aliyuncs.com</code><code>$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lz007/lz:[鏡像版本號(hào)]</code><code>$ docker push registry.cn-hangzhou.aliyuncs.com/lz007/lz:[鏡像版本號(hào)]
請(qǐng)根據(jù)實(shí)際鏡像信息替換示例中的[ImageId]和[鏡像版本號(hào)]參數(shù)。
4. 選擇合適的鏡像倉(cāng)庫(kù)地址
從ECS推送鏡像時(shí),可以選擇使用鏡像倉(cāng)庫(kù)內(nèi)網(wǎng)地址。推送速度將得到提升并且將不會(huì)損耗您的公網(wǎng)流量。
如果您使用的機(jī)器位于VPC網(wǎng)絡(luò),請(qǐng)使用 registry-vpc.cn-hangzhou.aliyuncs.com 作為Registry的域名登錄。
總結(jié)
到此這篇關(guān)于Docker自定義JDK鏡像并拉取至阿里云鏡像倉(cāng)庫(kù)的文章就介紹到這了,更多相關(guān)Docker自定義JDK鏡像拉取至阿里云內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker容器互聯(lián)的實(shí)現(xiàn)步驟
容器互聯(lián)是除了端口映射外另一種可以與容器通信的方式,本文就來(lái)介紹一下docker容器互聯(lián)的實(shí)現(xiàn)步驟,感興趣的可以了解一下2023-12-12如何通過(guò)vs2017的Dockerfile來(lái)生成鏡像
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)vs2017的Dockerfile來(lái)生成鏡像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07詳解Dockerfile創(chuàng)建自定義Docker鏡像以及CMD與ENTRYPOINT指令的比較
這篇文章主要介紹了詳解Dockerfile創(chuàng)建自定義Docker鏡像以及CMD與ENTRYPOINT指令的比較,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11詳解Docker 配置國(guó)內(nèi)免費(fèi)registry mirror
本篇文章主要介紹了 Docker 配置國(guó)內(nèi)免費(fèi)registry mirror,具有一定的參考價(jià)值,有興趣的小伙伴們可以參考一下2017-07-07Docker 搭建集群MongoDB的實(shí)現(xiàn)步驟
這篇文章主要介紹了Docker 搭建集群MongoDB的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Docker容器生命周期 | kill和 stop的區(qū)別與聯(lián)系 | d
這篇文章主要介紹了Docker容器生命周期 | kill和 stop的區(qū)別與聯(lián)系 | docker pause/ unpause,本講內(nèi)容是從?Docker入門(mén)到進(jìn)階里面抽離出來(lái)的內(nèi)容,從而使原文更加有序、重點(diǎn)突出,需要的朋友可以參考下2023-08-08docker搭建minio集群的實(shí)現(xiàn)示例
Docker MinIO集群是一種基于Docker的MinIO分布式存儲(chǔ)解決方案,本文主要介紹了docker搭建minio集群的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12