- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大的 docker 镜像 A,我创建了一个新的 Dockerfile
FROM A
RUN rm /big-folder
docker build --squash -t B:latest .
最佳答案
请注意,此功能是实验性的,因此可能会在 future 的版本中更改。测试是在版本 17.03 上完成的。
根据我的测试,做 --squash
将压缩仅在当前图像中添加的层,而不更改或合并任何 FROM
图像层。
$ # squash-a is a sample base image like your image A
$ cat df.squash-a
FROM busybox:latest
ADD alpinetest.tgz /data
$ # squash-b is built off of squash-a, and uses the squash flag when built
$ cat df.squash-b
FROM test-squash-a:latest
RUN rm -rf /data
$ # squash-c merges the dockerfiles for A and B
$ cat df.squash-c
FROM busybox:latest
ADD alpinetest.tgz /data
RUN rm -rf /data
$ # standard build for A
$ docker build -f df.squash-a -t test-squash-a:latest .
Sending build context to Docker daemon 23.25 MB
Step 1/2 : FROM busybox:latest
---> 7968321274dc
Step 2/2 : ADD alpinetest.tgz /data
---> a417cffcd3d2
Removing intermediate container f15e9cd57375
Successfully built a417cffcd3d2
$ # build B with --squash
$ docker build -f df.squash-b --squash -t test-squash-b:latest .
Sending build context to Docker daemon 23.25 MB
Step 1/2 : FROM test-squash-a:latest
---> a417cffcd3d2
Step 2/2 : RUN rm -rf /data
---> Running in 961044b8ee10
---> f5939d65a51a
Removing intermediate container 961044b8ee10
Successfully built f5939d65a51a
$ # build C with --squash
$ docker build -f df.squash-c --squash -t test-squash-c:latest .
Sending build context to Docker daemon 23.25 MB
Step 1/3 : FROM busybox:latest
---> 7968321274dc
Step 2/3 : ADD alpinetest.tgz /data
---> Using cache
---> a417cffcd3d2
Step 3/3 : RUN rm -rf /data
---> Using cache
---> f5939d65a51a
Successfully built f5939d65a51a
$ # comparing images, A is large as expected, B didn't shrink, but C did
$ docker images | grep squash | sort
test-squash-a latest a417cffcd3d2 6 minutes ago 68 MB
test-squash-b latest 74e05f2130be 2 minutes ago 68 MB
test-squash-c latest 7562dac62351 2 minutes ago 1.11 MB
$ # start inspecting the layers with the busybox base
$ docker inspect -f '{{ .RootFS.Layers }}' busybox:latest
[sha256:38ac8d0f5bb30c8b742ad97a328b77870afaec92b33faf7e121161bc78a3fec8]
$ # layers in A adds one as expected
$ docker inspect -f '{{ .RootFS.Layers }}' test-squash-a
[sha256:38ac8d0f5bb30c8b742ad97a328b77870afaec92b33faf7e121161bc78a3fec8
sha256:3f4d2549e582599f3059fe3c869d4d353794b9064f8548c3a68629a4a93038d7]
$ # layers in B includes both busybox and A despite being squashed
$ docker inspect -f '{{ .RootFS.Layers }}' test-squash-b
[sha256:38ac8d0f5bb30c8b742ad97a328b77870afaec92b33faf7e121161bc78a3fec8
sha256:3f4d2549e582599f3059fe3c869d4d353794b9064f8548c3a68629a4a93038d7
sha256:68e9b1791c54b45c785c04440ba9de6eefd566a09890821296d46aec9609d2de]
$ # layers in C only adds a single layer on top of busybox despite 2 run commands
$ docker inspect -f '{{ .RootFS.Layers }}' test-squash-c
[sha256:38ac8d0f5bb30c8b742ad97a328b77870afaec92b33faf7e121161bc78a3fec8
sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef]
$ # the history output shows that the squash is over a range of layers
$ docker history test-squash-c
IMAGE CREATED CREATED BY SIZE COMMENT
7562dac62351 10 minutes ago 0 B merge sha256:f5939d65a51a45b9c30f71a53a878e42be3135a1e0696615aa3b34ed39e5dd99 to sha256:7968321274dc6b6171697c33df7815310468e694ac5be0ec03ff053bb135e768
<missing> 10 minutes ago /bin/sh -c rm -rf /data 0 B
<missing> 13 minutes ago /bin/sh -c #(nop) ADD file:8993cc512c40cc0... 0 B
<missing> 2 months ago /bin/sh -c #(nop) CMD ["sh"] 0 B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:707e63805c0be1a... 1.11 MB
关于Docker Squash 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786991/
在日常工作中,我选择使用 SmartGit 作为客户端。然而,我的团队成员坚持使用 git 原生的非商业 GUI。我们发现我们的 merge 提交看起来有些不同。 这些是 SmartGit 在请求 m
我正在尝试压缩 3 次提交。 我克隆存储库 我用要压缩的提交 checkout 分支 我运行“git rebase -i HEAD~3” 我“选择”最重要的提交,然后“压缩”第二个和第三个提交。这一切
我需要一些帮助来压缩 GitHub 中的提交。 我有大约 30 个提交,我想将前 10 个提交压缩为一个压缩提交,将另外 10 个提交压缩为另一个压缩提交。我使用了 git rebase -i HEA
我有一个大的 docker 镜像 A,我创建了一个新的 Dockerfile FROM A RUN rm /big-folder 我尝试使用以下方法构建图像: docker build --squas
在我的本地开发环境中使用推送部署系统会生成大量提交,我不想将其推送到上游。 我想要一种更快、更自动化的方法来将已自动生成的提交压缩为未自动生成的提交。当我的日志看起来像: > (HEAD -> fea
我有一个尚未发布的本地存储库,其图形结构如下: * G * F |\ | * E | * D * | C: A minor fix -- SQUASHME * | B |/ * A 所以
我见过的所有示例都涉及只有一个提交者的分支。我想要实现的是一个自动 git rebase -i,其中,对于给定的分支.. 给定用户所做的所有提交都将被压缩在一起。 因此,如果 3 个人在一个分支上工作
我的团队正在开发一个长期运行的特性分支,现在有数百个提交,现在我需要将它 merge 到 master 中以进行生产发布。 我不希望在该分支中有那么多提交,因为许多提交都是为了修复错误而完成的,并且每
我的同事(我们在这里称他为 John)和我一起开发一项功能。我们的工作分支如下所示 --o--o--o # this is develop branch \ o--o--o # this i
考虑我有提交 ... -- A -- B -- C 如果我使用 git rebase -i将所有三个提交压缩为一个,我们可以 pick A squash B squash C 我看到了结果提交 A有它
我想在一个分支中间将几个提交压缩在一起,而不修改前后的提交。 我有: A -- B -- C -- D -- E -- F -- G | | m
这个问题在这里已经有了答案: How do I squash two non-consecutive commits? (5 个答案) 关闭 9 年前。 我在 master 分支上有一些非连续的提交
假设我们有一个名为 feature-branch 的功能分支。该分支的开发人员分支获取他们的票,然后打开一个 PR 到 feature-brach。 如果发生以下情况: 开发人员A从feature-b
假设我将文件 A 添加为提交,然后决定删除文件 A。我没有使用 git --amend,而是创建另一个删除文件 A 的提交,我知道这是不好的做法。但是,如果我想使用 git merge --squas
我试图压制迁移。 不幸的是,有太多的循环依赖。 有没有办法重新开始迁移(尽管我的项目已经部署在生产环境中)而不是试图压缩迁移? 我不必担心一些不知名的开发人员使用我的项目,因为它是一个私有(priva
我有一个带有多个提交的开发分支。该分支应 merge 到主分支中。 我也希望主分支提交历史尽可能干净,所以我只想有一个 merge 条目。因此,我执行以下操作: git merge --squash
运行 git merge --squash 时,提交消息包含我正在压缩的所有提交的提交消息,太棒了。然而,由于某种原因,它实际上包含的不仅仅是我正在压缩的提交。 这是我的工作流程: 各种功能分支通常会
运行 git merge --squash 时,提交消息包含我正在压缩的所有提交的提交消息,太棒了。然而,由于某种原因,它实际上包含的不仅仅是我正在压缩的提交。 这是我的工作流程: 各种功能分支通常会
晚上好。我目前正在为项目创建数据库。 场景如下: 新玩家可以在获得已注册并被工作人员接受。 根据年龄和性别将球员分成不同的组别(混合,女子公开赛,男子公开赛) 每场比赛有两名球员,其中 3 分记录套。
我正在尝试使用英语规则模拟 Squash 比赛的计分。它们是: 只有发球者赢得比赛才能获得积分。 如果发球者赢得一场比赛,他们将获得一分并继续担任发球者。 如果接力赛获胜,他们将成为发球者,但不会获得
我是一名优秀的程序员,十分优秀!