前言
隨著容器技術的日益成熟,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)
https://help.aliyun.com/zh/acr/user-guide/create-a-container-registry-enterprise-edition-instance?spm=a2c4g.11174283.0.0.3433568cepADaW
?
創建命名空間
?
?配置代碼源
云效 Codeup · 企業級代碼管理平臺 (aliyun.com)https://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的域名登錄。