最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Dockerfile文件編寫實(shí)戰(zhàn)練習(xí)及注意事項(xiàng)

 更新時(shí)間:2025年04月26日 11:28:29   作者:瀾堇  
Dockerfile?是一個(gè)用于構(gòu)建?Docker?鏡像的文本文件,通過一系列指令來定義鏡像的構(gòu)建過程,這篇文章主要介紹了Dockerfile文件編寫實(shí)戰(zhàn)練習(xí)及注意事項(xiàng)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

1.什么是Dockerfile

Dockerfile 是一個(gè)文本文件,其內(nèi)包含了一條條的指令(Instruction),用于構(gòu)建鏡像。每一條指令構(gòu)建一層鏡像,因此每一條指令的內(nèi)容,就是描述該層鏡像應(yīng)當(dāng)如何構(gòu)建。dockerfile的原理就是鏡像分層。

Dockerfile 用于指示 docker image build 命令自動(dòng)構(gòu)建Image的源代碼是純文本文件。

2. Dockerfile作用

  • 標(biāo)準(zhǔn)化構(gòu)建流程:它確保每次構(gòu)建鏡像的過程都是相同的,這有助于復(fù)現(xiàn)性和可維護(hù)性。
  • 自動(dòng)化構(gòu)建:自動(dòng)化處理從基礎(chǔ)鏡像到最終鏡像的整個(gè)構(gòu)建過程。
  • 可重復(fù)性:可以多次使用同一個(gè) Dockerfile 構(gòu)建鏡像,每次都得到相同的結(jié)果。
  • 環(huán)境配置:可以在 Dockerfile 中配置運(yùn)行應(yīng)用所需的所有依賴項(xiàng)和環(huán)境變量。

3.dockerfile 的基本結(jié)構(gòu):

  • 基礎(chǔ)映像(Base Image):使用 FROM 指令指定基礎(chǔ)映像,作為構(gòu)建鏡像的起點(diǎn)?;A(chǔ)映像通常包含了操作系統(tǒng)和一些預(yù)裝的軟件和工具。
  • 構(gòu)建過程指令:使用一系列指令來描述構(gòu)建過程,例如 RUN 用于執(zhí)行命令和安裝軟件包,COPY 用于拷貝文件和目錄,ADD 用于拷貝和提取文件,WORKDIR 用于設(shè)置工作目錄,等等。
  • 容器啟動(dòng)指令:使用 CMD 或 ENTRYPOINT 指令來定義容器啟動(dòng)時(shí)要執(zhí)行的命令,也就是默認(rèn)的容器執(zhí)行命令。

4.dockerfile指令:

FROM  指定基礎(chǔ)鏡像,dockerfile構(gòu)建鏡像的第一個(gè)指令

        Eg:FROM centos:centos7.9.2009

LABEL  指定鏡像維護(hù)人信息

        Eg:LABEL ZhangSan zs@163.com

ADD/COPY 復(fù)制本地文件/目錄到鏡像中

        COPY 指令用于將本地文件復(fù)制到容器中。可以復(fù)制單個(gè)文件,也可以復(fù)制整個(gè)目錄。

語法格式:

COPY src dest

COPY ["src", "dest"]

解析:

  • <src源路徑>:源文件或者源目錄
  • <dest目標(biāo)路徑>:容器內(nèi)的指定路徑,該路徑不用事先建好,路徑不存在的話,會(huì)自動(dòng)創(chuàng)建。

        Eg:COPY test.txt /absoluteDir/

ADD 將宿主機(jī)目錄下(或遠(yuǎn)程文件)的文件拷貝進(jìn)鏡像,且會(huì)自動(dòng)處理URL和解壓tar壓縮包。

語法格式:

  • ADD URL   /dest #將文件下載到容器內(nèi)部并以dest命名
  • ADD URL   /dest/ #將文件下載到容器內(nèi)的/dest目錄
  • ADD src   /dest/ #將本地文件傳到容器/dest目錄下,壓縮文件會(huì)自動(dòng)解壓

