Docker自定義鏡像上傳至阿里云的實(shí)現(xiàn)
一、Alpine介紹
Alpine Linux是一個(gè)輕量級(jí)的Linux發(fā)行版,專注于安全、簡(jiǎn)單和高效。它采用了一個(gè)小巧的內(nèi)核和基于musl libc的C庫(kù),使得它具有出色的性能和資源利用率。
Alpine Linux的主要特點(diǎn)包括:
小巧輕量:Alpine Linux的安裝包非常小,只有幾兆字節(jié),這使得它在資源受限的環(huán)境中運(yùn)行非常高效。
安全可靠:Alpine Linux采用了一系列安全措施,包括堆棧保護(hù)、內(nèi)核級(jí)別的防護(hù)和支持安全沙盒等,以確保系統(tǒng)的安全性和可靠性。
簡(jiǎn)單易用:Alpine Linux采用了簡(jiǎn)單的設(shè)計(jì)理念,得它易于安裝、配置和維護(hù)。它使用了apk包管理器,可以方便地安裝、更新和刪除軟件包。
Docker友好:由于其小巧和高效的特性,Alpine Linux成為了Docker容器的首選基礎(chǔ)鏡像之一。它可以快速啟動(dòng)和行,減少了容器的大小和啟動(dòng)時(shí)間。
Alpine Linux適用于各種場(chǎng)景,包括服務(wù)器、虛擬機(jī)、容器和嵌入式設(shè)備等。它的社區(qū)活躍,并且有大量的軟件包可供選擇,可以滿足各種不同的需求。
二、基于alpine制作JDK8鏡像
下載鏡像
通過(guò) docker pull 命令拉取最新版本的 alpine 鏡像文件。
docker pull alpine:latest

編寫(xiě)Dockerfile
將資源中g(shù)libc_kongkong.zip的目錄下的所有文件上傳至與Dockerfile文件同一目錄下
創(chuàng)建并編輯Dockerfile文件。
# 創(chuàng)建Dockerfile文件 touch Dockerfile # 編輯Dockerfile文件 vim Dockerfile
注:將資源綁定中的 glibc_kongkong 目錄下的所有文件上傳至與 Dockerfile 文件一個(gè)目錄下。
Dockerfile 文件內(nèi)容具體如下:
#1.指定基礎(chǔ)鏡像,并且必須是第一條指令
FROM alpine:latest
#FROM alpine:3.10
#2.指明該鏡像的作者和其電子郵件
MAINTAINER kongkong "kongkong@qq.com"
#3.在構(gòu)建鏡像時(shí),指定鏡像的工作目錄,之后的命令都是基于此工作目錄,如果不存在,則會(huì)創(chuàng)建目錄
WORKDIR /usr/local/java
#4.將一些安裝包復(fù)制到鏡像中,語(yǔ)法:ADD/COPY <src>... <dest>
## ADD與COPY的區(qū)別:ADD復(fù)制并解壓,COPY僅復(fù)制
ADD jdk-8u151-linux-x64.tar.gz /usr/local/java/
## glibc安裝包如果從網(wǎng)絡(luò)下載速度實(shí)在是太慢了,先提前下載復(fù)制到鏡像中
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的軟件源為阿里云,因?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類似于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=/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安裝包,如果是其他版本的請(qǐng)注意修改上述配置中的名稱。
創(chuàng)建并啟動(dòng)容器
通過(guò) Dockerfile 文件創(chuàng)建自定義鏡像:
docker build -t jdk8:v2.0 .
基于最新 jdk8:v2.0 版本的鏡像構(gòu)建容器:
docker run -itd --name tomcat02 jdk8:v2.0

進(jìn)入容器并測(cè)試
進(jìn)入容器:
docker exec -it 容器ID /bin/sh
注意:最后是 sh 而非 bash
測(cè)試 java 的環(huán)境配置是否配置成功:
java -version
最后制作完成后的鏡像大小為400M左右。

