我有一个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
答案 0 :(得分:4)
您可以采取的另一种方法是发布应用程序,然后将已发布的应用程序作为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"]
更多信息:
恢复的包大小非与应用程序的已发布包相同
您可以通过打开已还原的包来理解为什么会出现这种情况...例如,在下面的方案中,已发布的包只包含运行应用程序所需的内容。