gpt4 book ai didi

linux - 在不升级的情况下恢复包状态以保持 Docker 容器较小

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:20 27 4
gpt4 key购买 nike

作为 Dockerfile 的一个步骤,我需要安装 build-essential 包(如果不可用)并运行 make。保持容器的占地面积小;我还想在完成后删除 build-essential 和所有由此产生的依赖项。

简单地使用 apt-get remove 然后使用 autoremove 删除它是行不通的;大多数已安装的软件包(100 MB 左右)都被留下了,可能是因为它们被其他人列为推荐或建议的软件包。还;这种方法可能会冒着从已经包含它(并且仍然应该包含它)的基础图像中删除 build-essential 的风险,除非明确检查这种情况。

另一种方法是检查安装包列表并在 make 之后恢复到该状态。我的几乎工作解决方案是一个包含以下内容的脚本:

dpkg --get-selections > /before
apt-get -y install build-essential
make -C <path to Makefile>
dpkg --clear-selections
dpkg --set-selections < /before
apt-get -y dselect-upgrade

这成功地恢复了包状态并删除了所有已安装的包,同时保留了所有现有的东西。伟大的。然而;系统上具有未决更新的现有包也会更新——我非常希望在这个阶段避免这种情况,因为这会给这个特定的 docker 层增加不必要的负担。

The following packages will be upgraded:
apt apt-utils base-files coreutils cpio dpkg gcc-4.9-base ifupdown
initscripts isc-dhcp-client isc-dhcp-common libapt-inst1.5 libapt-pkg4.12
libc-bin libdrm2 libffi6 libgcc1 libgcrypt11 libgnutls-openssl27 libgnutls26
libpng12-0 libssl1.0.0 libudev1 login multiarch-support ntpdate passwd
sysv-rc sysvinit-utils udev
30 upgraded, 0 newly installed, 38 to remove and 0 not upgraded.
Need to get 11.3 MB of archives.
...

问题是;如何在不更新任何包的情况下恢复包状态(阅读:删除所有由 build-essential 安装的新包)?

最佳答案

设法自己解决了:

dpkg --get-selections > /before
apt-get -y install build-essential
make -C <path to Makefile>
dpkg --clear-selections
cat /before | sed 's/install/hold/' | dpkg --set-selections
apt-get -y dselect-upgrade
dpkg --set-selections < /before

主要区别是将所有不被删除的包设置为“保留”(然后恢复它以备将来升级)。

关于linux - 在不升级的情况下恢复包状态以保持 Docker 容器较小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35655063/

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