我有一个dockerized asp5 web api项目,该图像占用约918 MB的磁盘空间。我知道,由于Docker的性质,图像可能会变得很大,但从我很小的应用程序将600 MB的空间添加到原始aspnet5图像中似乎有点过头了。具体来说dnu restore
,我的Dockerfile中的步骤使映像大小增加了约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
您的应用可以同时定位dnx451
,dnxcore50
并且由于您确定要在Core Clr上运行,因此可以避免打包dnx451
相关的软件包...这样可以减小图像尺寸)
可用于以上发布目录上方的docker文件来创建docker映像。
FROM microsoft/aspnet:1.0.0-rc1-final-coreclr
COPY . /app/
WORKDIR /app/approot
EXPOSE 5004
ENTRYPOINT ["./kestrel"]
更多信息:
恢复包大小是不一样的应用程序的发布的数据包。
您可以通过打开还原的软件包来理解为什么会出现这种情况。例如,在以下情况下,已发布的软件包仅具有运行应用程序所需的内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句