【问题标题】:Docker image just contain software without OSDocker 镜像只包含没有操作系统的软件
【发布时间】:2017-01-10 16:32:57
【问题描述】:

我有一个在 RHEL 7 服务器上运行的 PROD 环境。我想使用 docker 进行部署。我想将所有软件和应用程序打包在一个 Docker 映像中,而不需要基本操作系统。因为我不想在 RHEL 之上添加额外的层。另外,我找不到 RHEL 的官方基础镜像。那可能吗?

我看到一些关于“从头开始”的旧帖子,但看起来它在最新版本的 Docker 1.12.5 中不起作用。

如果这是不可能的,有什么建议吗?

【问题讨论】:

  • 您是否尝试将环境中的所有应用程序打包到一个容器中?这在 docker 中通常是不好的做法,因为他们建议在每个容器中使用一个服务。
  • 要么将整个应用程序编译成零依赖的自包含可执行文件,要么按照预期将 docker 与基本操作系统一起使用。
  • 我想将我的应用程序(目前只有一个应用程序)与操作系统和其他依赖项分开。我的问题是我不想让我的基础映像具有“FROM:RHEL”来在我的主机操作系统之上引入一个附加层。
  • 你总是可以使用一些超级最小的东西作为基础镜像(例如 alpine)。当 docker 启动一个容器时,它只会启动一个进程。如果您的应用程序使用 Java,那么它将启动 JVM。您需要在图像中提供的是 JVM 及其所需的所有外部库。因此,使用 Ubuntu 或 RHEL 作为基础只对构建过程(已知的 pkg 存储库或版本)有意义,当应用程序启动时,它将只使用它需要的库并忽略其余的图像。

标签: docker dockerfile rhel


【解决方案1】:

Docker 还旨在抽象操作系统依赖项——这就是它的构建目的。除了它还封装了运行时、内存和事物之外,它还专门用作 chroot 的一个极好的变体(比如说 chroot 在超级类固醇上)。

您似乎既不想要运行时分离也不想要操作系统层分离(依赖项) - 因此 docker 对您来说绝对没有意义。

使用 docker 进行部署并不像使用其他工具那样“简单”或更简单。您可以使用 capistrano 或类似 https://www.habitat.sh/ 的东西,它实际上不需要将软件捆绑在 docker 容器中即可“部署”,它也适用于准系统并使用自己的打包格式。因此,您拥有最先进的部署解决方案,并且有了栖息地,您以后甚至可以使用 docker-containers 进行升级。

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 2016-01-13
    • 2018-03-24
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多