[referensi dongeng anak-anak Amerika "The Little Engine That Could" - trans. cathetan]*

Cara nggawe gambar docker cilik kanthi otomatis kanggo kabutuhan sampeyan
Obsesi sing ora biasa
Sajrone sawetara wulan kepungkur, aku kepengin banget karo ide iki: sepira cilik gambar Docker lan isih bisa nggawe aplikasi kasebut?
Aku ngerti, ide kasebut aneh.
Sadurunge nerangake rincian lan teknis, aku pengin njlentrehake kenapa masalah iki saya kecanthol lan kepiye pengaruhe sampeyan.
Kenapa Ukuran Penting
Kanthi nyuda isi gambar Docker, kita nyuda dhaptar kerentanan. Kajaba iku, kita nggawe gambar luwih resik, amarga mung ngemot apa sing dibutuhake kanggo mbukak aplikasi.
Ana siji liyane kauntungan cilik - gambar download sethitik luwih cepet, nanging ing mratelakake panemume iki ora dadi penting.
Wigati dimangerteni: Yen sampeyan prihatin babagan ukuran, gambar Alpine dhewe cilik lan bakal cocog karo sampeyan.
Gambar distroless
nawakake pilihan saka gambar dhasar "distroless", padha ora ngemot Managers paket, cangkang lan keperluan liyane sing digunakake kanggo ndeleng ing baris printah. AkibatΓ©, nggunakake manajer paket kaya pip ΠΈ apt ora bakal bisa:
FROM gcr.io/distroless/python3
RUN pip3 install numpy
Dockerfile nggunakake gambar Python 3 distroless
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM gcr.io/distroless/python3
---> 556d570d5c53
Step 2/2 : RUN pip3 install numpy
---> Running in dbfe5623f125
/bin/sh: 1: pip3: not found
Pip ora ana ing gambar kasebut
Biasane, masalah iki ditanggulangi kanthi perakitan multi-tahap:
FROM python:3 as builder
RUN pip3 install numpy
FROM gcr.io/distroless/python3
COPY --from=builder /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.5/
Multi-tataran perakitan
Gambar sing diasilake ukurane 130MB. Ora ala banget! Kanggo mbandhingake: gambar Python standar bobote 929MB, lan "slimmed" (3,7-slim) β 179MB, gambar alpine (3,7-alpine) β 98,6MB, dene gambar distroless dhasar sing digunakake ing conto yaiku 50,9MB.
Bisa diterangake kanthi bener yen ing conto sadurunge kita nyalin kabeh direktori /usr/local/lib/python3.7/site-packages, sing bisa ngemot dependensi sing ora kita butuhake. Senajan iku cetha sing prabΓ©dan ing ukuran kabeh gambar basa Python ana fluctuates.
Nalika nulis, Google distroless ora ndhukung akeh gambar: Java lan Python isih eksperimen, lan Python mung ana kanggo 2,7 lan 3,5.
Gambar cilik
Ayo bali menyang obsesi kanggo nggawe gambar cilik.
UmumΓ©, aku pengin ndeleng carane gambar distroless dibangun. Proyek distroless nggunakake alat mbangun Google bazel. Nanging, nginstal Bazel lan nulis gambar dhewe njupuk sawetara karya (lan jujur, reinventing setir iku nyenengake lan pendidikan). Aku pengin nyederhanakake nggawe gambar sing dikurangi: tumindak nggawe gambar kudu gampang banget, dangkal. Supaya ora ana file konfigurasi kanggo sampeyan, mung siji baris ing console: ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ <ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅>.
Dadi, yen sampeyan pengin nggawe gambar sampeyan dhewe, mula ngerti: ana gambar docker sing unik, scratch. Scratch minangka gambar "kosong", ora ana file, sanajan bobote minangka standar - wow! - 77 bita.
FROM scratch
Gambar goresan
Gagasan ing mburi gambar ngeruk yaiku sampeyan bisa nyalin dependensi saka mesin host menyang lan digunakake ing Dockerfile (kayata nyalin menyang apt lan nginstal saka ngeruk), utawa mengko, nalika gambar Docker diwujudake. Iki ngidini sampeyan duwe kontrol lengkap babagan isi wadhah Docker, lan kanthi mangkono ngontrol ukuran gambar.
Saiki kita kudu ngumpulake dependensi kasebut. Piranti sing ana kaya apt ngidini sampeyan ndownload paket, nanging paket kasebut kaiket karo mesin saiki lan, pungkasane, ora ndhukung Windows utawa MacOS.
Dadi aku mutusake kanggo nggawe alat dhewe sing bakal kanthi otomatis nggawe gambar dhasar kanthi ukuran paling cilik lan bisa mbukak aplikasi apa wae. Aku nggunakake paket Ubuntu/Debian, nindakake pilihan (njupuk paket langsung saka repositori) lan nemokake dependensi kanthi rekursif. Program kasebut mesthine bakal kanthi otomatis ndownload versi stabil paling anyar saka paket kasebut, saengga nyuda risiko keamanan.
Aku menehi jeneng alat kasebut fetchy, amarga dheweke ... nemokake lan nggawa ... apa sing dibutuhake [saka Inggris "njupuk", "kanggo nggawa" - transl. cathetan]. Alat kasebut bisa digunakake liwat antarmuka baris printah, nanging ing wektu sing padha nawakake API.
Kanggo ngumpulake gambar nggunakake fetchy (ayo njupuk gambar Python wektu iki), sampeyan mung kudu nggunakake CLI kaya iki: fetchy dockerize pythonSampeyan bisa uga dijaluk sistem operasi target lan jeneng kode amarga fetchy saiki mung nggunakake paket adhedhasar Debian ΠΈ Ubuntu.
Saiki sampeyan bisa milih dependensi sing ora dibutuhake (ing konteks kita) lan ora kalebu. Contone, Python gumantung ing perl, sanajan kerjane apik tanpa Perl diinstal.
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ
gambar Python digawe karo printah fetchy dockerize python3.5 bobote mung 35MB (Aku luwih yakin yen ing mangsa ngarep bisa luwih entheng). Pranyata kita bisa "nyukur" liyane 15MB saka gambar distroless.
Sampeyan bisa ndeleng kabeh gambar sing diklumpukake nganti saiki .
Proyek - .
Yen sampeyan ora duwe fitur, mung nggawe panjalukan - Aku bakal seneng nulungi :) Menapa malih, aku saiki lagi nggarap manajer paket liyane menyang fetchy, supaya kebutuhan kanggo mbangun multi-tataran bakal ilang.
Source: www.habr.com
