Docker之Alpine制作鏡像且上傳至阿里雲


目的:

  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:[鏡像版本號]

 

 

 

 

謝謝觀看!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM