在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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 來最小化容器鏡像

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

    關注

    38

    文章

    3296

    瀏覽量

    57946
  • 鏡像
    +關注

    關注

    0

    文章

    170

    瀏覽量

    10807
  • Docker
    +關注

    關注

    0

    文章

    492

    瀏覽量

    11978

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

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

收藏 人收藏

    評論

    相關推薦

    怎么構建docker鏡像倉庫軟件

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

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

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

    國內Docker CE 鏡像源的配置

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

    Docker—簡介與鏡像用法

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

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

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

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

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

    Docker鏡像的詳細講解

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

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

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

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

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

    Dockerfile定義Docker鏡像的構建過程

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

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

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

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

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

    手動構建Docker鏡像方法

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

    Dockerfile鏡像制作與Docker-Compose容器編排

    Dockerfile鏡像制作 docker/podman中, 鏡像是容器的基礎,每次執行docker run的時候都會指定哪個基本鏡像作為容
    的頭像 發表于 01-07 11:01 ?193次閱讀
    Dockerfile<b class='flag-5'>鏡像</b>制作與<b class='flag-5'>Docker</b>-Compose容器編排

    Docker-鏡像的分層-busybox鏡像制作

    目錄 知識點1:鏡像的分層 示例:進入 docker hub查看Jenkins的Dockerfile 知識點2:base鏡像 知識點3:scratch鏡像 scratch
    的頭像 發表于 01-15 10:44 ?144次閱讀
    <b class='flag-5'>Docker</b>-<b class='flag-5'>鏡像</b>的分層-busybox<b class='flag-5'>鏡像</b>制作
    主站蜘蛛池模板: 亚洲综合春色另类久久 | 色中色资源 | 国产拍拍视频 | 欧美一级特黄高清免费 | 国模最新私拍视频在线观看 | 中国特黄一级片 | 色老头在线官方网站 | 国产午夜一区二区在线观看 | 伊人网大香| 二级黄绝大片中国免费视频 | 傲视影院午夜毛片 | 波多野结衣一级特黄毛片 | 夜夜操网 | 免费观看三级毛片 | 国产一二三区在线 | 日本黄色大片在线播放视频免费观看 | 亚洲综合第一区 | 91中文在线观看 | 欧美性色黄大片四虎影视 | 艹逼视频免费看 | 国产精品 视频一区 二区三区 | 欧美三级视频在线播放 | 久热福利视频 | 欧美黑人xxxx猛牲大交 | 狠狠草视频 | 欧美伊久线香蕉线新在线 | 欧美18性欧美黑吊 | 男女视频在线观看免费高清观看 | 性xxxx黑人与亚洲 | 天天色天天射综合网 | 久久国产乱子伦精品免 | 天天综合色天天综合网 | 美女一级牲交毛片视频 | 国产性做久久久久久 | 久久天天躁狠狠躁夜夜爽蜜月 | 91国内在线| 欧美日韩国产另类一区二区三区 | 四虎884 | 色偷偷av男人的天堂 | 毛片网站网址 | 婷婷五月小说 |