.Build-deps cho apk add lệnh --virtual là gì?


139

Điều gì .build-depstrong lệnh sau đây? Tôi không thể tìm thấy một lời giải thích trong các tài liệu của Alpine. Đây có phải là một tập tin được xác định trước? Được xem điều này được tham chiếu trong nhiều Dockerfiles.

RUN apk add --no-cache --virtual .build-deps \
gcc \
freetype-dev \
musl-dev

RUN pip install --no-cache-dir <packages_that_require_gcc...> \

RUN apk del .build-deps

34
Lưu ý, có del trong một lệnh RUN riêng sẽ không làm giảm kích thước hình ảnh, vì việc xóa được chạy trong một lớp mới trong hệ thống tập tin.
scipilot

Câu trả lời:


234

Nếu bạn thấy tài liệu

  -t, --virtual NAME    Instead of adding all the packages to 'world', create a new 
                        virtual package with the listed dependencies and add that 
                        to 'world'; the actions of the command are easily reverted 
                        by deleting the virtual package

Điều đó có nghĩa là khi bạn cài đặt các gói, các gói đó không được thêm vào các gói toàn cầu. Và sự thay đổi này có thể dễ dàng trở lại. Vì vậy, nếu tôi cần gcc để biên dịch một chương trình, nhưng một khi chương trình được biên dịch, tôi không cần gcc nữa.

Tôi có thể cài đặt gcc và các gói cần thiết khác trong một gói ảo và tất cả các phụ thuộc của nó và mọi thứ có thể được loại bỏ tên gói ảo này. Dưới đây là một ví dụ sử dụng

apk add --virtual mypacks gcc vim
apk del mypacks

Lệnh tiếp theo sẽ xóa tất cả 18 gói được cài đặt bằng lệnh đầu tiên.


1
Cũng đáng đề cập rằng điều quan trọng là sử dụng tên duy nhất cho gói ảo, không tồn tại trong kho lưu trữ được cấu hình hiện tại, nếu không cài đặt gói thành công nhưng không cài đặt những gì bạn cần.
bazeusz

1
Lưu ý: bạn phải thực thi nó trong một lệnh RUN, nếu không nó sẽ bị xóa khỏi lớp hình ảnh Docker trước đó stackoverflow.com/a/49714913/1577357
Zulhilmi Zainudin
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.