目的:
Alpine制作jdk鏡像
Alpine制作jre鏡像(瘦身)
Docker鏡像上傳至阿里雲
Alpine制作jdk鏡像
alpine Linux簡介
Alpine Linux是一個輕型Linux發行版,它不同於通常的Linux發行版,Alpine采用了musl libc 和
BusyBox以減少系統的體積和運行時的資源消耗。
alpine Linux優點
1、小巧:基於Musl libc和busybox,和busybox一樣小巧,最小的Docker鏡像只有5MB;
2、安全:面向安全的輕量發行版;
3、簡單:提供APK包管理工具,軟件的搜索、安裝、刪除、升級都非常方便。
4、適合容器使用:由於小巧、功能完備,非常適合作為容器的基礎鏡像。
alpine操作系統官網(https://pkgs.alpinelinux.org/packages)
下面為官方鏡像的容量對比:
顯而易見alpine的容量是非常小的
REPOSITORY TAG IMAGEID VIRTUAL SIZE alpine latest 4e38e38c8ce0 4.799 MB debian latest 4d6ce913b130 84.98 MB ubuntu latest b39b81afc8ca 188.3 MB centos latest 8efe422e6104 210 MB
基於alpine制作JDK8鏡像
1.下載鏡像
docker pull alpine:latest
2.創建並編輯dockerfile
touch Dockerfile vi Dockerfile
Dockerfile文件中添加一下命令:
#1.指定基礎鏡像,並且必須是第一條指令 FROM alpine:latest #FROM alpine:3.10 #2.指明該鏡像的作者和其電子郵件 MAINTAINER xxx "xxx@qq.com" #3.在構建鏡像時,指定鏡像的工作目錄,之后的命令都是基於此工作目錄,如果不存在,則會創建目錄 WORKDIR /javaxh_docker/jdk #4.將一些安裝包復制到鏡像中,語法:ADD/COPY <src>... <dest> ## ADD與COPY的區別:ADD復制並解壓,COPY僅復制 ADD jdk-8u221-linux-x64.tar.gz /javaxh_docker/jdk/ ## glibc安裝包如果從網絡下載速度實在是太慢了,先提前下載復制到鏡像中 COPY glibc-2.29-r0.apk /javaxh_docker/jdk/ COPY glibc-bin-2.29-r0.apk /javaxh_docker/jdk/ COPY glibc-i18n-2.29-r0.apk /javaxh_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=/javaxh_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"]
其中安裝glibc前置依賴,有三個文件,我是離線放進jdk文件夾中去的。
3.執行dockerfile創建鏡像
docker build -t jdk8:v2.0 .
4.創建並啟動容器
docker run -it --name myjdk02 75a22c55fe98
5.測試jdk版本號
java -version
Alpine制作jre鏡像(瘦身)
1.首先下載jre
下載地址是https://www.java.com/en/download/manual.jsp,大概是77M
最終下載的資料為:/jre-8u221-linux-x64.tar.gz
2.rz上傳,並刪除無用的文件,重新壓縮
解壓
tar -zxvf jre-8u221-linux-x64.tar.gz
進入jre目錄,並執行瘦身命令
#刪除文本文件 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
返回上級目錄,刪除原有的jre壓縮包,重新打包jre
rm -f jre-Bu221-linux-x64.tar.gz tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221/
輸入vi Dockerfile 修改Dockerfile文件
#1.指定基礎鏡像,並且必須是第一條指令 FROM alpine:latest #FROM alpine:3.10 #2.指明該鏡像的作者和其電子郵件 MAINTAINER xyz "xyz@qq.com" #3.在構建鏡像時,指定鏡像的工作目錄,之后的命令都是基於此工作目錄,如果不存在,則會創建目錄 WORKDIR /javaxh_docker/jdk #4.將一些安裝包復制到鏡像中,語法:ADD/COPY <src>... <dest> ## ADD與COPY的區別:ADD復制並解壓,COPY僅復制 ## 注意~~~上傳的瘦身后的jre ADD jre1.8.0_221.tar.gz /javaxh_docker/jdk/ ## glibc安裝包如果從網絡下載速度實在是太慢了,先提前下載復制到鏡像中 COPY glibc-2.29-r0.apk /javaxh_docker/jdk/ COPY glibc-bin-2.29-r0.apk /javaxh_docker/jdk/ COPY glibc-i18n-2.29-r0.apk /javaxh_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=/javaxh_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 .
Docker鏡像上傳至阿里雲
首先進入阿里雲官網去配置Docker配置加速器(https://dev.aliyun.com)
配置Docker加速器
搜索“容器鏡像服務”
創建鏡像倉庫的命名空間
創建鏡像倉庫(創建鏡像倉庫時要綁定一個代碼托管網站,例如:github)
-
push(推)鏡像
#將鏡像推送到Registry
1.登錄阿里雲賬號
docker login --username=xxx registry.cn-shenzhen.aliyuncs.com
--username為阿里雲的用戶名,另外,密碼為開通鏡像服務時設置的密碼
2.為本地鏡像添加tag
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[鏡像版本號]
3.推送鏡像(jdk8-alpine:1.0)
docker push registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[鏡像版本號]
成功:
-
pull(拉)鏡像
1.登錄到阿里雲的doker倉庫
docker login --username=xxxxx registry.cn-shenzhen.aliyuncs.com
2.從Registry中拉取鏡像
docker pull registry.cn-shenzhen.aliyuncs.com/shl_java/alpine_jre:[鏡像版本號]
謝謝觀看!!