【发布时间】:2015-10-17 16:24:08
【问题描述】:
简单回顾一下,docker 是一种为特定 Web 服务、运行环境、虚拟机编写代码或配置文件更改的方式,所有这些都来自 linux 终端/文本文件的舒适范围。 Docker 镜像是代码层的保存点,这些代码层由 dockerfile 构成,或者可以从需要基本镜像才能创建的容器中创建。 Dockerfile 可作为一种自动化构建过程的方式,通过运行所有需要的命令和操作来生成任何新容器并将它们滚动到一个文件中,从而自动生成映像。
现在这很好,但我想更进一步。构建镜像,尤其是那些有依赖关系的镜像很麻烦,因为 1,你必须依赖默认操作系统镜像中不存在的命令,或者 2,有很多其他不需要的无用命令。
现在在我的脑海中,我觉得这是可能的,但我还不能建立联系。 我的愿望是让 dockerfile 从头开始构建自己(字面意思是从头开始的图像)并根据自己构建自己。它是复制任何所需的依赖项,例如 rpm 或其他东西,安装它,找到它的启动命令,并将成功创建和运行映像所需的所有依赖项传递回 docker 文件。 在编程意义上,
FROM scratch
COPY package.rpm
RUN *desired cmds*
运行错误被反馈到一个文件中。 file 在当前操作系统中搜索所需的依赖项并将它们返回给 RUN cmd。
CMD *service start up*
至于该 CMD,我们将运行该服务,并获取其状态并将其过滤回其启动命令返回 CMD 部分。
这里的问题是我不相信我可以使用 docker 来达到这些目的。要对某物进行 docker 构建,保留其错误并将其再次过滤回构建中,这似乎具有挑战性。我希望 docker 可以配备此功能,因为我执行此类任务的唯一机会似乎是通过对可移植性因素造成严重破坏的脚本。
有什么想法吗?
【问题讨论】:
-
从某种意义上说,我想自动化 dockerfiles 的自动化构建。
-
我知道我能做什么,但需要一些准备工作。首先,我可能必须对要构建映像的机器进行最小安装。这意味着仅将终端放在特定的 VM 上。使用那个最小的安装,我可以通过删除所有不需要的命令来扭转这个过程,但我仍然需要筛选包以找出它需要什么......我被告知它更容易建立而不是摧毁,但现在我不太确定。我知道在 dockerfile 中我可以运行特定的命令,但是我如何知道整个服务需要哪些命令?
标签: linux docker dockerfile