編寫Dockerfile的最佳實踐


如果你想構建一個新的容器映象,你需要在一個名為Dockerfile的單獨文件中指定指令。這將允許開發者建立一個執行環境,並幫助他自動化流程並使其可重複。它提供了靈活性和可讀性,提高了問責制,並有助於輕鬆進行專案的版本控制。

毫無疑問,編寫Dockerfile是包含使用docker進行開發的專案中最重要的方面之一。但是,如果你要大規模部署專案,那麼編寫Dockerfile的方式可能會對專案的效能產生重大影響。

在我們深入分析如何高效地建立Dockerfile以幫助你提升專案效能之前,需要注意的是,任何docker映象的架構都可以被認為是一個分層結構,它包含一些可能從dockerhub拉取的基礎映象,以及在此基礎上對基礎映象的一些修改或新增新的映象。這種架構允許使用者重用拉取的docker映象,允許高效利用磁碟儲存,並允許快取docker構建過程。

因此,這裡有一些最佳實踐,可以幫助你提升docker專案的效能。

語句的順序很重要。

你需要以一種方式來排序你的步驟,使變化最少的語句先出現。這是因為當你更改或修改Dockerfile中的一行並使其快取失效時,後續行將由於這些更改而中斷。因此,你需要儘可能將變化最頻繁的行放在最後。

請看下面的例子。

FROM python:3

#set working directory
WORKDIR /usr/src/myapp

#copying all the files in the container
COPY . .

RUN apt-get -y update
RUN apt-get -y install vim

#specify the port number to be exposed
EXPOSE 8887

# run the command
CMD ["python3", "./file.py"]

這可以修改為 -

FROM python:3

#set working directory
WORKDIR /usr/src/myapp

RUN apt-get -y update
RUN apt-get -y install vim

#copying all the files in the container
COPY . .

#specify the port number to be exposed
EXPOSE 8887

# run the command
CMD ["python3", "./file.py"]

構建快取。

當你構建docker映象時,docker將嘗試逐一執行Dockerfile中的指令。在每個指令執行中,它都會在快取中查詢任何現有的映象層,如果不存在,它將建立一個新的映象層。現在,如果我們將build命令中的--no-cache選項設定為true,docker根本不使用快取,因此,對於每個指令,它都會嘗試構建一個新的映象層。

儘量避免安裝不必要的軟體包。

安裝不必要的軟體包只會增加構建時間並降低整體效能。因此,儘量只指定和安裝專案中實際需要的軟體包。一種有用的方法是透過在一個單獨的requirements.txt檔案中指定軟體包來安裝它們,然後執行以下命令。

RUN pip3 install -r requirements.txt

這有助於以更單獨和更精確的方式跟蹤你安裝的軟體包。

始終使用.dockerignore檔案。

類似於.gitignore,docker為其開發者提供了一個建立.dockerignore檔案的選項,該檔案有助於排除該檔案中提到的某些檔案或目錄。這有助於提高構建效能。

嘗試包含更具體的COPY語句。

你應該始終嘗試只將從你的目錄到docker容器中實際需要的檔案複製進去。這有助於避免快取失效。因為你在構建映象後對複製語句所做的任何更改都會破壞快取語句。

嘗試將所有可快取單元連結起來。

每個RUN語句都可以被認為是一個可快取單元。嘗試將所有RUN語句連結到單個語句中。此外,請確保連結過多語句很容易導致快取失效。

例如:

RUN apt-get -y update
RUN apt-get -y install vim

可以寫成

RUN apt-get update \
&& apt-get -y install vim

儘量避免不需要的軟體包依賴項。

在構建映象之前,嘗試刪除所有未使用的軟體包或依賴項。你可以使用--no-install-recommends標誌來實現這一點,該標誌將配置apt包管理器以不安裝冗餘包。

因此,這些是在建立Dockerfile時可以採取的一些措施,這些措施可以提高專案的效能,並幫助以更高的效率和靈活性的管理專案,同時允許開發者在多個專案中多次重用程式碼。

更新於:2020年10月1日

瀏覽量:257

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.