Docker图像大小和我应该期望“dnu恢复”占用多少空间?

时间:2015-11-27 17:21:32

标签: docker asp.net-core

我有一个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

1 个答案:

答案 0 :(得分:4)

您可以采取的另一种方法是发布应用程序,然后将已发布的应用程序作为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