Docker镜像仅包含软件而不包含操作系统。

3
我有一个在RHEL 7服务器上运行的生产环境。我想使用Docker进行部署。 我想将所有软件和应用程序打包到一个Docker映像中,而不需要基础操作系统。因为我不想在RHEL之上添加额外的层。同时,我找不到RHEL的官方基础映像。这是否可能?
我看到一些旧帖子提到了“FROM scratch”,但看起来在最新版本的Docker(1.12.5)中不起作用。
如果这是不可能的,对此有任何建议吗?

1
你是否试图将环境中的所有应用程序打包到单个容器中?在Docker中,这通常是不好的做法,因为他们建议每个容器只运行一个服务。 - zglin
1
你可以将整个应用程序编译为一个自包含的可执行文件,不需要任何依赖项 -- 或者 -- 按照 Docker 的意图使用基本操作系统。 - user2105103
我想将我的应用程序(目前只有一个应用程序)与操作系统和其他依赖项分离开来。我的问题是,我不想让我的基础镜像具有“FROM:RHEL”的标识,以避免在主机操作系统之上引入额外的层级。 - user2777473
你可以始终使用一些超级简约的基础镜像,例如alpine。当Docker启动容器时,它只会启动一个进程。如果你的应用程序是Java的话,那么它将启动JVM。在镜像中需要提供的是带有所有外部库的JVM。因此,仅在构建过程中(已知的包存储库或版本)使用Ubuntu或RHEL作为基础镜像才有意义,当应用程序启动时,它将仅使用所需的库并忽略镜像的其余部分。 - odk
1个回答

1

Docker旨在抽象化操作系统的依赖关系 - 这就是它被构建的目的。除此之外,它还封装了运行时、内存等内容,它特别用作chroot的极佳变体(可以说是超级强化版的chroot)。

看起来你既不想要运行时分离,也不想要操作系统层面的分离(依赖关系) - 因此对于你来说,Docker完全没有意义。

使用Docker部署并不比使用其他工具更“简单”或更简便。你可以使用Capistrano或者可能类似于https://www.habitat.sh/这样的工具,它实际上不需要将软件打包到Docker容器中才能“可部署”,它也适用于裸机,并且使用自己的打包格式。因此,你拥有了一个最先进的部署解决方案,并且使用Habitat,你甚至可以后续升级使用Docker容器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接