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

編寫Dockerfile和構(gòu)建自定義鏡像的步驟與技巧

 更新時間:2023年07月27日 11:04:52   作者:mikezhu  
Docker已經(jīng)成為現(xiàn)代應用程序開發(fā)和部署的重要工具之一,在Docker中,Dockerfile是定義和構(gòu)建自定義鏡像的鍵文件,本文將深入解讀Dockerfile的編寫和自定義鏡像的構(gòu)建過程,并分享一些實用的技巧和最佳實踐,需要的朋友可以參考下

一、Dockerfile簡介

Dockerfile是一種文本文件,用于描述如何構(gòu)建一個Docker鏡像。它包含了一系列的指令和配置,用于指導Docker引擎在構(gòu)建過程中執(zhí)行的操作。通過編寫Dockerfile,我們可以定義鏡像的基礎操作系統(tǒng)、安裝軟件、配置環(huán)境變量等。下面是一個簡單的Dockerfile示例:

FROM ubuntu:20.04
?# 設置工作目錄
WORKDIR /app
?# 復制應用程序文件到鏡像中
COPY . .
?# 安裝依賴項
RUN apt-get update && apt-get install -y \
? ? python3 \
? ? python3-pip
?# 安裝Python依賴包
RUN pip3 install -r requirements.txt
?# 設置環(huán)境變量
ENV FLASK_APP=app.py
?# 暴露應用程序的端口
EXPOSE 5000
?# 定義容器啟動時執(zhí)行的命令
CMD ["python3", "app.py"]

二、Dockerfile指令解析

FROM

指定基礎鏡像,可以是官方鏡像或其他已有的鏡像。在上面的示例中,我們使用了官方的Ubuntu 20.04鏡像作為基礎。

FROM <image>

FROM <image>:<tag>

FROM <image>:<digest> 

三種寫法,其中和 是可選項,如果沒有選擇,那么默認值為latest

從公共鏡像庫中拉取鏡像很容易,基礎鏡像可以選擇任何有效的鏡像。在一個Dockerfile中FROM指令可以出現(xiàn)多次,這樣會構(gòu)建多個鏡像。tag的默認值是latest,如果參數(shù)image或者tag指定的鏡像不存在,則返回錯誤。

WORKDIR

WORKDIR <工作目錄路徑>

用于為Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指令設定工作目錄。在上面的示例中,我們將工作目錄設置為/app。 用 WORKDIR 指定的工作目錄,會在構(gòu)建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄,必須是提前創(chuàng)建好的)。docker build 構(gòu)建鏡像過程中的,每一個 RUN 命令都是新建的一層。只有通過 WORKDIR 創(chuàng)建的目錄才會一直存在。

在Dockerfile文件中,WORKDIR指令可出現(xiàn)多次,其路徑也可以為相對路徑,不過,它的路徑是相對此前一個WORKDIR指令指定的路徑。另外,WORKDIR也可調(diào)用由ENV指定定義的變量。

COPY

復制文件或目錄到容器中。在上面的示例中,我們將當前目錄的所有文件復制到容器的/app目錄中。

COPY <src> <dest>

COPY指令復制所指向的文件或目錄,將它添加到新鏡像中,復制的文件或目錄在鏡像中的路徑是dest。src所指定的源可以有多個,但必須是上下文根目錄中的相對路徑。不能只用形如 COPY …/something /something這樣的指令。此外,src可以使用通配符指向所有匹配通配符的文件或目錄,例如,COPY home* /mydir/ 表示添加所有以"hom"開頭的文件到目錄/mydir/中。

dest可以是文件或目錄,但必須是目標鏡像中的絕對路徑或者相對于WORKDIR的相對路徑(WORKDIR即Dockerfile中WORKDIR指令指定的路徑,用來為其他指令設置工作目錄)。若dest以反斜杠/結(jié)尾則其指向的是目錄;否則指向文件。src同理。若dest是一個文件,則src的內(nèi)容會被寫到dest中;否則src指向的文件或目錄中的內(nèi)容會被復制添加到dest目錄中。當src指定多個源時,dest必須是目錄。如果dest不存在,則路徑中不存在的目錄會被創(chuàng)建。

RUN

在容器中執(zhí)行命令??梢杂糜诎惭b軟件、配置環(huán)境等。在上面的示例中,我們使用apt-get命令安裝了Python和pip,并使用pip3安裝了Python的依賴包。

RUN <command> (shell格式)

RUN ["executable", "param1", "param2"]

RUN指令會在前一條命令創(chuàng)建出的鏡像的基礎上創(chuàng)建一個容器,并在容器中運行命令,在命令結(jié)束運行后提交容器為新鏡像,新鏡像被Dockerfile中的下一條指令使用。

當使用shell格式時,命令通過/bin/sh -c運行。當使用exec格式時,命令是直接運行的,即不通過shell來運行命令。這里要注意,exec格式中的參數(shù)會以 JSON 數(shù)組的格式被Docker解析,所以參數(shù)必須使用雙引號而不是單引號。

因為exec格式不會在shell中執(zhí)行,所以環(huán)境變量不會被替換。比如,執(zhí)行RUN [“echo”, “U S E R " ] 指令時, USER"]指令時,USER"]指令時,USER不會做變量替換。如果希望運行shell程序,指令可以寫成 RUN [”/bin/bash", “-c”, “echo”, “$USER”]

ENV

設置環(huán)境變量。在上面的示例中,我們設置了FLASK_APP環(huán)境變量為app.py。

ENV <key> <value> 

ENV <key>=<value> ... 

EXPOSE

聲明容器運行時需要暴露的端口。在上面的示例中,我們聲明了容器需要暴露的端口為5000。

EXPOSE <port> [<port>/<protocol>...]