三、JRE瘦身
將本地 jre-8u221-linux-x64.tar.gz 上傳至 CentOS7 虛擬機(jī)中。
解壓文件:
tar -zxvf jre-8u221-linux-x64.tar.gz
查看 jre 大小(瘦身前230M):
du -sh jre1.8.0_221

進(jìn)入jre目錄,并執(zhí)行瘦身命令:
du -sh jre1.8.0_221

返回上級(jí)目錄,重新打包jre:
# 返回上級(jí)目錄 cd .. # 重新打包jre tar zcvf jre1.8.0_221.tar.gz jre1.8.0_221
至此,JRE的壓縮包已完成了瘦身任務(wù)。
再次編輯Dockerfile
再次編輯Dockerfile,將文件內(nèi)容中的jdk配置更換成jre配置:
#1.指定基礎(chǔ)鏡像,并且必須是第一條指令
FROM alpine:3.10
#2.指明該鏡像的作者和其電子郵件
MAINTAINER kongkong "kongkong@qq.com"
#3.在構(gòu)建鏡像時(shí),指定鏡像的工作目錄,之后的命令都是基于此工作目錄,如果不存在,則會(huì)創(chuàng)建目錄
WORKDIR /usr/local/java
#4.將一些安裝包復(fù)制到鏡像中,語(yǔ)法:ADD/COPY <src>... <dest>
## ADD與COPY的區(qū)別:ADD復(fù)制并解壓,COPY僅復(fù)制
## 注意~~~上傳的瘦身后的jre
ADD jre1.8.0_221.tar.gz /usr/local/java/
## glibc安裝包如果從網(wǎng)絡(luò)下載速度實(shí)在是太慢了,先提前下載復(fù)制到鏡像中
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的軟件源為阿里云,因?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類似于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=/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)建并啟動(dòng)容器
通過(guò)Dockerfile文件創(chuàng)建自定義鏡像:
docker build -t jdk8:v3.0 .
基于最新jdk8:v2.0版本的鏡像構(gòu)建容器:
docker run -itd --name tomcat03 jdk8:v3.0
此處打包之后是v3.0版本的鏡像文件。
進(jìn)入容器并測(cè)試
進(jìn)入容器:
docker exec -it tomcat03 /bin/sh
注意:最后是sh而非bash
測(cè)試java的環(huán)境配置是否配置成功:
java -version

四、將Docker鏡像上傳至阿里云
登錄到阿里云,阿里云官方網(wǎng)站鏈接:阿里云登錄 - 歡迎登錄阿里云,安全穩(wěn)定的云計(jì)算服務(wù)平臺(tái)
配置代碼源
點(diǎn)擊個(gè)人實(shí)例,打開(kāi)倉(cāng)庫(kù)管理,選擇代碼源。

具體操作自行摸索,簡(jiǎn)單。
創(chuàng)建命名空間
打開(kāi)倉(cāng)庫(kù)管理,選擇命名空間。

創(chuàng)建鏡像倉(cāng)庫(kù)
打開(kāi)倉(cāng)庫(kù)管理,選擇鏡像倉(cāng)庫(kù)。首頁(yè)輸入倉(cāng)庫(kù)相關(guān)信息,然后綁定代碼源。

