【问题标题】:Docker confusion码头工人混乱
【发布时间】:2016-04-02 20:33:44
【问题描述】:

我对 docker 非常感兴趣,我也读过它,但我对容器有点困惑。例如,当我们从 docker hub 拉取官方的 nginx 时,是只有应用程序还是 nginx 自带操作系统?在我看来,所有容器都带有操作系统,因为使用 docker exec -it app-name bash 我可以输入并进行更新或安装包。这部分让我感到困惑,因为我认为它只是应用程序,没有别的。

谢谢你, sfm1977

【问题讨论】:

    标签: docker containers


    【解决方案1】:

    取决于。大多数软件需要操作系统的某些部分才能运行(可以是一些库或实用程序);在这些情况下,使用“基本”操作系统(DebianAlpine 用于官方图像),以便应用程序可以运行。虽然您可以docker exec 进入这样的容器并启动 bash/shell 会话,但这只能用于调试;一般来说,容器 (nginx) 应该被视为 application nginx,而不是“安装了 nginx 的虚拟机”。

    某些软件是静态链接的,不需要安装额外的东西。例如,hello-worldtraefik 图像使用操作系统作为基础,并且只包含一个二进制文件,没有其他内容。

    【讨论】:

    • 好吧,如果我用nginx做一个镜像,基于Ubuntu(FROM),和nginx官方镜像有什么区别?资源是否被消耗?基于操作系统的nginx、apache、mysql等应用更容易镜像。
    • 在Docker的官方文档中,几乎所有的Dockerizing示例都是以Ubuntu os Centos OS为基础......
    • 该文档是为了说明如何“Dockerize”一个传统的应用程序;我们使用 Ubuntu 或 Debian 作为基础镜像来说明这一点。如果您想在 Docker 中使用应用程序,您主要关心的应该是应用程序本身,并且只将“基础”映像视为运行该软件的“要求”。大多数官方镜像使用 Debian 或 Alpine 作为基础(参见官方 nginx 镜像;hub.docker.com/_/nginx)。小镜像使用Alpine版本,如果你打算扩展官方镜像,使用“Debian”版本,并且有某些Alpine不提供的需求
    • 所以基本上;如果你需要 nginx,请使用官方的 nginx 镜像,不要担心用于创建它的基础镜像;你感兴趣的是 nginx,基础镜像只是一个“实现细节”
    【解决方案2】:

    这取决于您所说的“操作系统”。你的意思是kernel spaceuser space - 答案是否定的。容器只改变用户空间。

    Docker 像 chroot 或 lxc 一样工作,它使用来自主机的单个 Linux 内核和容器中的二进制文件/库/等来运行,简而言之,容器是单台机器上的隔离命名空间。
    所以,如果容器的话,“OS”永远不会改变,但"environmnet" 会改变(libc,shell,所有这些东西)。
    另外,请查看这篇关于 cgroups 的 wiki 文章。
    PS:当然,当你不在 Linux 上时,你需要在 Linux 上安装 VM 才能使用 Docker。但这是另一个问题。

    【讨论】:

    • 好吧,如果我用nginx做镜像,基于Ubuntu(FROM),和nginx官方镜像有什么区别?资源是否被消耗?基于操作系统的nginx、apache、mysql等应用更容易镜像。
    • 在Docker的官方文档中,几乎所有的Dockerizing示例都是以Ubuntu os Centos OS为基础......
    • @SérgioMarques 在“FROM”的情况下,“OS”表示 Ubuntu 映像(包管理器、语言版本等)中使用的 environment。因此,差异将在于维护者选择的基本图像。我建议使用任何官方图像,因为它会更稳定和安全(错误/CVE 修复、更新等)。但是如果你想使用“nginx 自己的”镜像 - 继续,你也可以在 nginx 更新时更新这个镜像并基于它重新创建容器。
    猜你喜欢
    • 2017-02-01
    • 2016-10-04
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多