Docker File vs Docker Compose:有什么区别?


原文地址:Docker File vs Docker Compose:有什么区别?

Dockerfile是用于创建容器映像的对象,而Compose文件是用于将该映像的实例部署为容器的对象。本篇文章分享了Docker File和Docker compose的区别,以便您正确理解Docker Compose和Dockerfile之间的区别。

我已经看到很多人对Dockerfile和Compose文件感到困惑。这主要是因为两者在某种程度上都用于修改Docker映像,尽管这在技术上并不正确。

什么是Dockerfile?

我喜欢将Dockerfile称为容器映像的前身。您从Dockerfile构建映像。一个典型的Dockerfile包含特殊构建指令,命令,如RUNADDCOPYENTRYPOINT,等。

请看下面的例子:

FROM alpine:latest

RUN apk add --no-cache fortune

ENTRYPOINT ["fortune"]

每行以构建组件的指令开头。这些说明不一定必须用大写字母书写。以下内容与上一个一样有效。

from alpine:latest

run apk add --no-cache fortune

entrypoint ["fortune"]

现在,您可以从该Dockerfile构建容器映像(或Docker映像)。映像只是运行中的容器的模板,由多个只读层组成。由于这不是关于容器图像的文章,因此,我将避免过多地解释该主题。

要使用Docker CLI从此Dockerfile构建映像,请运行以下命令

docker build -t fortune:alpine .

这将建立一个标记为的图像fortune:alpine。我不会从该图像创建容器,这将在下一节中介绍。

什么是撰写文件?

组合文件在两种类型的部署中使用:在非群集部署中,使用docker-compose和。在群集部署中,使用docker swarm

为了区分这两种类型,我将负责集群部署的撰写文件作为堆栈文件进行处理。稍后我将讨论堆栈文件。

撰写文件是名为的工具的一部分docker-compose。它是docker守护程序服务器的客户端应用程序,有点像dockerCLI客户端,但是不必run每次都键入整个命令,而是docker-compose可以一遍又一遍地重复使用相同的YAML文件,并以相同的方式部署相同的容器像您第一次一样进行配置。

它更具可读性,更易于维护,更直观。单个撰写文件可以包含多个容器部署配置。

编写文件支持将成为默认Docker客户端的一部分,该默认Docker客户端以Go语言编写,作为命令行参数“ docker compose”。请注意那里缺少连字符。它仍处于实验阶段,因此在使用Python版本的生产环境中,即仍建议使用docker-compose。

让我们获取上一个图像,并使用compose文件部署该图像的实例。

version: "3.3"

services:
    fortune:
        image: "fortune:alpine"

将文件另存为docker-compose.yml。现在在同一目录中运行以下命令

docker-compose up

你不必须将文件保存为docker-compose.yml,只要你喜欢,你可以保存它,但如果它不是docker-compose.yml或者docker-compose.yaml,请确保您使用的-f [FILENAME]选项。

docker-compose -f docker-compose.yml up

等待,看看会发生什么。

Docker File vs Docker Compose:有什么区别?

什么是堆栈文件?

堆栈文件与具有相似语法和大多数内部选项的撰写文件相同,但有一些例外。堆栈文件是用来在部署服务的栈簇。

您可以直接将以前的撰写文件重新用作堆栈文件。

首先,初始化集群。

docker swarm init

然后运行类似以下的命令

docker stack deploy -c docker-compose.yml fortune

如果这样部署,则需要使用查看服务日志,以检查输出docker service logs ...

包起来

Dockerfile和Compose文件具有不同的用途。如果我可以建立时间轴,它看起来像这样

Dockerfile -> Docker Image -> Compose File -> Running Containers

初学者对这两个文件感到困惑还有另一个原因。可以通过Compose文件指向Dockerfile,然后可以使用它docker-compose来构建映像。

例如,您可以重写以前的撰写文件,以便

version: "3.3"

services:
    fortune:
        build:
            context: '.'
            dockerfile: "./Dockerfile"
        image: "fortune:alpine"

现在,您可以运行docker-compose build以构建映像。或者,您也可以运行docker-compose up --build以一次构建并运行该容器。

这里的Dockerfile是通过compose文件传递的,从第一眼看,它似乎是负责构建映像的compose文件,但事实并非如此。

我希望本文能清除Dockerfile和Compose文件之间的区别。如果您有任何疑问,请在下面的评论部分中告诉我。

评论

登录后评论

服务器优惠活动

Top