Gambar Docker leutik anu percanten ka dirina sorangan *

[rujukan kana dongéng barudak Amérika "The Little Engine That Could" - approx. jalur]*

Gambar Docker leutik anu percanten ka dirina sorangan *

Kumaha cara otomatis nyiptakeun gambar Docker leutik pikeun kabutuhan anjeun

Obsesi anu teu biasa

Salila sababaraha bulan kapengker, kuring obsessed kumaha leutikna gambar Docker tiasa sareng masih tiasa ngajalankeun aplikasi?

Kuring ngarti, idena aneh.

Sateuacan kuring lebet kana detil sareng téknis, kuring hoyong ngajelaskeun naha masalah ieu ngaganggu kuring pisan, sareng kumaha masalah anjeun.

Naha ukuran penting

Ku ngirangan eusi gambar Docker, kami ngirangan daptar kerentanan. Salaku tambahan, kami ngajantenkeun gambar langkung bersih, sabab ngan ukur ngandung naon anu diperyogikeun pikeun ngajalankeun aplikasi.

Aya hiji deui kaunggulan leutik - gambar diundeur saeutik gancang, tapi, dina pamanggih kuring, ieu teu jadi penting.

Punten perhatikeun: Upami anjeun prihatin ngeunaan ukuran, Alpine katingalina alit sareng sigana bakal cocog sareng anjeun.

Gambar distroless

Proyék Distroless nawarkeun pilihan dasar "distroless" gambar, aranjeunna henteu ngandung manajer pakét, cangkang jeung Utiliti séjén nu biasa ningali dina garis paréntah. Hasilna, make manajer pakét kawas pip и apt moal jalan:

FROM gcr.io/distroless/python3
RUN  pip3 install numpy

Dockerfile ngagunakeun Python 3 gambar 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 henteu dina gambar

Biasana masalah ieu direngsekeun ku ngawangun 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/

assembly multi-tahap

Hasilna nyaéta gambar ukuranana 130MB. Teu goréng teuing! Pikeun babandingan: gambar Python standar beuratna 929MB, sareng anu "leuwih tipis" (3,7-slim) - 179MB, gambar alpine (3,7-alpine) nyaéta 98,6MB, sedengkeun gambar distroless dasar anu dianggo dina conto nyaéta 50,9MB.

Éta adil pikeun nunjuk kaluar yén dina conto saméméhna urang nyalin hiji sakabéh diréktori /usr/local/lib/python3.7/site-packages, nu bisa ngandung kagumantungan nu urang teu butuh. Sanajan eta jelas yén bédana ukuran sadaya gambar dasar Python aya variasina.

Dina waktos nyerat, Google distroless henteu ngadukung seueur gambar: Java sareng Python masih dina tahap ékspérimén, sareng Python ngan ukur aya pikeun 2,7 sareng 3,5.

Gambar leutik

Deui ka obsesi kuring nyieun gambar leutik.

Sacara umum, kuring hoyong ningali kumaha gambar distroless diwangun. Proyék distroless ngagunakeun alat ngawangun Google bazel. Nanging, masang Bazel sareng nyerat gambar anjeun nyalira nyandak seueur padamelan (sareng jujur, nyiptakeun deui roda mangrupikeun hiburan sareng pendidikan). Abdi hoyong nyederhanakeun nyiptakeun gambar anu langkung alit: tindakan nyiptakeun gambar kedah saderhana pisan, banal. Janten teu aya file konfigurasi pikeun anjeun, ngan ukur hiji garis dina konsol: просто собрать образ для <приложение>.

Janten, upami anjeun hoyong nyiptakeun gambar anjeun nyalira, maka terang: aya gambar docker anu unik, scratch. Scratch mangrupikeun gambar "kosong", teu aya file di jerona, sanaos beuratna sacara standar - wow! - 77 bait.

FROM scratch

Gambar goresan

Gagasan gambar goresan nyaéta yén anjeun tiasa nyalin katergantungan tina mesin host kana éta sareng nganggo éta di jero Dockerfile (ieu sapertos nyalin kana. apt tur masang ti scratch), atanapi engké nalika gambar Docker ieu materialized. Ieu ngidinan Anjeun pikeun sakabéhna ngadalikeun eusi wadahna Docker, sahingga lengkep ngadalikeun ukuran gambar.

Ayeuna urang kedah kumaha waé ngumpulkeun kagumantungan ieu. Alat anu aya sapertos apt ngidinan Anjeun pikeun ngundeur bungkusan, tapi aranjeunna dihijikeun ka mesin ayeuna jeung, barina ogé, teu ngarojong Windows atawa MacOS.

Janten kuring badé ngawangun alat kuring sorangan anu bakal otomatis ngawangun gambar dasar tina ukuran pangleutikna sareng ogé ngajalankeun aplikasi naon waé. Kuring nganggo bungkusan Ubuntu / Debian, ngadamel pilihan (meunang bungkusan langsung tina repositori) sareng sacara rekursif mendakan katergantunganna. Program ieu sakuduna dituju sacara otomatis ngaunduh versi pakét anu stabil pangénggalna, ngaminimalkeun résiko kaamanan sabisa-bisa.

Kuring ngaranna alat fetchy, sabab anjeunna ... manggihan jeung mawa ... naon diperlukeun [ti basa Inggris "Nyandak", "mawa" - kira-kira. jalur]. Alatna dianggo ngaliwatan antarmuka garis paréntah, tapi dina waktos anu sami nawiskeun API.

Pikeun ngumpul gambar ngagunakeun fetchy (Hayu urang nyandak gambar Python waktos ieu), anjeun ngan ukur kedah nganggo CLI sapertos kieu: fetchy dockerize python. Anjeun bisa jadi dipenta pikeun sistem operasi target na codename sabab fetchy ayeuna ngan ngagunakeun pakét dumasar kana Debian sareng Ubuntu.

Ayeuna anjeun tiasa milih dependensi mana anu henteu diperyogikeun pisan (dina kontéks kami) sareng ngaluarkeunana. Contona, Python gumantung kana perl, sanajan gawéna rupa tanpa Perl dipasang.

Hasil

Gambar Python dijieun maké paréntah fetchy dockerize python3.5 beuratna ngan 35MB (Kuring leuwih ti yakin yén dina mangsa nu bakal datang bisa dijieun malah torek). Tétéla urang junun nyukur kaluar sejen 15 WW tina gambar distroless.

Anjeun tiasa ningali sadaya gambar anu dikumpulkeun dugi ka ayeuna di dieu.

Proyék - di dieu.

Mun anjeun leungit fitur, ngan nyieun pamundut a - Kuring bakal senang pikeun mantuan :) Komo deui, Kuring keur ayeuna dipake dina ngahijikeun manajer pakét séjén kana fetchy, ku kituna teu perlu pikeun multi-tahap ngawangun.

sumber: www.habr.com

Tambahkeun komentar