解析:

  • src 路徑必須在構(gòu)建的上下文中; 不能使用 ../something /something 這種方式,因?yàn)閐ocker 構(gòu)建的第一步是將上下文目錄(和子目錄)發(fā)送到docker守護(hù)程序。
  • 如果 src 是URL,并且 dest 不以斜杠結(jié)尾,則從URL下載文件并將其復(fù)制到 dest 。
  • 如果 dest 以斜杠結(jié)尾,將自動(dòng)推斷出url的名字(保留最后一部分),保存到 dest
  • 如果 src 是目錄,則將復(fù)制目錄的整個(gè)內(nèi)容,包括文件系統(tǒng)元數(shù)據(jù)。

        Eg:ADD alertmanager-0.19.0.linux-amd64.tar.gz /usr/local/bin

RUN 指定Linux命令,建議多個(gè)命令用 && 或 ; 串起來使用

語法格式:

RUN <命令行命令>  ( shell 形式, /bin/sh -c 的方式運(yùn)行,避免破壞shell字符串)

        Eg: RUN /bin/bash -c 'source $HOME/.bashrc; \

               echo $HOME'

ENV 設(shè)置鏡像環(huán)境變量

這個(gè)環(huán)境變量可以在后續(xù)的任何RUN指令中使用,這就如同在命令前面指定了環(huán)境變量前綴一樣;也可以在其它指令中直接使用這些環(huán)境變量;相當(dāng)于定義(賦值)。

        Eg:ENV CATALINA_HOME /usr/local/tomcat

                WORKDIR $CATALINA_HOME

EXPOSE 暴露容器端口

       EXPOSE指令實(shí)際上不會(huì)發(fā)布端口。 它充當(dāng)構(gòu)建映像的人員和運(yùn)行容器的人員之間的一種文檔,即有關(guān)打算發(fā)布哪些端口的信息。

        Eg:EXPOSE 80/tcp

VOLUME 指定容器的匿名數(shù)據(jù)卷

       Eg: VOLUME /var/log

作用:把容器的某些文件夾映射到主機(jī)外部

解析:

  • VOLUME 掛載點(diǎn)
  • 無法指定宿主機(jī)的目錄,會(huì)掛載到宿主機(jī)/var/lib/docker/volumes下隨機(jī)生成的目錄下
  • 掛載點(diǎn)可以是一個(gè)路徑,也可以是數(shù)組(數(shù)組中的每一項(xiàng)必須用雙引號(hào))

USER  指定容器運(yùn)行用戶

       指定該鏡像以及構(gòu)建鏡像時(shí)的命令以什么樣的用戶去執(zhí)行,如果不指定,默認(rèn)是root。(一般不修改該配置),可搭配COPY使用。

語法格式:

USER <user>[:<group>]

        Eg:USER patrick

                USER 1000:1000

WORKDIR  指定鏡像的工作目錄

       WORKDIR指令為Dockerfile中跟隨它的所有 RUN,CMD,ENTRYPOINT,COPY,ADD 指令設(shè)置工作目 錄。 如果WORKDIR不存在,即使以后的Dockerfile指令中未使用它也將被創(chuàng)建。

WORKDIR指令可在Dockerfile中多次使用。如果提供了相對路徑,則它將相對于上一個(gè)WORKDIR指令的路徑。

       Eg:WORKDIR /a

WORKDIR b

WORKDIR c

RUN pwd

#結(jié)果 /a/b/c

ARG 指定構(gòu)建鏡像時(shí)傳入的參數(shù)

構(gòu)建時(shí)--build-arg 指定參數(shù)會(huì)覆蓋Dockerfile 中指定的同名參數(shù)     docker build --build-arg 變量=值

ARG只在構(gòu)建期有效,運(yùn)行期無效,且一次只能指定一個(gè)參數(shù)

       Eg:ARG version=3.13.4

FROM alpine:$version

CMD/ENTRYPOINT  指定容器啟動(dòng)時(shí)執(zhí)行的命令

       語法格式:

CMD command param1 param2 

CMD ["param1","param2"] 

ENTRYPOINT ["executable", "param1", "param2"]

       Eg:CMD ["1111"]

               CMD ["2222"]

               ENTRYPOINT ["echo"]

#構(gòu)建出如上鏡像后測試

docker run xxxx:效果 echo 2222

指令之間的區(qū)別:

  • ADD 和 COPY 的區(qū)別

COPY只能復(fù)制本地文件/目錄到鏡像中

