Saya punya Dockerfile
untuk membangun gambar Docker yang didasarkan pada Alpine Linux. Sekarang saya perlu menginstal paket sebagai bagian dari ini Dockerfile
.
Saat ini saya punya:
RUN apk update && \
apk upgrade && \
apk add git
Tampaknya ini adalah ide yang buruk, karena hasilnya adalah non-deterministik. Sebaliknya, itu tergantung pada titik di mana saya membangun gambar, versi apa git
sedang diinstal.
Apa cara yang benar untuk melakukan ini?
Saya kira saya harus memberi tahu updated
, upgrade
dan add
versi mana yang digunakan, tetapi bagaimana saya melakukan ini?
Saya sudah melihatnya apk
mendukung menyematkan repositori, tetapi bukan itu yang saya inginkan (setidaknya saya pikir begitu), karena saya tidak ingin menyematkan repositori, tetapi sebuah paket.
Dengan kata lain: Jika git
dapat diinstal melalui npm
, Saya bisa menjalankan:
npm install [email protected]
(atau versi apa pun yang saya ingin miliki). Apa yang setara dengan ini untuk Alpine Linux?
sumber
apk add ansible~=2.4.1
berarti>=2.4.1 <2.5.0
. Periksa jubianchi.github.io/semver-check untuk menguji rentang Anda sendiri.Saat ini, tidak ada cara untuk menginstal versi yang lebih lama dari paket dari repositori resmi di Alpine Linux. Hal terbaik yang dapat Anda capai adalah menggunakan repositori dari rilis sebelumnya:
sumber
Karena saya menggunakan
testing
repo. Saya akhirnya membuat salinan saya sendiri. Tangga:Buka detail paket. Ex:
https://pkgs.alpinelinux.org/package/edge/testing/armhf/watchman
Klik komit, klik tautan file APKBUILD dan "Log" pada menu untuk mendapatkan log komit file APKBUILD. Kemudian pilih komit untuk file APKBUILD Anda dan unduh. Ex:
https://git.alpinelinux.org/cgit/aports/tree/testing/watchman/APKBUILD?id=63f5e7d295659a855709901ce22a3e5f40fce455
Instal alat pembuatan:
Anda tidak perlu
root
pengguna jadi buatpackager
pengguna dengan kata sandi:Kemudian bangun sebagai
packager
dalam direktori yang sama dengan file APKBUILD:Anda mungkin perlu mencari tahu kesalahan dan menginstal dependensi. Dalam contoh saya, saya perlu melakukan ini pada gambar Docker yang ada sebagai
root
:Setelah berhasil membangun sebagai
packager
, instal sebagairoot
:Tidak yakin cara menghapus
--allow-untrusted
sebagian, tetapi langkah-langkahnya berhasil untuk saya.sumber