Sự khác biệt giữa docker-compose build
và là docker build
gì?
Giả sử trong một đường dẫn dự án được làm dày đặc có một docker-compose.yml
tệp:
docker-compose build
Và
docker build
Sự khác biệt giữa docker-compose build
và là docker build
gì?
Giả sử trong một đường dẫn dự án được làm dày đặc có một docker-compose.yml
tệp:
docker-compose build
Và
docker build
Câu trả lời:
docker-compose
có 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 build
sẽ đọ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 build
cho 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.yml
tệ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ỉ web
mục tiêu sẽ cần một hình ảnh để được xây dựng. Các docker build
lệnh sẽ như thế nào:
docker build -t web_myproject -f Dockerfile-alpine ./web
web
đến từ tên vùng chứa. myproject
là 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 web
chứa.
docker-compose.yml
điều đã cung cấp ở trên, web
xuất phát từ tên dịch vụ.
docker-compose build
sẽ xây dựng các dịch vụ trong docker-compose.yml
tệp.
https://docs.docker.com/compose/reference/build/
docker build
sẽ xây dựng hình ảnh được xác định bởi Dockerfile.
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ủ.
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
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!
Vài lời bổ sung về sự khác biệt giữa docker build
và docker-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.
docker build
, tùy chọn là--cache-from <image>
docker-composer
, có một thẻ cache_from
trong build
phần.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-compose
sử dụng trình tạo docker gốc (do đó, hình ảnh được tạo bởi docker build
có thể được sử dụng làm bộ nhớ cache của các lớp docker-compose build
)