推送鏡像
登錄阿里云Docker Registry:
docker login --username=aliyun4534070281 registry.cn-hangzhou.aliyuncs.com
注意:這里的--username請(qǐng)更換成自己阿里云的賬號(hào)。
本地鏡像打標(biāo)簽,請(qǐng)根據(jù)實(shí)際鏡像信息替換示例中的[ImageId]和[鏡像版本號(hào)]參數(shù)。:
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/kongkongbye/kongbye:[鏡像版本號(hào)]
注意:這里的 [ImageId] 為本地鏡像的鏡像ID,而 [鏡像版本號(hào)] 為即將打標(biāo)簽的版本號(hào),用于推送至阿里云倉(cāng)庫(kù)進(jìn)行識(shí)別標(biāo)記。
將鏡像推送到Registry:
docker push registry.cn-hangzhou.aliyuncs.com/kongkongbye/kongbye:[鏡像版本號(hào)]
拉取鏡像
登錄阿里云Docker Registry:(如果已經(jīng)登錄過(guò)了,此步驟可以省略)
docker login --username=aliyun4534070281 registry.cn-hangzhou.aliyuncs.com
注意:這里的--username 請(qǐng)更換成自己阿里云的賬號(hào)。
從Registry中拉取鏡像:
docker pull registry.cn-hangzhou.aliyuncs.com/kongkongbye/kongbye:[鏡像版本號(hào)]
剩下的操作就是基于新拉取的鏡像進(jìn)行創(chuàng)建容器等相關(guān)測(cè)試。
Docker commit 命令
下載基礎(chǔ)鏡像
使用此基礎(chǔ)鏡像創(chuàng)建/啟動(dòng)/進(jìn)入容器
在容器安裝自己需要的軟件
將保存配置完成的容器提交成鏡像
語(yǔ)法如下:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
參數(shù)說(shuō)明:
| 參數(shù) | 說(shuō)明 |
|---|---|
| -a | 提交的鏡像作者 |
| -c | 使用Dockerfile指令來(lái)創(chuàng)建鏡像 |
| -m | 提交時(shí)的說(shuō)明文字 |
| -p | 在commit時(shí),將容器暫停 |
實(shí)例:將容器a404c6c174a2 保存為新的鏡像,并添加提交人信息和說(shuō)明信息
docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
到此這篇關(guān)于Docker自定義鏡像上傳至阿里云的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker自定義鏡像上傳至阿里云內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker設(shè)置mysql不區(qū)分大小寫(xiě)問(wèn)題
這篇文章主要介紹了Docker設(shè)置mysql不區(qū)分大小寫(xiě)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
docker容器無(wú)法訪問(wèn)外網(wǎng),但宿主機(jī)卻可以訪問(wèn)的解決方案
本文詳細(xì)介紹了Docker容器無(wú)法訪問(wèn)外網(wǎng)的常見(jiàn)原因及其解決方法,包括檢查Docker服務(wù)狀態(tài)、網(wǎng)絡(luò)設(shè)置、宿主機(jī)網(wǎng)絡(luò)連接、防火墻設(shè)置、重建docker0網(wǎng)絡(luò)、開(kāi)啟IP轉(zhuǎn)發(fā)功能、修改DNS設(shè)置以及使用--net=host模式等2024-11-11
檢查Docker容器網(wǎng)絡(luò)連接性的實(shí)現(xiàn)方法
這篇文章主要介紹了檢查Docker容器網(wǎng)絡(luò)連接性的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
記一次Docker生產(chǎn)環(huán)境搭建的方法
這篇文章主要介紹了記一次Docker生產(chǎn)環(huán)境搭建的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
輕量級(jí)對(duì)象存儲(chǔ)服務(wù)minio安裝及瀏覽器使用教程
本次介紹了minio的安裝及瀏覽器中的簡(jiǎn)單使用,對(duì)輕量級(jí)對(duì)象存儲(chǔ)服務(wù)minio安裝及使用教程感興趣的朋友一起看看吧2021-10-10
在Docker環(huán)境中部署和運(yùn)行One API的操作方法
隨著技術(shù)的發(fā)展,API 作為服務(wù)連接的橋梁,變得越來(lái)越重要,One API 是一種流行的 API 管理平臺(tái),能夠幫助我們更好地管理、監(jiān)控和擴(kuò)展 API 服務(wù),本文給大家介紹了如何在 Docker 環(huán)境中部署和運(yùn)行 One API,需要的朋友可以參考下2024-11-11
Docker容器化應(yīng)用與結(jié)構(gòu)
本文詳細(xì)講解了Docker的容器化應(yīng)用與結(jié)構(gòu),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Docker+Jenkins+Gitee自動(dòng)化部署maven項(xiàng)目的實(shí)現(xiàn)
本文主要介紹了Docker+Jenkins+Gitee自動(dòng)化部署maven項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

