可以无限期地离开docker-组成运行的最小图像是什么?
What is the smallest image that can be used to leave docker-compose running indefinitely?
我的一个单元测试杀死了一个 运行 Docker 容器。为了单元测试工作,我需要用 docker-compose run
启动一个容器,这样它就有东西可以杀了。
可以与 docker-compose.yml 一起使用以实现此目的的最小和最简单的图像是什么?
请注意,Docker文件不是必需的。
您只需要一个 docker-compose 文件即可
version: '3.9'
services:
myservice:
image: alpine:latest
command: tail -f /dev/null
如果您喜欢其他内容,您或许可以找到 运行 的其他图像。 nginx:alpine
突然想到。这不需要命令,因此您可以在 docker-compose 文件中保存一行。
如果您正在寻找字面上最小的图像,并且它除了不退出之外不需要做任何事情,k8s.gcr.io/pause
应该接近。
此镜像是 Kubernetes 的一部分,您可以阅读 its source。 Makefile 将小型 C 程序编译成静态二进制文件,然后将其构建成 FROM scratch
映像。这意味着它甚至不会为 BusyBox 静态二进制文件花费兆字节,因此它不包含不必要的绒毛,如 shell、tail
、Alpine 的 apk
包管理器或其他任何东西完全没有。
~% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/pause 3.7 221177c6082a 3 weeks ago 711kB
busybox latest 2fb6fc2d97e1 3 weeks ago 1.24MB
alpine latest 76c8fb57b6fc 4 days ago 5.57MB
除了永远休眠之外,此图像所做的一件事是注意是否有任何子进程退出并为它们等待(2)。因为它期望进程 ID 为 1,所以这会清除所有重新成为 init 进程父级的孤立进程(委婉地说,“收割僵尸”)。 Kubernetes 使用它作为 multi-container pod 的根,其中 pods 共享各种命名空间;另请参阅 or Ian Lewis's The Almighty Pause Container(其中包括作为博客的一部分的整个 C 源代码 post)。
如果您在汇编中重写二进制文件,那么您可能会构建一个更小的映像,这样您就不需要标准样板文件来启动和停止 C 进程,但这可能不值得付出努力。
我的一个单元测试杀死了一个 运行 Docker 容器。为了单元测试工作,我需要用 docker-compose run
启动一个容器,这样它就有东西可以杀了。
可以与 docker-compose.yml 一起使用以实现此目的的最小和最简单的图像是什么?
请注意,Docker文件不是必需的。
您只需要一个 docker-compose 文件即可
version: '3.9'
services:
myservice:
image: alpine:latest
command: tail -f /dev/null
如果您喜欢其他内容,您或许可以找到 运行 的其他图像。 nginx:alpine
突然想到。这不需要命令,因此您可以在 docker-compose 文件中保存一行。
如果您正在寻找字面上最小的图像,并且它除了不退出之外不需要做任何事情,k8s.gcr.io/pause
应该接近。
此镜像是 Kubernetes 的一部分,您可以阅读 its source。 Makefile 将小型 C 程序编译成静态二进制文件,然后将其构建成 FROM scratch
映像。这意味着它甚至不会为 BusyBox 静态二进制文件花费兆字节,因此它不包含不必要的绒毛,如 shell、tail
、Alpine 的 apk
包管理器或其他任何东西完全没有。
~% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/pause 3.7 221177c6082a 3 weeks ago 711kB
busybox latest 2fb6fc2d97e1 3 weeks ago 1.24MB
alpine latest 76c8fb57b6fc 4 days ago 5.57MB
除了永远休眠之外,此图像所做的一件事是注意是否有任何子进程退出并为它们等待(2)。因为它期望进程 ID 为 1,所以这会清除所有重新成为 init 进程父级的孤立进程(委婉地说,“收割僵尸”)。 Kubernetes 使用它作为 multi-container pod 的根,其中 pods 共享各种命名空间;另请参阅
如果您在汇编中重写二进制文件,那么您可能会构建一个更小的映像,这样您就不需要标准样板文件来启动和停止 C 进程,但这可能不值得付出努力。