ADD不光可以復(fù)制本地文件/目錄到鏡像中,還可以通過URL下載文件復(fù)制到鏡像中,還能將本地tar壓縮包解壓后復(fù)制到鏡像中。(URL下載和tar包解壓特性不能一起使用)

  • ENTRYPOINT 和 CMD 的區(qū)別

CMD 提供容器默認(rèn)的執(zhí)行命令,可以被運(yùn)行容器時(shí)傳入的命令覆蓋。

ENTRYPOINT 配置容器啟動(dòng)時(shí)執(zhí)行的默認(rèn)可執(zhí)行文件,可以被運(yùn)行容器時(shí)傳入的命令追加到其參數(shù)之后。

ENTRYPOINT 指定的容器啟動(dòng)時(shí)運(yùn)行命令優(yōu)先級(jí)更高,如果 ENTRYPOINT 和 CMD 同時(shí)存在,CMD 指定內(nèi)容將作為 ENTRYPOINT 指定的命令的選項(xiàng)或參數(shù)去使用

5.Dockerfile構(gòu)建過程:

基礎(chǔ)知識(shí):

  • 每條保留字指令都必須為大寫字母且后面要跟隨至少一個(gè)參數(shù)
  • 指令按照從上到下,順序執(zhí)行
  • # 表示注釋
  • 每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層,并對鏡像進(jìn)行提交

構(gòu)建鏡像和運(yùn)行容器:

保存好 Dockerfile 后,可以使用以下命令構(gòu)建鏡像。在Docker中,docker build -t my-node-app . 中的小數(shù)點(diǎn)代表當(dāng)前上下文的路徑。這個(gè)路徑是構(gòu)建過程中 Docker 引擎查找 Dockerfile 和其他構(gòu)建上下文的文件的位置。

docker build 命令會(huì)將指定的路徑(這里是小數(shù)點(diǎn) .)作為構(gòu)建上下文。構(gòu)建上下文是構(gòu)建過程中用來查找 Dockerfile 和其他構(gòu)建文件的目錄。在這個(gè)例子中,. 表示當(dāng)前目錄,即你運(yùn)行 docker build 命令的目錄。

        Eg:docker build -f Dockerfile -t entrytest .

思路:

  • 基于一個(gè)空的鏡像
  • 下載需要的環(huán)境 ADD
  • 執(zhí)行環(huán)境變量的配置 ENV
  • 執(zhí)行一些Linux命令 RUN
  • 日志 CMD
  • 端口暴露 EXPOSE
  • 掛載數(shù)據(jù)卷 VOLUMES

6.實(shí)戰(zhàn)練習(xí)

編寫Dockerfile文件,構(gòu)建entrytest鏡像,

要求:

基于centos鏡像,輸出hello world

#編寫Dockerfile文件

[root@master Monitor]# vi Dockerfile

FROM centos:centos7.9.2009

ENTRYPOINT ["echo","hello"]

CMD ["world"]

#運(yùn)行容器,傳遞參數(shù)

[root@master Monitor]# docker build -f Dockerfile -t entrytest .

Sending build context to Docker daemon  360.5MB

Step 1/3 : FROM centos:centos7.9.2009

 ---> eeb6ee3f44bd

Step 2/3 : ENTRYPOINT ["echo","hello"]

 ---> Running in 92f02cf3ef33

Removing intermediate container 92f02cf3ef33

 ---> dd20bc124389

Step 3/3 : CMD ["world"]

 ---> Running in 3826cda9251a

Removing intermediate container 3826cda9251a

 ---> 5acc8a29cae8

Successfully built 5acc8a29cae8

Successfully tagged entrytest:latest

[root@master Monitor]# docker run entrytest

hello world

[root@master Monitor]# docker run entrytest yun

hello yun

7.注意事項(xiàng)

1.如果不指定Dockerfile文件,Dockerfile的命名必須為Dockerfile。大小寫不能變。

2.構(gòu)建鏡像的時(shí)候要看好你的文件是不是這個(gè)目錄,要不然打到一半會(huì)報(bào)錯(cuò),說找不到文件,切記要記得放文件,在放文件的目錄執(zhí)行。

