Gambar Docker cilik sing percaya marang awake dhewe *

[referensi dongeng anak-anak Amerika "The Little Engine That Could" - kira-kira. jalur]*

Gambar Docker cilik sing percaya marang awake dhewe *

Cara nggawe gambar Docker cilik kanthi otomatis kanggo kabutuhan sampeyan

Obsesi sing ora biasa

Kanggo sawetara sasi kepungkur, aku wis kepengin banget karo carane cilik gambar Docker bisa lan isih duwe aplikasi mlaku?

Aku ngerti, ide kasebut aneh.

Sadurunge nerangake rincian lan teknis, aku pengin nerangake kenapa masalah iki ngganggu aku, lan kepiye sampeyan.

Apa 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 kauntungan cilik liyane - gambar diundhuh luwih cepet, nanging, miturut pendapatku, iki ora penting.

Wigati dimangerteni: Yen sampeyan prihatin babagan ukuran, Alpine katon cilik lan mesthi cocog karo sampeyan.

Gambar distroless

Proyek Distroless nawakake pilihan saka gambar "distroless" dhasar, padha ora ngemot Managers paket, cangkang lan keperluan liyane sing digunakake kanggo ndeleng ing baris printah. Akibaté, gunakake 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 mbangun 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

Asil punika gambar ukuran 130MB. Ora ala banget! Kanggo mbandhingake: gambar Python standar bobote 929MB, lan sing "luwih tipis" (3,7-slim) - 179MB, gambar alpine (3,7-alpine) yaiku 98,6MB, dene gambar distroless dhasar sing digunakake ing conto yaiku 50,9MB.

Iku adil kanggo nuduhake 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 ukuran kabeh gambar basa Python ana beda-beda.

Nalika nulis, Google distroless ora ndhukung akeh gambar: Java lan Python isih ana ing tahap eksperimen, lan Python mung ana kanggo 2,7 lan 3,5.

Gambar cilik

Bali menyang obsesi karo 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 akèh karya (lan jujur, reinventing setir iku nyenengake lan pendidikan). Aku pengin nyederhanakake nggawe gambar sing luwih cilik: 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 ngeruk

Gagasan gambar ngeruk yaiku sampeyan bisa nyalin dependensi saka mesin inang menyang lan digunakake ing Dockerfile (iki kaya nyalin menyang apt lan nginstal saka ngeruk), utawa mengko nalika gambar Docker diwujudake. Iki ngidini sampeyan ngontrol isi wadhah Docker kanthi lengkap, lan kanthi mangkono ngontrol ukuran gambar.

Saiki kita kudu ngumpulake dependensi kasebut. Piranti sing ana kaya apt ngijini sampeyan kanggo download paket, nanging padha disambungake menyang mesin saiki lan, sawise kabeh, ora ndhukung Windows utawa MacOS.

Dadi aku miwiti nggawe alat dhewe sing bakal nggawe gambar dhasar kanthi ukuran paling cilik lan uga mbukak aplikasi apa wae. Aku nggunakake paket Ubuntu / Debian, nggawe pilihan (njupuk paket langsung saka repositori) lan nemokake dependensi kanthi rekursif. Program kasebut mesthine kanthi otomatis ndownload versi stabil paling anyar saka paket kasebut, kanthi minimalake risiko keamanan.

Aku jenenge alat kasebut fetchy, amarga dheweke ... nemokake lan nggawa ... apa sing dibutuhake [saka Inggris "njupuk", "nggawa" - kira-kira. jalur]. Alat bisa 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 python. Sampeyan bisa uga dijaluk sistem operasi target lan codename amarga fetchy saiki mung nggunakake paket adhedhasar Debian lan 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 nggunakake printah fetchy dockerize python3.5 bobot mung 35MB (Aku luwih saka manawa ing mangsa bisa digawe malah luwih entheng). Pranyata metu sing kita ngatur kanggo cukur brengos mati liyane 15 WW saka gambar distroless.

Sampeyan bisa ndeleng kabeh gambar sing diklumpukake nganti saiki kene.

Proyek - kene.

Yen sampeyan ora duwe fitur, mung nggawe panjalukan - Aku bakal seneng nulungi :) Malah luwih, aku lagi nggarap integrasi manajer paket liyane menyang fetchy, supaya ora perlu mbangun multi-tataran.

Source: www.habr.com

Add a comment