精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

減少docker鏡像大小的方法

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-05-15 11:13 ? 次閱讀

在本文中,我們將看到減少 docker 鏡像大小的方法。

什么是 docker?

Docker 是一種容器引擎,可以在容器內運行一段代碼。Docker 鏡像是在任何地方運行您的應用程序而無需擔心應用程序依賴性的方式。

要構建鏡像,docker 使用一個名為 Dockerfile 的文件。Dockerfile 是一個包含許多指令(RUN、COPY、EXPOSE 等)的文件。成功執行這些命令后,docker 將創建一個鏡像供我們在任何地方使用。

為什么要減小 docker 鏡像大小?

安裝不必要的軟件包會增加攻擊面,從而增加安全風險。

鏡像傳輸需要更多時間。

部署大鏡像需要更多時間。

我們必須以某種方式創建我們的 Dockerfile,以便從該 Dockerfile 構建的鏡像在大小方面得到優化。

在本文中,我們將討論 10 種減少 docker 鏡像大小的有效方法。

1:最小化鏡像層

我們可以減少 Dockerfile 中的層數。

dockerfile 中的每個 FROM、RUN、COPY 命令都會創建一個單獨的層,并增加鏡像的整體大小和構建時間。

要減小 docker 鏡像大小,請在單個 RUN 或 COPY 指令中執行多個命令來最小化 Dockerfile 中的層數。

FROMubuntu:latest
RUNaptupdate-y
RUNaptinstallunzip-y
RUNaptinstallcurl-y
RUNaptinstallpython3-y

與其對每個命令使用單獨的指令,不如將它們組合起來:

FROMubuntu:latest
RUNaptupdate-y&&
aptinstallunzip-y&&
aptinstallcurl-y&&
aptinstallpython3-y

從下圖中可以看出,通過減少層數,可以減少一些 MB 的大小。

a068d052-f18e-11ed-90ce-dac502259ad0.png

2:使用 Docker Squash 減小鏡像大小

Docker 在構建鏡像時創建了很多層。壓縮有助于在邏輯層中組織鏡像。我們可以控制鏡像的結構,而不是讓鏡像具有多個不必要的層。

您可以使用以下命令安裝 docker-squash。

pipinstalldocker-squash

您可以運行以下命令來減小鏡像的大小。

docker-squashimage:old-timage:new
a090fcbc-f18e-11ed-90ce-dac502259ad0.png

3:使用較小的基礎鏡像

減小 docker 鏡像大小最明顯的方法是使用較小的基礎鏡像。

如果希望為 python 應用程序創建鏡像,請考慮使用 python:3.9-slim 鏡像而不是 python:3.9。

python:3.9 的大小約為 1.3 GB,而 python:3.9-slim 的大小僅為 1 GB 左右。

您可以使用 alpine 版本進一步減少鏡像。alpine 鏡像是專門為作為容器運行而設計的,而且體積非常小。python:3.9-alpine 鏡像只有 49 MB。

4:使用多階段構建來減小大小

為了顯著減小大小,我們可以使用 docker 多階段構建的概念。這里我們使用不同的 images/Dockerfile 來構建和打包應用代碼。

它將 Dockerfile 分成多個階段,并將所需的工件從一個階段傳遞到另一個階段,然后在最后一個階段交付縮小鏡像大小的最終鏡像。它顯著減小鏡像尺寸。

#Officialdockerbuildimage,Usingnode:14.17-alpine3.14imageforstage-1.
#Stage-1
FROMnode:14.17-alpine3.14asbuild
#CopyRequiredfiles
COPYpublic/home/app/public/
COPYsrc/home/app/src/
#dockerfileinstallmultiplepackages
RUNapkaddg++makepython2
RUNnpminstall--silent
#CreateBuild
RUNnpmrunbuild
RUNapk--purgedelpython2
#Runthebuildbycopyingthefilesformpreviousstage.
#Stage-2
FROMnginx:stable-alpine
COPYnginx.conf/etc/nginx/conf.d/default.conf
COPY--from=build/home/app/build/usr/share/nginx/html
EXPOSE80
CMD["nginx","-g","daemonoff;"]

這里我們使用兩個階段從 docker 文件創建鏡像。在 Stage-1 中,我們復制代碼并構建它,在 stage-2 中,我們使用在 stage-1 中構建的代碼在 Nginx 中運行。

5:apt 安裝中使用 --no-install-recommends 標志

