A-A+

RUN apk add –no-cache –virtual=build-dependencies 详解

2019年03月02日 12:09 汪洋大海 暂无评论 阅读 865 views 次
  -t, --virtual NAME      Instead of adding all the packages to 'world', create a new virtual package with the listed dependencies and add that to 'world'; the
                          actions of the command are easily reverted by deleting the virtual package

这意味着当您安装软件包时,这些软件包不会添加到全局软件包中。这种变化可以很容易地恢复。所以,如果我需要gcc来编译程序,但是一旦程序被编译,我就不再需要gcc了。

我可以在虚拟包中安装gcc和其他必需的包,并且可以删除所有依赖项,并删除此虚拟包名称。以下是示例用法

apk add --virtual mypacks gcc vim
apk del mypacks

使用第一个命令安装的所有18个软件包将被下一个命令删除

文章来源:https://codeday.me/bug/20180822/222160.html

--------------分享的其他博客的文章---------
每个人都喜欢优化,小文件大小等等。如果你能够将Docker镜像大小减少2倍或更多,那就太棒了。向Alpine Linux问好。它是一个重量仅为5 MB的最小Linux发行版。它还有基本的linux工具和一个不错的包管理器APK。APK非常稳定,有相当数量的包。

apk add python gcc

在这篇文章中,我的主要座右铭是如何从AlpineLinux中挤出最好的东西来创建最小的Docker镜像。让我们开始吧。

第1步:使用基于AlpineLinux的图像
好吧,我知道这很明显,但为了完整本文,我将说明尽可能使用基于Alpine的图像。 Python和Redis有他们官方的基于Alpine的图像,而NodeJS有很好的非官方的基于Alpine的图像。Postgres,Ruby和其他流行环境也是如此。

第2步:仅安装所需的依赖项
首选安装选择依赖项而不是安装包含大量它们的包。例如,更喜欢gcc在buildpack上安装和开发库。您可以在他们的网站上找到Alpine包的列表。

专业技巧 - Debian v / s Alpine开发包的绝佳列表位于alpine-buildpack-deps Docker Hub页面(向下滚动至Packages)。这是一个非常完整的列表,您将始终找到您正在寻找的依赖项。

第3步:使用后删除构建依赖项
组件/库需要构建依赖关系来为平台构建本机扩展。构建完成后,不需要它们。因此,您应该在作业完成后删除构建依赖项。看看下面的代码片段。

RUN apk add --virtual build-dependencies gcc python-dev linux-headers musl-dev postgresql-dev \
    && pip install -r requirements.txt \
    && apk del build-dependencies

整体的的意思就是 构建依赖关系来为平台构建本机扩展。构建完成后,不需要它们。因此,应该在作业完成后删除构建依赖项。
我正在使用--virtual为该实例上安装的pacakages提供标签,然后在pip install完成后,我将其删除。

第4步:删除缓存
缓存可能占用大量不需要的空间。所以总是apk add用--no-cache参数运行。

RUN apk add --no-cache package1 package2

如果您使用npm管理项目依赖项和bower来管理前端依赖项,建议您也清除它们的缓存。

RUN npm cache clean && bower cache clean

第5步:向专家学习
Docker Hub上的每个图像都是开源的,这意味着它的Dockerfile是免费提供的。由于官方图像尽可能高效,因此很容易找到关于如何实现最佳性能和紧凑尺寸的精彩技巧。所以当在DockerHub上查看图像时,不要忘记查看它的Dockerfile,它比你想象的更有帮助。

结论
这就是我现在所拥有的一切。如果我发现任何新提示,我会及时通知您。根据我的个人经验,我发现AlpineLinux值得使用。我尝试在Alpine上部署Open Event Server但面临一些问题,因此最终使用debain创建了一个Dockerfile:jessie。但对于小型项目,我会推荐Alpine。然而,在大型复杂的项目中,您可能有时会遇到Alpine的问题。这可能是由于缺乏包装,缺乏图书馆支持或其他一些原因。但是要克服这些问题并非不可能,所以如果你足够努力,你可以让你的应用程序在Alpine上运行。
文章来源:https://aviaryan.com/blog/gsoc/docker-using-alpine

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×
标签:

给我留言