欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.什么是Dockerfile

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

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

2. Dockerfile作用

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

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

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

4.dockerfile指令:

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

        Eg:FROM centos:centos7.9.2009

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

        Eg:LABEL ZhangSan zs@163.com

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

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

語法格式:

COPY src dest

COPY ["src", "dest"]

解析:

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

        Eg:COPY test.txt /absoluteDir/

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

語法格式:

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

解析:

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

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

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

語法格式:

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

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

               echo $HOME'

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

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

        Eg:ENV CATALINA_HOME /usr/local/tomcat

                WORKDIR $CATALINA_HOME

EXPOSE 暴露容器端口

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

        Eg:EXPOSE 80/tcp

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

       Eg: VOLUME /var/log

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

解析:

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

USER  指定容器運行用戶

       指定該鏡像以及構(gòu)建鏡像時的命令以什么樣的用戶去執(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中多次使用。如果提供了相對路徑,則它將相對于上一個WORKDIR指令的路徑。

       Eg:WORKDIR /a

WORKDIR b

WORKDIR c

RUN pwd

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

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

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

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

       Eg:ARG version=3.13.4

FROM alpine:$version

CMD/ENTRYPOINT  指定容器啟動時執(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í)行命令,可以被運行容器時傳入的命令覆蓋。

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

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

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

基礎(chǔ)知識:

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

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

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

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

        Eg:docker build -f Dockerfile -t entrytest .

思路:

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

6.實戰(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"]

#運行容器,傳遞參數(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.注意事項

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

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

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

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

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

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

相關(guān)文章

  • docker+Nginx部署前端項目的詳細(xì)過程記錄

    docker+Nginx部署前端項目的詳細(xì)過程記錄

    docker的出現(xiàn)解決了我們很多問題,讓我們避免陷入各種依賴安裝的痛苦中,下面這篇文章主要給大家介紹了關(guān)于docker+Nginx部署前端項目的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Docker內(nèi)網(wǎng)穿透frp部署實現(xiàn)過程解析

    Docker內(nèi)網(wǎng)穿透frp部署實現(xiàn)過程解析

    這篇文章主要介紹了Docker內(nèi)網(wǎng)穿透frp部署實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • zabbix監(jiān)控docker容器狀態(tài)【推薦】

    zabbix監(jiān)控docker容器狀態(tài)【推薦】

    這篇文章主要介紹了zabbix監(jiān)控docker容器狀態(tài)的相關(guān)資料,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Docker安裝RabbitMQ后訪問報錯的最佳解決方案

    Docker安裝RabbitMQ后訪問報錯的最佳解決方案

    這篇文章主要介紹了Docker安裝RabbitMQ后訪問報錯的最佳解決方案,錯誤通常是由于RabbitMQ的安全配置導(dǎo)致的,RabbitMQ默認(rèn)配置允許的用戶僅能通過localhost訪問,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • docker 如何修改容器的端口

    docker 如何修改容器的端口

    正在運行的容器端口沖突了,但是還需要這個容器,怎么辦?只能修改端口了,今天通過本文給大家介紹docker 如何修改容器的端口,感興趣的朋友一起看看吧
    2024-01-01
  • Jenkins簡介與Docker部署Jenkins的方法

    Jenkins簡介與Docker部署Jenkins的方法

    今天小編就為大家分享一篇關(guān)于Jenkins簡介與Docker部署Jenkins的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • docker搭建minio集群的實現(xiàn)示例

    docker搭建minio集群的實現(xiàn)示例

    Docker MinIO集群是一種基于Docker的MinIO分布式存儲解決方案,本文主要介紹了docker搭建minio集群的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • docker update命令動態(tài)更新容器配置

    docker update命令動態(tài)更新容器配置

    Docker的docker update命令提供了一種在不停止容器的情況下動態(tài)調(diào)整其資源配置的能力,從而優(yōu)化性能或滿足特定需求,本文詳細(xì)介紹了docker update命令的使用方法、常用選項如CPU和內(nèi)存限制,感興趣的可以了解一下
    2024-10-10
  • 基于Docker部署Tomcat集群、 Nginx負(fù)載均衡的問題小結(jié)

    基于Docker部署Tomcat集群、 Nginx負(fù)載均衡的問題小結(jié)

    這篇文章主要介紹了基于Docker部署 Tomcat集群、 Nginx負(fù)載均衡,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 鏡像倉庫?Harbor搭建和使用教程

    鏡像倉庫?Harbor搭建和使用教程

    本文給大家介紹鏡像倉庫?Harbor搭建和使用教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-01-01

最新評論