Apa itu .build-deps untuk apk tambahkan perintah --virtual?

139

Apa yang ada .build-depsdalam perintah berikut? Saya tidak dapat menemukan penjelasan di dokumen Alpine. Apakah ini file yang sudah ditentukan sebelumnya? Lihat ini direferensikan di banyak 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
gdbj
sumber
34
Catatan, memiliki del dalam perintah RUN yang terpisah tidak akan mengurangi ukuran gambar, karena penghapusan dijalankan di lapisan baru di sistem file.
scipilot

Jawaban:

234

Jika Anda melihat dokumentasinya

  -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

Apa artinya itu ketika Anda menginstal paket, paket-paket itu tidak ditambahkan ke paket global. Dan perubahan ini dapat dengan mudah dikembalikan. Jadi jika saya perlu gcc untuk mengkompilasi suatu program, tetapi begitu program dikompilasi, saya tidak perlu lagi gcc.

Saya dapat menginstal gcc, dan paket lain yang diperlukan dalam paket virtual dan semua dependensinya dan semuanya dapat dihapus nama paket virtual ini. Di bawah ini adalah contoh penggunaan

apk add --virtual mypacks gcc vim
apk del mypacks

Perintah selanjutnya akan menghapus semua 18 paket yang diinstal dengan perintah pertama.

Tarun Lalwani
sumber
1
Juga perlu disebutkan bahwa penting untuk menggunakan nama unik untuk paket virtual, tidak ada di repositori yang saat ini dikonfigurasi, jika tidak menginstal paket berhasil tetapi tidak menginstal apa yang Anda butuhkan.
bazeusz
1
Catatan: Anda harus menjalankannya dalam satu perintah RUN, jika tidak, itu tidak dapat dihapus dari layer gambar Docker sebelumnya stackoverflow.com/a/49714913/1577357
Zulhilmi Zainudin