CMD

定義容器啟動時要執(zhí)行的命令。在上面的示例中,我們指定了容器啟動時要執(zhí)行的命令為python3 app.py。

CMD指令有3種格式:

CMD <command> (shell格式)

CMD ["executable", "param1", "param2"] (exec格式,推薦使用)

CMD ["param1", "param2"] (為ENTRYPOINT指令提供參數(shù))

一個Dockerfile中可以有多條CMD指令,但只有最后一條CMD指令有效。CMD [“param1”, “param2”]格式用來跟ENTRYPOINT指令配合使用,CMD指令中的參數(shù)會添加到ENTRYPOINT指令中。當使用shell和exec格式時,命令在容器中的運行方式與RUN指令相同。如果在執(zhí)行docker run 時指定了命令行參數(shù),則會覆蓋CMD指令中的命令。

三、Dockerfile的最佳實踐

編寫高效、可維護的Dockerfile需要遵循一些最佳實踐:

1. 使用多階段構(gòu)建:如果應用程序有多個構(gòu)建階段,可以使用多個FROM指令構(gòu)建多個階段的鏡像,以減小最終鏡像的大小。

2. 最小化鏡像大?。罕苊庠阽R像中安裝不必要的軟件包和依賴,只安裝應用程序所需的組件。

3. 使用緩存:Docker在構(gòu)建過程中會使用緩存,可以通過合理安排指令的順序,以及使用--no-cache參數(shù)來優(yōu)化構(gòu)建過程。

  • 使用環(huán)境變量:通過使用環(huán)境變量,可以使鏡像更具靈活性,可以在運行容器時動態(tài)配置應用程序的參數(shù)。

結(jié)論: 本文詳細介紹了如何編寫Dockerfile和構(gòu)建自定義鏡像的步驟和最佳實踐。通過編寫Dockerfile,可以輕松地創(chuàng)建自定義的鏡像,以滿足不同應用程序的需求。掌握這些技巧和知識,將有助于更好地利用Docker的優(yōu)勢,提高應用程序的部署和管理效率。

以上就是編寫Dockerfile和構(gòu)建自定義鏡像的步驟與技巧的詳細內(nèi)容,更多關(guān)于編寫Dockerfile和構(gòu)建鏡像的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SEATA事務服務DOCKER部署的過程詳解

    SEATA事務服務DOCKER部署的過程詳解

    這篇文章主要介紹了SEATA事務服務DOCKER部署的過程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Alpine鏡像中如何安裝telnet

    Alpine鏡像中如何安裝telnet

    BusyBox是一個在嵌入式系統(tǒng)和資源受限環(huán)境中廣泛使用的工具集合,它為用戶提供了輕量級、功能強大和靈活的命令行工具集,這篇文章主要介紹了Alpine鏡像中安裝telnet,需要的朋友可以參考下
    2024-06-06
  • docker容器查看所有沒使用的鏡像并刪除的實現(xiàn)

    docker容器查看所有沒使用的鏡像并刪除的實現(xiàn)

    本文主要介紹了docker容器查看所有沒使用的鏡像并刪除的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • 關(guān)于為Windows?Service?2019?使用?Docker的問題

    關(guān)于為Windows?Service?2019?使用?Docker的問題

    最近收到領(lǐng)導通知,甲方需要將原來的服務器遷移到新的服務器,原來的服務器上安裝了很多的服務,每次重啟之后總是有很多的問題需要人工大量的進行干預,今天小編通過本文給大家介紹下Windows?Service?2019?使用?Docker的問題,需要的朋友參考下吧
    2022-05-05
  • Docker容器命令執(zhí)行狀態(tài)碼的檢查與分析

    Docker容器命令執(zhí)行狀態(tài)碼的檢查與分析

    在 Docker 容器化技術(shù)日益普及的今天,容器的運行狀態(tài)和健康檢查成為了運維人員和開發(fā)者關(guān)注的焦點,了解如何在 Docker 容器中執(zhí)行命令并檢查其退出狀態(tài)碼,對于確保容器服務的穩(wěn)定性和可靠性至關(guān)重要,需要的朋友可以參考下
    2024-12-12
  • idea使用docker生成鏡像的詳細步驟

    idea使用docker生成鏡像的詳細步驟

    本文詳細介紹了在Windows環(huán)境下使用Docker?Desktop進行Docker鏡像的打包、運行、導出以及在Linux系統(tǒng)中的導入操作,重點講解了如何在Windows中安裝Docker?Desktop,構(gòu)建Docker鏡像的步驟,文中介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • Docker 教程之數(shù)據(jù)管理詳細介紹

    Docker 教程之數(shù)據(jù)管理詳細介紹

    這篇文章主要介紹了Docker 教程之數(shù)據(jù)管理詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • docker創(chuàng)建并運行一個MySql容器,并將宿主機直接掛載到容器

    docker創(chuàng)建并運行一個MySql容器,并將宿主機直接掛載到容器

    這篇文章主要介紹了docker創(chuàng)建并運行一個MySql容器,并將宿主機直接掛載到容器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 如何使用Docker部署SearXNG

    如何使用Docker部署SearXNG

    本文介紹了如何使用DockerCompose部署SearXNG搜索引擎,并提供了配置代理、修改搜索格式和調(diào)用API的方法,感興趣的朋友一起看看吧
    2025-02-02
  • 利用Docker-compose安裝redis的簡單步驟

    利用Docker-compose安裝redis的簡單步驟

    Docker-compose是Docker官方推出的一個工具軟件,可以管理多個Docker容器組成的一個應用,下面這篇文章主要給大家介紹了關(guān)于利用Docker-compose安裝redis的簡單步驟,需要的朋友可以參考下
    2024-03-03

最新評論