gpt4 book ai didi

Docker 镜像大小以及 'dnu restore' 应该占用多少空间?

转载 作者:行者123 更新时间:2023-12-01 12:31:28 37 4
gpt4 key购买 nike

我有一个 dockerized asp5 web api 项目,它的图像占用了大约 918 MB 的磁盘空间。我知道,由于 docker 的性质,图像可能会变得非常大,但是从我相当小的应用程序添加到原始 aspnet5 图像的 600 MB 似乎有点过分。具体来说,我的 Dockerfile 中的 dnu restore 步骤使我的图像大小增加了大约 500MB。我将不得不忍受这个,还是我可以做些什么来减小尺寸?

这是我的 project.json:

{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},

"dependencies": {
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final"
},

"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:5000"
},

"frameworks": {
"dnx451": { },
"dnxcore50": {
"dependencies": {
"System.Diagnostics.Process": "4.1.0-beta-23409"
}
}
},

"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}

我认为我在 Web API 项目的标准 VS 模板之上添加的唯一想法是行 "System.Diagnostics.Process": "4.1.0-beta-23409"非常感谢您提供的任何帮助。这是我的 Dockerfile:

FROM microsoft/aspnet:1.0.0-rc1-final-coreclr

RUN apt-get -qq update \
&& apt-get -qqy install nano postgresql-client s3cmd \
&& apt-get -y autoremove \
&& apt-get -y clean \
&& rm -rf /var/lib/apt/lists/*

COPY . /app

WORKDIR /app
RUN ["dnu", "restore"]


EXPOSE 5000

ENTRYPOINT ["dnx", "-p", "project.json", "web"]

这是我的 docker history 图片

IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
4ee2fb3cb020 35 seconds ago /bin/sh -c #(nop) ENTRYPOINT &{["dnx" "-p" "p 0 B
24009ffd82e6 38 seconds ago /bin/sh -c #(nop) EXPOSE 5000/tcp 0 B
9c46bb3859e9 51 seconds ago dnu restore 526.6 MB
d536b68081ba About a minute ago /bin/sh -c #(nop) WORKDIR /app 0 B
4f19849eea0a About a minute ago /bin/sh -c #(nop) COPY dir:cb4b00a5061a16f1f6 684.6 kB
b640bd0c52a2 2 days ago /bin/sh -c apt-get -qq update && apt-get -qq 36.37 MB
8fa640275ee6 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:/u 0 B
e4f675d032df 2 days ago /bin/sh -c LIBUV_VERSION=1.4.2 && apt-get -q 2.406 MB
385c0bace97d 2 days ago /bin/sh -c bash -c "source $DNX_USER_HOME/dnv 49.22 MB
7c9fafa077c3 2 days ago /bin/sh -c curl -sSL https://raw.githubuserco 44.04 kB
2ae394ac9389 2 days ago /bin/sh -c apt-get -qq update && apt-get -qqy 178.1 MB
b07742e812ff 2 days ago /bin/sh -c #(nop) ENV DNX_RUNTIME_ID=ubuntu.1 0 B
e7d3e76b41ad 2 days ago /bin/sh -c #(nop) ENV DNX_USER_HOME=/opt/DNX_ 0 B
d0ee80de6cbb 2 days ago /bin/sh -c #(nop) ENV DNX_VERSION=1.0.0-rc1-f 0 B
ea6bab360f56 7 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
5679b9b90e09 7 days ago /bin/sh -c #(nop) ADD file:5afd8eec1dc1e7666d 125.1 MB

最佳答案

您可以采取的另一种方法是发布应用程序,然后将发布的应用程序作为 Docker 镜像的一部分:

示例:在这里我想只在 Core Clr 上运行我的应用

  • 运行 dnu publish --framework dnxcore50 --out ../publishedoutput(我在这里明确指定了 framework,因为您的应用可能同时针对 dnx451dnxcore50 并且因为你确定要在 Core Clr 上运行,你可以避免打包 dnx451 相关的包......所以这是图像的减少尺寸)

  • 一个 docker 文件,可用于针对上述已发布目录创建 docker 镜像。

    FROM microsoft/aspnet:1.0.0-rc1-final-coreclr
    COPY . /app/
    WORKDIR /app/approot
    EXPOSE 5004
    ENTRYPOINT ["./kestrel"]

更多信息:
恢复的包大小与已发布的应用程序包大小相同。
你可以通过打开恢复的包来理解为什么会这样......例如,在下面的场景中,发布的包只有运行应用程序所需的内容。

还原 JSON.NET 包内容: enter image description here

已发布 JSON.NET 包内容: enter image description here

关于Docker 镜像大小以及 'dnu restore' 应该占用多少空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33962196/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com