Sự khác biệt giữa `docker-comp build` và` docker build` là gì?


83

Sự khác biệt giữa docker-compose buildvà là docker buildgì?

Giả sử trong một đường dẫn dự án được làm dày đặc có một docker-compose.ymltệp:

docker-compose build

docker build

Câu trả lời:


106

docker-composecó thể được coi là một trình bao bọc xung quanh docker CLI (trên thực tế nó là một triển khai khác trong python như đã nói trong phần nhận xét ) để có được thời gian và tránh các dòng dài 500 ký tự (và cũng khởi động nhiều vùng chứa cùng một lúc). Nó sử dụng một tệp được gọi docker-compose.ymlđể lấy các tham số.

Bạn có thể tìm thấy tài liệu tham khảo cho định dạng tệp do docker-soạn tại đây .

Vì vậy, về cơ bản docker-compose buildsẽ đọc của bạn docker-compose.yml, tìm kiếm tất cả các dịch vụ có chứa build:câu lệnh và chạy một docker buildcho mỗi câu lệnh .

Mỗibuild: có thể chỉ định một Dockerfile, một ngữ cảnh và args để chuyển tới docker.

Để kết thúc với một docker-compose.ymltệp ví dụ :

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 

Khi gọi docker-compose build, chỉ webmục tiêu sẽ cần một hình ảnh để được xây dựng. Các docker buildlệnh sẽ như thế nào:

docker build -t web_myproject -f Dockerfile-alpine ./web

2
Thẻ "web_myproject" đến từ đâu hay nó chỉ là một ví dụ? Bạn có thể chỉ định tất cả các tên hình ảnh khi xây dựng bằng docker-Comp không?
eyalzba

5
webđến từ tên vùng chứa. myprojectlà tên của thư mục bạn đang ở. Điều này tránh xung đột nếu bạn làm việc trên hai dự án đều chứa một vùng webchứa.
hugoShaka


Dựa trên những docker-compose.ymlđiều đã cung cấp ở trên, webxuất phát từ tên dịch vụ.
eigenfield

1
Đây cũng là sự hiểu biết của tôi, nhưng có vẻ như có một số khác biệt nhỏ. Ví dụ: băm lớp tệp được tính hơi khác nhau giữa hai.
vidstige


9

Về cơ bản, docker-compile là một cách tốt hơn để sử dụng docker thay vì chỉ một lệnh docker.

Nếu câu hỏi đặt ra ở đây là nếu lệnh xây dựng docker-comp sẽ xây dựng một loại tệp zip chứa nhiều hình ảnh, nếu không thì sẽ được xây dựng riêng biệt với Dockerfile thông thường, thì suy nghĩ này đã sai.

Bản dựng Docker-comp sẽ xây dựng các hình ảnh riêng lẻ, bằng cách đi vào mục nhập dịch vụ riêng lẻ trong docker-compo.yml.

Với hình ảnh docker, lệnh, chúng ta có thể thấy tất cả các hình ảnh riêng lẻ đang được lưu.

Điều kỳ diệu thực sự là do docker-soạn lên.

Cái này về cơ bản sẽ tạo ra một mạng các vùng chứa được kết nối với nhau, có thể nói chuyện với nhau với tên của vùng chứa tương tự như tên máy chủ.


5

Thêm vào câu trả lời đầu tiên ...

Bạn có thể cung cấp tên hình ảnh và tên vùng chứa dưới định nghĩa dịch vụ.

ví dụ: đối với dịch vụ có tên là 'web' trong ví dụ về docker-compos bên dưới, bạn có thể cung cấp tên hình ảnh và tên vùng chứa một cách rõ ràng, do đó docker không phải sử dụng các giá trị mặc định.

Nếu không, tên hình ảnh mà docker sẽ sử dụng sẽ là sự ghép nối của thư mục (Thư mục) và tên dịch vụ. ví dụ: myprojectdir_web

Vì vậy, tốt hơn là đặt tên hình ảnh mong muốn một cách rõ ràng sẽ được tạo khi lệnh xây dựng docker được thực thi.

ví dụ: image: mywebserviceImage container_name: my-webServiceImage-Container

tập tin ví dụ docker-compos.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

Việc chỉ định subir là giá trị của build:buộc bạn phải có tên tệp chính xác Dockerfile. Ví dụ, trong build: ./web.So việc sử dụng context:là một điều tốt!
eigenfield

2

Vài lời bổ sung về sự khác biệt giữa docker builddocker-compose build. Cả hai đều có một tùy chọn để xây dựng hình ảnh bằng cách sử dụng hình ảnh hiện có làm bộ nhớ cache của các lớp.

Thật không may, cho đến nay, ở cấp độ này, hình ảnh được tạo bởi một cái không tương thích với cái kia dưới dạng bộ nhớ cache của các lớp ( Id không tương thích ). Tuy nhiên, docker-compose v1.25.0 (2019-11-18) , giới thiệu tính năng thử nghiệm COMPOSE_DOCKER_CLI_BUILD để docker-composesử dụng trình tạo docker gốc (do đó, hình ảnh được tạo bởi docker buildcó thể được sử dụng làm bộ nhớ cache của các lớp docker-compose build)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.