`docker-compose build`和`docker build`有什么区别?

Ben*_*ari 49 docker dockerfile docker-compose

docker-compose build和之间有什么区别docker build

假设在一个dockerized项目路径中有一个docker-compose.yml文件:

docker-compose build
Run Code Online (Sandbox Code Playgroud)

docker build
Run Code Online (Sandbox Code Playgroud)

hug*_*aka 63

docker-compose是docker CLI的包装器,以便获得时间并避免500个字符长的行(并且同时启动多个容器).它使用一个调用的文件docker-compose.yml来检索参数.

您可以在此处找到docker-compose文件格式的参考.

所以基本上docker-compose build会读取你的docker-compose.yml,查找包含该build:语句的所有服务并docker build为每个服务运行一个.

每个都build:可以指定一个Dockerfile上下文和args传递给docker.

以示例docker-compose.yml文件结束:

version: '3.2'

services:
  database:
    image: mariadb
    restart: always
    volumes:
      - ./.data/sql:/var/lib/mysql

  web:
    build:
      dockerfile: Dockerfile-alpine
      context: ./web
    ports:
      - 8099:80
    depends_on:
      - database 
Run Code Online (Sandbox Code Playgroud)

调用时docker-compose build,只有web目标需要构建图像.该docker build命令看起来像:

docker build -t web_myproject -f Dockerfile-alpine ./web
Run Code Online (Sandbox Code Playgroud)

  • “ web”来自容器名称。“ myproject”是您所在文件夹的名称。如果您处理两个都包含“ web”容器的项目,则可以避免冲突。 (4认同)
  • 标签“ web_myproject”来自哪里,或者仅仅是一个例子?使用docker-compose进行构建时,可以指定所有映像名称吗? (2认同)

Cor*_*lor 12

docker-compose build将在docker-compose.yml文件中构建服务.

https://docs.docker.com/compose/reference/build/

docker build 将构建Dockerfile定义的图像.

https://docs.docker.com/engine/reference/commandline/build/


shi*_*its 6

添加到第一个答案...

您可以在服务定义下提供图像名称和容器名称。

例如,对于下面 docker-compose 示例中名为“web”的服务,您可以明确给出图像名称和容器名称,这样 docker 就不必使用默认值。

否则 docker 将使用的图像名称将是文件夹(目录)和服务名称的串联。例如 myprojectdir_web

所以最好显式地放置在执行 docker build 命令时将生成的所需图像名称。

例如图像:mywebserviceImage container_name:my-webServiceImage-Container

示例 docker-compose.yml 文件:

version: '3.2'
services:
  web:
    build:
      dockerfile: Dockerfile-alpine
      context: ./web
    ports:
      - 8099:80
    image: mywebserviceImage
    container_name: my-webServiceImage-Container
    depends_on:
      - database
Run Code Online (Sandbox Code Playgroud)


Pas*_* H. 6

docker build关于和之间的区别,再多说几句docker-compose build。两者都可以选择使用现有图像作为图层缓存来构建图像。

不幸的是,到目前为止,在这个级别上,一个制作的图像与另一个作​​为图层缓存不兼容(ID 不兼容)。然而,docker-compose v1.25.0 (2019-11-18)引入了一个实验性功能COMPOSE_DOCKER_CLI_BUILD,以便docker-compose使用本机 docker 构建器(因此,由 制作的图像docker build可以用作 层的缓存docker-compose build


Bha*_*Raj 5

基本上,docker-compose是使用docker的更好方法,而不仅仅是docker命令。

如果这里的问题是docker-compose build命令是否将构建一个包含多个图像的zip类型的东西,否则将与通常的Dockerfile分别构建,那么这种想法是错误的。

Docker-compose构建将通过进入docker-compose.yml中的单个服务条目来构建单个映像。

使用docker images命令,我们还可以看到所有单独保存的图像。

真正的魔力在于docker-compose up。

这基本上将创建一个相互连接的容器网络,该网络可以使用类似于主机名的容器名称相互通信。