3.如果 Dockerfile 中如果存在多個(gè) ENTRYPOINT 指令,僅最后一個(gè)生效。但是ENTRYPOINT不會(huì)被docker run后面的命令覆蓋, 而且這些命令行參數(shù)會(huì)被當(dāng)作參數(shù)送給 ENTRYPOINT 指令指定的程序。

4. Dockerfile 中可以有多個(gè) CMD 指令,但只有最后一個(gè)生效,CMD 會(huì)被 docker run 之后的參數(shù)替換。

5. 用 VOLUME 聲明了卷,那么以后對于卷內(nèi)容的修改會(huì)被丟棄,即在dockerfile構(gòu)建的時(shí)候無法再修改使用volume掛載出去的目錄,所以, 一定在volume聲明之前修改內(nèi)容 ;另外docker commit提交新鏡像的的時(shí)候也不會(huì)繼承之前鏡像的卷

到此這篇關(guān)于Dockerfile文件編寫實(shí)戰(zhàn)練習(xí)及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)Dockerfile文件編寫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker創(chuàng)建一個(gè)mysql容器并保存為本地鏡像

    Docker創(chuàng)建一個(gè)mysql容器并保存為本地鏡像

    本篇文章主要介紹了Docker創(chuàng)建一個(gè)mysql容器并保存為本地鏡像 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • docker上部署MySQL的示例

    docker上部署MySQL的示例

    這篇文章主要介紹了docker上部署MySQL的示例,幫助大家更好的理解和學(xué)習(xí)使用docker,感興趣的朋友可以了解下
    2021-04-04
  • kubernetes作用領(lǐng)域總結(jié)

    kubernetes作用領(lǐng)域總結(jié)

    在本文里我們給大家整理關(guān)于kubernetes作用領(lǐng)域以及可以做的項(xiàng)目和思路,有興趣的朋友們參考下。
    2019-06-06
  • Docker可視化工具Portainer詳解

    Docker可視化工具Portainer詳解

    這篇文章主要介紹了Docker可視化工具Portainer使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-06-06
  • Docker容器內(nèi)WS端口映射異常的實(shí)現(xiàn)

    Docker容器內(nèi)WS端口映射異常的實(shí)現(xiàn)

    本文介紹了在Docker容器內(nèi)部署WebSocket服務(wù)時(shí)遇到的問題及解決方法,通過更改代碼獲取容器內(nèi)部真實(shí)IP,解決了端口映射失敗導(dǎo)致的連接不通問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • 使用Docker部署Angular項(xiàng)目的方法步驟

    使用Docker部署Angular項(xiàng)目的方法步驟

    這篇文章主要介紹了使用Docker部署Angular項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • docker鏡像如何啟動(dòng)es/kibana

    docker鏡像如何啟動(dòng)es/kibana

    這篇文章主要介紹了docker鏡像如何啟動(dòng)es/kibana問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • docker-compose+nginx部署前后端分離的項(xiàng)目實(shí)踐

    docker-compose+nginx部署前后端分離的項(xiàng)目實(shí)踐

    本文主要介紹了docker-compose?+?nginx部署前后端分離的項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Docker?Compose構(gòu)建Jenkins的實(shí)現(xiàn)

    Docker?Compose構(gòu)建Jenkins的實(shí)現(xiàn)

    本文主要介紹了Docker?Compose構(gòu)建Jenkins的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • IDEA直接打包Docker鏡像的實(shí)現(xiàn)

    IDEA直接打包Docker鏡像的實(shí)現(xiàn)

    Docker提供了多種方法來打包鏡像,本文主要介紹了IDEA直接打包Docker鏡像的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06

最新評(píng)論

扬中市| 玉林市| 华亭县| 日照市| 宁晋县| 枣阳市| 宝兴县| 和平区| 枣庄市| 广州市| 凭祥市| 抚松县| 玉环县| 虞城县| 栾川县| 南丹县| 始兴县| 眉山市| 乐昌市| 双鸭山市| 津市市| 桂阳县| 增城市| 密山市| 武川县| 铁岭市| 万安县| 萍乡市| 正镶白旗| 英吉沙县| 华亭县| 桐乡市| 泰州市| 仪陇县| 天长市| 呼玛县| 天津市| 黄冈市| 香格里拉县| 合肥市| 甘肃省|