當我們運行 apt install 命令來安裝某些包時,它會安裝一些不需要的推薦包。使用 --no-install-recommends 標志可以顯著減小鏡像大小。

FROMubuntu:latest
RUNaptupdate-y&&
aptinstallunzip-y--no-install-recommends&&
aptinstallcurl--no-install-recommends-y&&
aptinstallpython3-y--no-install-recommends

如下圖所示,帶有 new 標簽的鏡像由于添加了此標志而減少了 5MB。當我們要安裝多個包時,這將非常有幫助。a0b1eb3e-f18e-11ed-90ce-dac502259ad0.png

您可以在 apk add 命令中添加 --no-cache。

6:在 apt install 命令后添加 rm -rf /var/lib/apt/lists/*

我們可以在 apt install 之后添加這個命令來減少 docker 鏡像的大小。

FROMubuntu:latest
RUNaptupdate-y&&
aptinstallunzip-y--no-install-recommends&&
aptinstallcurl--no-install-recommends-y&&
aptinstallpython3-y--no-install-recommends&&
rm-rf/var/lib/apt/lists/*
a0c5339c-f18e-11ed-90ce-dac502259ad0.png

從上圖中可以看出,我們已將 docker 鏡像的大小減少了約 41 MB。

7:使用 .dockerignore 文件

如果您不想將某些文件復制到 docker 鏡像,那么使用 .dockerignore 文件可以為您節省一些空間。

在構建上下文中有一些隱藏的文件/文件夾,您可以使用 ADD 或 COPY 命令(如 .git 等)將其傳輸到鏡像。包含一個 .dockerignore 文件以減小 docker 鏡像大小是一個很好的做法。

.dockerignore文件示例。

ignorethisfile.txt
logs/
ignorethisfolder/
.git
.cache
*.md

8:在 RUN 之后放置 COPY

在某些情況下,您對代碼進行了細微的更改,并且需要反復從 dockerfile 構建鏡像。
在這種情況下,將 COPY 命令放在 RUN 命令之后將有助于減小鏡像大小,因為在這種情況下 docker 將能夠更好地使用緩存功能。

它將為安裝了依賴項的鏡像創建緩存,每次更改代碼時,docker 都會使用該緩存并創建鏡像。它還將減少 docker 構建時間。

#Dockerfile-1
FROMubuntu:latest
RUNaptupdate-y&&
aptinstallunzip-y--no-install-recommends&&
aptinstallcurl--no-install-recommends-y&&
aptinstallpython3-y--no-install-recommends&&
rm-rf/var/lib/apt/lists/*
COPYfile/home/ubuntu
#Dockerfile-2
FROMubuntu:latest
COPYfile/home/ubuntu
RUNaptupdate-y&&
aptinstallunzip-y--no-install-recommends&&
aptinstallcurl--no-install-recommends-y&&
aptinstallpython3-y--no-install-recommends&&
rm-rf/var/lib/apt/lists/*

在上述情況下,dockerfile-1 將能夠比 dockerfile-2 表現得更好。

9:安裝后刪除軟件包

如果您需要在 docker 鏡像中安裝一些包,并且您是從外部下載它們,那么最好在安裝后刪除這些包。

例如,如果您希望從 zip 文件安裝 AWS CLI V2,那么在成功安裝后請記住也刪除該 zip 文件。

FROMubuntu:latest
RUNcurl"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"-o"awscliv2.zip"&&
unzipawscliv2.zip&&
sudo./aws/install&&
rmawscliv2.zip

10:使用 Docker 鏡像縮容工具

有幾個dockerfile 優化工具可以幫助你減少 docker 鏡像的大小。下面列出了其中一些。

Dive:Dive 是一個開源工具,用于探索 Docker 鏡像及其層內容,然后發現縮小 Docker/OCI 鏡像大小的方法。

https://github.com/wagoodman/dive

fromlatest.io:此工具將檢查您的 Dockerfile 并檢查可以執行的更多步驟以減小鏡像大小。

https://www.fromlatest.io/

Docker Slim:它讓你的容器更好、更小、更安全。您可以使用dockerslim 來最小化容器鏡像

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 應用程序
    +關注

    關注

    37

    文章

    3198

    瀏覽量

    57360
  • 鏡像
    +關注

    關注

    0

    文章

    158

    瀏覽量

    10651
  • Docker
    +關注

    關注

    0

    文章

    446

    瀏覽量

    11738

原文標題:10 個優化技巧,減少 Docker 鏡像大小

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    怎么構建docker鏡像倉庫軟件

    Docker Registry】用docker registry 鏡像搭建私有測試倉庫
    發表于 08-13 11:03

    如何判斷是否在docker鏡像中?

    實戰中首先需要判斷服務器是否為docker環境。常用的判斷方法有兩種。 1、通過執行 ls -alh /.dockerenv是否存在.dockerenv文件 docker環境下存在該文件 非
    發表于 09-20 07:42

    Docker上的Alpine Linux鏡像建立

    如何建立你自己的Docker鏡像2016-03-18 14:33 Alpine Linux的什么是Docker社區所鐘愛?輕量級容器意味著更多的計算資源。Alpine Linux的確是輕型
    發表于 10-12 11:52 ?0次下載

    淺析Docker鏡像本地存儲機制及容器啟動原理

    鏡像各層內容及對應大小,每層對應著 Dockerfile 中的一條指令。Docker 鏡像默認存儲在 /var/lib/docker/《st
    發表于 10-19 14:17 ?2482次閱讀

    國內Docker CE 鏡像源的配置

    阿里云官方鏡像站: https://developer.aliyun.com/mirror/?utm_content=g_1000303593 ? Docker CE 是免費的 Docker 產品
    的頭像 發表于 11-09 09:16 ?3549次閱讀

    Docker—簡介與鏡像用法

    阿里云官方鏡像站: ??https://developer.aliyun.com/mirror/?utm_content=g_1000303593?? ? 一、容器簡介 Docker是管理容器的引擎
    發表于 11-25 16:28 ?477次閱讀
    <b class='flag-5'>Docker</b>—簡介與<b class='flag-5'>鏡像</b>用法

    go項目怎么讓docker鏡像體積減小

    【導讀】go 項目怎么讓 docker 鏡像體積減小?本文做了詳細介紹。
    的頭像 發表于 06-12 15:07 ?1314次閱讀

    go項目怎么讓docker鏡像體積減小

    go 項目怎么讓 docker 鏡像體積減小?本文做了詳細介紹。
    的頭像 發表于 06-23 10:49 ?1098次閱讀

    Docker鏡像的詳細講解

    本文是對 Docker 鏡像的詳細講解,講解了如何安裝 Docker、配置 Docker 鏡像加速以及操作
    的頭像 發表于 08-02 10:00 ?2024次閱讀

    從零開始學習制作、以及使用Tina的Docker編譯鏡像

    學習制作、以及使用Tina的Docker編譯鏡像
    的頭像 發表于 08-28 11:45 ?2129次閱讀
    從零開始學習制作、以及使用Tina的<b class='flag-5'>Docker</b>編譯<b class='flag-5'>鏡像</b>

    docker 搜索鏡像,docker查看鏡像詳細信息(docker下載鏡像命令)

    Docker Hub是集中管理的Docker鏡像注冊中心。通過Docker 用戶可以在注冊中心搜索、下載和使用CLI命令行工具中的鏡像。以下
    的頭像 發表于 07-19 09:46 ?1622次閱讀

    Dockerfile定義Docker鏡像的構建過程

    了解Dockerfile Dockerfile 是一個文本文件,用于定義 Docker 鏡像的構建過程。它以指令的形式描述了如何構建鏡像,從基礎鏡像開始逐步添加配置、文件和依賴,最終形
    的頭像 發表于 09-30 10:22 ?2386次閱讀

    Docker鏡像國內加速的幾種方法

    在國內,拉取 Docker 鏡像速度慢/時不時斷線/無賬號導致限流等,比較痛苦. 這里提供加速/優化的幾種方法
    的頭像 發表于 10-19 10:02 ?5717次閱讀
    <b class='flag-5'>Docker</b><b class='flag-5'>鏡像</b>國內加速的幾種<b class='flag-5'>方法</b>

    構建docker鏡像應該遵循哪些原則

    構建 Docker 鏡像時,應遵循以下原則: 單一職責:每個鏡像應只包含一個應用或服務,避免將多個應用或服務放在同一個鏡像中。這樣可以確保鏡像
    的頭像 發表于 11-23 09:41 ?853次閱讀

    手動構建Docker鏡像方法

    不推薦使用docker commit命令,而應該使用更靈活、更強大的dockerfile來構建docker鏡像
    的頭像 發表于 08-05 15:30 ?255次閱讀
    手動構建<b class='flag-5'>Docker</b><b class='flag-5'>鏡像</b>的<b class='flag-5'>方法</b>