Docker自定義鏡像上傳至阿里云的實現
一、Alpine介紹
Alpine Linux是一個輕量級的Linux發(fā)行版,專注于安全、簡單和高效。它采用了一個小巧的內核和基于musl libc的C庫,使得它具有出色的性能和資源利用率。
Alpine Linux的主要特點包括:
小巧輕量:Alpine Linux的安裝包非常小,只有幾兆字節(jié),這使得它在資源受限的環(huán)境中運行非常高效。
安全可靠:Alpine Linux采用了一系列安全措施,包括堆棧保護、內核級別的防護和支持安全沙盒等,以確保系統的安全性和可靠性。
簡單易用:Alpine Linux采用了簡單的設計理念,得它易于安裝、配置和維護。它使用了apk包管理器,可以方便地安裝、更新和刪除軟件包。
Docker友好:由于其小巧和高效的特性,Alpine Linux成為了Docker容器的首選基礎鏡像之一。它可以快速啟動和行,減少了容器的大小和啟動時間。
Alpine Linux適用于各種場景,包括服務器、虛擬機、容器和嵌入式設備等。它的社區(qū)活躍,并且有大量的軟件包可供選擇,可以滿足各種不同的需求。
二、基于alpine制作JDK8鏡像
下載鏡像
通過 docker pull 命令拉取最新版本的 alpine 鏡像文件。
docker pull alpine:latest
編寫Dockerfile
將資源中glibc_kongkong.zip的目錄下的所有文件上傳至與Dockerfile文件同一目錄下
創(chuàng)建并編輯Dockerfile文件。
# 創(chuàng)建Dockerfile文件 touch Dockerfile # 編輯Dockerfile文件 vim Dockerfile
注:將資源綁定中的 glibc_kongkong 目錄下的所有文件上傳至與 Dockerfile 文件一個目錄下。
Dockerfile 文件內容具體如下:
#1.指定基礎鏡像,并且必須是第一條指令 FROM alpine:latest #FROM alpine:3.10 #2.指明該鏡像的作者和其電子郵件 MAINTAINER kongkong "kongkong@qq.com" #3.在構建鏡像時,指定鏡像的工作目錄,之后的命令都是基于此工作目錄,如果不存在,則會創(chuàng)建目錄 WORKDIR /usr/local/java #4.將一些安裝包復制到鏡像中,語法:ADD/COPY <src>... <dest> ## ADD與COPY的區(qū)別:ADD復制并解壓,COPY僅復制 ADD jdk-8u151-linux-x64.tar.gz /usr/local/java/ ## glibc安裝包如果從網絡下載速度實在是太慢了,先提前下載復制到鏡像中 COPY glibc-2.29-r0.apk /usr/local/java/ COPY glibc-bin-2.29-r0.apk /usr/local/java/ COPY glibc-i18n-2.29-r0.apk /usr/local/java/ #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.配置環(huán)境變量 ENV JAVA_HOME=/usr/local/java/jdk1.8.0_151 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$JAVA_HOME/bin:$PATH
注意,這里用的是jdk-8u221-linux-x64.tar.gz
版本的jdk
安裝包,如果是其他版本的請注意修改上述配置中的名稱。
創(chuàng)建并啟動容器
通過 Dockerfile 文件創(chuàng)建自定義鏡像:
docker build -t jdk8:v2.0 .
基于最新 jdk8:v2.0 版本的鏡像構建容器:
docker run -itd --name tomcat02 jdk8:v2.0
進入容器并測試
進入容器:
docker exec -it 容器ID /bin/sh
注意:最后是 sh 而非 bash
測試 java 的環(huán)境配置是否配置成功:
java -version
最后制作完成后的鏡像大小為400M
左右。
三、JRE瘦身
將本地 jre-8u221-linux-x64.tar.gz 上傳至 CentOS7 虛擬機中。
解壓文件:
tar -zxvf jre-8u221-linux-x64.tar.gz
查看 jre 大小(瘦身前230M
):
du -sh jre1.8.0_221
進入jre
目錄,并執(zhí)行瘦身命令:
du -sh jre1.8.0_221
返回上級目錄,重新打包jre
:
# 返回上級目錄 cd .. # 重新打包jre tar zcvf jre1.8.0_221.tar.gz jre1.8.0_221
至此,JRE
的壓縮包已完成了瘦身任務。
再次編輯Dockerfile
再次編輯Dockerfile
,將文件內容中的jdk
配置更換成jre
配置:
#1.指定基礎鏡像,并且必須是第一條指令 FROM alpine:3.10 #2.指明該鏡像的作者和其電子郵件 MAINTAINER kongkong "kongkong@qq.com" #3.在構建鏡像時,指定鏡像的工作目錄,之后的命令都是基于此工作目錄,如果不存在,則會創(chuàng)建目錄 WORKDIR /usr/local/java #4.將一些安裝包復制到鏡像中,語法:ADD/COPY <src>... <dest> ## ADD與COPY的區(qū)別:ADD復制并解壓,COPY僅復制 ## 注意~~~上傳的瘦身后的jre ADD jre1.8.0_221.tar.gz /usr/local/java/ ## glibc安裝包如果從網絡下載速度實在是太慢了,先提前下載復制到鏡像中 COPY glibc-2.29-r0.apk /usr/local/java/ COPY glibc-bin-2.29-r0.apk /usr/local/java/ COPY glibc-i18n-2.29-r0.apk /usr/local/java/ #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.配置環(huán)境變量 ## 注意~~~沒有jdk啦,直接指向jre ENV JAVA_HOME=/usr/local/java/jre1.8.0_221 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$JAVA_HOME/bin:$PATH
創(chuàng)建并啟動容器
通過Dockerfile
文件創(chuàng)建自定義鏡像:
docker build -t jdk8:v3.0 .
基于最新jdk8:v2.0
版本的鏡像構建容器:
docker run -itd --name tomcat03 jdk8:v3.0
此處打包之后是v3.0
版本的鏡像文件。
進入容器并測試
進入容器:
docker exec -it tomcat03 /bin/sh
注意:最后是sh
而非bash
測試java
的環(huán)境配置是否配置成功:
java -version
四、將Docker鏡像上傳至阿里云
登錄到阿里云,阿里云官方網站鏈接:阿里云登錄 - 歡迎登錄阿里云,安全穩(wěn)定的云計算服務平臺
配置代碼源
點擊個人實例,打開倉庫管理,選擇代碼源。
具體操作自行摸索,簡單。
創(chuàng)建命名空間
打開倉庫管理,選擇命名空間。
創(chuàng)建鏡像倉庫
打開倉庫管理,選擇鏡像倉庫。首頁輸入倉庫相關信息,然后綁定代碼源。
推送鏡像
登錄阿里云Docker Registry
:
docker login --username=aliyun4534070281 registry.cn-hangzhou.aliyuncs.com
注意:這里的--username請更換成自己阿里云的賬號。
本地鏡像打標簽,請根據實際鏡像信息替換示例中的[ImageId]
和[鏡像版本號]
參數。:
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/kongkongbye/kongbye:[鏡像版本號]
注意:這里的 [ImageId] 為本地鏡像的鏡像ID,而 [鏡像版本號] 為即將打標簽的版本號,用于推送至阿里云倉庫進行識別標記。
將鏡像推送到Registry
:
docker push registry.cn-hangzhou.aliyuncs.com/kongkongbye/kongbye:[鏡像版本號]
拉取鏡像
登錄阿里云Docker Registry
:(如果已經登錄過了,此步驟可以省略)
docker login --username=aliyun4534070281 registry.cn-hangzhou.aliyuncs.com
注意:這里的--username 請更換成自己阿里云的賬號。
從Registry
中拉取鏡像:
docker pull registry.cn-hangzhou.aliyuncs.com/kongkongbye/kongbye:[鏡像版本號]
剩下的操作就是基于新拉取的鏡像進行創(chuàng)建容器等相關測試。
Docker commit 命令
下載基礎鏡像
使用此基礎鏡像創(chuàng)建/啟動/進入容器
在容器安裝自己需要的軟件
將保存配置完成的容器提交成鏡像
語法如下:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
參數說明:
參數 | 說明 |
---|---|
-a | 提交的鏡像作者 |
-c | 使用Dockerfile 指令來創(chuàng)建鏡像 |
-m | 提交時的說明文字 |
-p | 在commit時,將容器暫停 |
實例:將容器a404c6c174a2
保存為新的鏡像,并添加提交人信息和說明信息
docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
到此這篇關于Docker自定義鏡像上傳至阿里云的實現的文章就介紹到這了,更多相關Docker自定義鏡像上傳至阿里云內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在Docker環(huán)境中部署和運行One API的操作方法
隨著技術的發(fā)展,API 作為服務連接的橋梁,變得越來越重要,One API 是一種流行的 API 管理平臺,能夠幫助我們更好地管理、監(jiān)控和擴展 API 服務,本文給大家介紹了如何在 Docker 環(huán)境中部署和運行 One API,需要的朋友可以參考下2024-11-11Docker+Jenkins+Gitee自動化部署maven項目的實現
本文主要介紹了Docker+Jenkins+Gitee自動化部署maven項目的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06