使用DockerFile構(gòu)建鏡像與鏡像上傳的實(shí)現(xiàn)步驟
前言:為什么要使用Dockerfile ?
首先Dockerfile 是一個(gè)文本格式的配置文件, 用戶可以使用 Dockerfile 來(lái)快速創(chuàng)建自定義的鏡像。在沒(méi)使用Dockerfile之前構(gòu)建鏡像是這樣的:一步一步操作
不使用Dockerfile的劣勢(shì):
- 手動(dòng)操作容易出錯(cuò),難以保證一致性。
- 構(gòu)建過(guò)程不透明,不易維護(hù)和管理。
- 需要手動(dòng)執(zhí)行多個(gè)步驟,容易遺漏或出現(xiàn)問(wèn)題。
使用Dockerfile的好處:
- 自動(dòng)化構(gòu)建,確保環(huán)境的一致性和可重復(fù)性。
- 可以使用版本控制系統(tǒng)管理Dockerfile,跟蹤構(gòu)建過(guò)程的演化。
- 通過(guò)簡(jiǎn)單的命令就能完成構(gòu)建和運(yùn)行。
一、DockerFile構(gòu)建鏡像
1、構(gòu)建基礎(chǔ)對(duì)象
已知構(gòu)建基礎(chǔ)鏡像的目的是為了在容器中提供一個(gè)運(yùn)行環(huán)境,以便在其基礎(chǔ)上構(gòu)建和運(yùn)行應(yīng)用程序。而CentOS和Alpine都是常見(jiàn)的基礎(chǔ)操作系統(tǒng)鏡像,用于構(gòu)建Docker容器。它們有一些區(qū)別和各自的優(yōu)點(diǎn),主要涉及到鏡像大小、軟件包管理系統(tǒng)和適用場(chǎng)景等方面。
CentOS鏡像:
- 鏡像大?。?/strong> CentOS鏡像通常比Alpine鏡像大,因?yàn)樗烁嗟南到y(tǒng)庫(kù)和工具。
- 軟件包管理: CentOS使用yum(Yellowdog Updater, Modified)作為其軟件包管理系統(tǒng)。它有廣泛的軟件倉(cāng)庫(kù),可以方便地安裝各種軟件包。
- 系統(tǒng)庫(kù): CentOS提供了完整的系統(tǒng)庫(kù)和工具,適合那些需要更多系統(tǒng)級(jí)功能和工具的場(chǎng)景。
- 適用場(chǎng)景: 適用于需要在容器中運(yùn)行更龐大、復(fù)雜的應(yīng)用程序,或者依賴于CentOS特定庫(kù)的場(chǎng)景。例如,一些企業(yè)級(jí)應(yīng)用可能更適合在CentOS環(huán)境中運(yùn)行。
Alpine鏡像:
- 鏡像大?。?/strong> Alpine鏡像非常小巧,通常比CentOS小得多。這是因?yàn)锳lpine使用了musl libc和BusyBox,精簡(jiǎn)了系統(tǒng)組件。
- 軟件包管理: Alpine使用apk作為其軟件包管理系統(tǒng)。雖然軟件包數(shù)量相對(duì)較少,但它足夠輕量且足夠滿足大多數(shù)基本需求。
- 系統(tǒng)庫(kù): Alpine精簡(jiǎn)了系統(tǒng)庫(kù),只包含最小必需的庫(kù),這有助于減小鏡像大小。
- 適用場(chǎng)景: 適用于對(duì)鏡像大小要求較高,或者在輕量級(jí)、敏捷的場(chǎng)景中運(yùn)行應(yīng)用程序。Alpine常被用作構(gòu)建微服務(wù)、容器化應(yīng)用和云原生應(yīng)用的基礎(chǔ)鏡像。
總結(jié)各自優(yōu)點(diǎn):
- CentOS:
- 適合需要完整系統(tǒng)庫(kù)和工具的應(yīng)用場(chǎng)景。
- 更廣泛的軟件包支持。
- 適用于相對(duì)較大和復(fù)雜的應(yīng)用程序。
- Alpine:
- 非常小巧的鏡像大小。
- 適用于對(duì)鏡像大小要求較高的場(chǎng)景。
- 適用于輕量級(jí)、敏捷的應(yīng)用場(chǎng)景,如微服務(wù)和云原生應(yīng)用。
選擇CentOS還是Alpine通常取決于具體的應(yīng)用需求和容器使用場(chǎng)景。如果鏡像大小是關(guān)鍵因素,而且應(yīng)用可以在Alpine的輕量環(huán)境中運(yùn)行,那么Alpine可能是更好的選擇。如果應(yīng)用需要更完整的系統(tǒng)環(huán)境和軟件包支持,那么CentOS可能更合適。
2、Dockerfile文件結(jié)構(gòu)
Dockerfile 由一行行命令語(yǔ)句組成,并且支持以 # 開(kāi)頭的注釋行。
一般Dockerfile 分為四部分:基礎(chǔ)鏡像信息、維護(hù)者信息、鏡像操作指令和容器啟動(dòng)時(shí)執(zhí)行指令。
部分 | 命令 |
基礎(chǔ)鏡像信息 | FROM |
維護(hù)者信息 | MAINTAINER |
鏡像操作指令 | RUN、ENV、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、 VOLUME等 |
容器啟動(dòng)時(shí)執(zhí)行指 令 | CMD、ENTRYPOINT |
基礎(chǔ)鏡像信息:
定義了構(gòu)建過(guò)程中使用的基礎(chǔ)鏡像?;A(chǔ)鏡像是構(gòu)建新鏡像的起點(diǎn),包含了操作系統(tǒng)和基本的運(yùn)行時(shí)環(huán)境。FROM
指令是Dockerfile的第一條指令,必須出現(xiàn)在Dockerfile的最開(kāi)始。
維護(hù)者信息:
用于指定Docker鏡像的維護(hù)者信息,即負(fù)責(zé)維護(hù)該鏡像的人或團(tuán)隊(duì)。這個(gè)信息可以提供一些聯(lián)系方式或者簡(jiǎn)要的說(shuō)明。
鏡像操作指令:
這些指令用于在構(gòu)建過(guò)程中對(duì)鏡像進(jìn)行操作。其中,ENV用于設(shè)置環(huán)境變量,COPY用于復(fù)制文件或目錄到鏡像中,ADD與COP作用差不多,它還會(huì)壓縮包文件進(jìn)行解壓,WORKDIR設(shè)置工作目錄,RUN用于在構(gòu)建過(guò)程中執(zhí)行命令,EXPOSE用于聲明容器運(yùn)行時(shí)需要暴露的端口,USER用于設(shè)置在容器中運(yùn)行時(shí)使用的用戶名或用戶ID,ONBUILD用于在構(gòu)建子鏡像時(shí)執(zhí)行一些命令,VOLUME用于聲明容器中的掛載點(diǎn),可以將宿主機(jī)上的目錄或文件掛載到容器中,用于持久化存儲(chǔ)數(shù)據(jù)。這樣可以保證在容器刪除后數(shù)據(jù)不會(huì)丟失。
容器啟動(dòng)時(shí)執(zhí)行指令:
定義了容器啟動(dòng)時(shí)執(zhí)行的默認(rèn)命令。該命令可以被用戶指定的命令覆蓋。CMD
指令通常是最后一條指令,如果有多個(gè)CMD
指令,只有最后一條會(huì)生效。
ENTRYPOINT與CMD不同,ENTRYPOINT指定的命令不會(huì)被docker run命令行中的參數(shù)覆蓋,而是作為容器的主要執(zhí)行命令。
以上這些指令一起構(gòu)成了Dockerfile,定義了構(gòu)建鏡像的過(guò)程和鏡像的運(yùn)行時(shí)行為。通過(guò)這些指令,可以靈活地配置和定制Docker鏡像,以適應(yīng)不同的應(yīng)用場(chǎng)景。
3、構(gòu)建Dockerfile文件鏡像
準(zhǔn)備需要上傳的文件:
1、構(gòu)建Dockerfile:
#1.指定基礎(chǔ)鏡像,并且必須是第一條指令 FROM jeanblanchard/alpine-glibc #2.指明該鏡像的作者和其電子郵件 MAINTAINER "3315757094@qq.com" #3.在構(gòu)建鏡像時(shí),指定鏡像的工作目錄,之后的命令都是基于此工作目錄,如果不存在,則會(huì)創(chuàng)建目錄 WORKDIR /test #4.復(fù)制需要運(yùn)行的應(yīng)用程序 COPY spring.jar /test #5.一個(gè)復(fù)制命令,把jdk安裝文件復(fù)制到鏡像中,注意:jdk*.tar.gz使用的是相對(duì)路徑 ADD jre-8u391-linux-x64.tar.gz /test #6.配置環(huán)境變量 ENV JAVA_HOME=/test/jre1.8.0_391 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$JAVA_HOME/bin:$PATH #7.容器啟動(dòng)時(shí)需要執(zhí)行的命令 CMD java -jar spring.jar
2、配置好Dockerfiel文件后開(kāi)始構(gòu)建鏡像 :
3、運(yùn)行鏡像:
測(cè)試:
二、鏡像上傳(阿里云)
上傳鏡像就是為了方便各位同事更好的搬磚,步驟如下:
1、注冊(cè)/登錄阿里云搜索容器鏡像服務(wù)
2、點(diǎn)擊實(shí)例模塊創(chuàng)建倉(cāng)庫(kù)
...
...
3、創(chuàng)建好后就會(huì)有操作指南(復(fù)制操作就行)
當(dāng)然要上傳鏡像需要獲取訪問(wèn)憑證進(jìn)行登錄:
示例:
1. 登錄
2.給本地的Docker鏡像打標(biāo)簽,使其與阿里云容器鏡像服務(wù)相關(guān)聯(lián)
根據(jù)tag(版本)推送:
拉?。?/strong>
docker pull registry.cn-hangzhou.aliyuncs.com/ycxw320/spring_test:v1 [鏡像版本號(hào)]
以上就是使用DockerFile構(gòu)建鏡像與鏡像上傳的實(shí)現(xiàn)步驟的詳細(xì)內(nèi)容,更多關(guān)于DockerFile構(gòu)建鏡像與鏡像上傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文詳解如何在Ubuntu系統(tǒng)中安裝docker
這篇文章主要為大家詳細(xì)介紹了在Ubuntu操作系統(tǒng)上安裝Docker的步驟,以便我們可以開(kāi)始使用Docker來(lái)構(gòu)建和運(yùn)行容器化應(yīng)用程序,希望對(duì)大家有所幫助2024-03-03詳解如何獲取docker容器(container)的ip地址
這篇文章主要介紹了詳解如何獲取docker容器(container)的ip地址,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09docker images,info,-d等命令報(bào)錯(cuò)的解決方法
最近剛接觸Docker,所以在學(xué)習(xí)的過(guò)程中出現(xiàn)了好多的問(wèn)題,百度上不好找,谷歌的話,樓主不會(huì)翻墻。后來(lái)通過(guò)各方求助和細(xì)心研究解決了一些遇到的問(wèn)題,現(xiàn)在將遇到的問(wèn)題和解決方法分享給大家,有需要的朋友們可以參考借鑒。2016-11-11詳解使用 Docker 構(gòu)建 LNMP 環(huán)境
本篇文章主要介紹了使用 Docker 構(gòu)建 LNMP 環(huán)境,詳細(xì)的介紹了配置LNMP 環(huán)境的步驟。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Docker守護(hù)進(jìn)程安全配置項(xiàng)目詳解
這篇文章主要介紹了Docker守護(hù)進(jìn)程安全配置介紹,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03詳解用Docker構(gòu)建MySQL主從環(huán)境
這篇文章主要介紹了詳解用Docker構(gòu)建MySQL主從環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07已有docker鏡像構(gòu)建過(guò)程分析(使用示例)
docker history命令用于查看指定鏡像的歷史層信息,它顯示了鏡像創(chuàng)建過(guò)程中的每一層,包括創(chuàng)建時(shí)間、創(chuàng)建者、大小和注釋等信息,本文介紹已有docker鏡像構(gòu)建過(guò)程分析,感興趣的朋友一起看看吧2024-12-12Docker Buildx構(gòu)建多平臺(tái)鏡像的實(shí)現(xiàn)
本文主要介紹了Docker Buildx構(gòu)建多平臺(tái)鏡像的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07