paint-brush
Docker suratlaryny optimizirlemek diňe bir we ýerine ýetirilen zat dältarapyndan@aleksandrov
Täze taryh

Docker suratlaryny optimizirlemek diňe bir we ýerine ýetirilen zat däl

tarapyndan Igor Alexandrov17m2025/01/30
Read on Terminal Reader

Örän uzyn; Okamak

Bu makala, adaty Dockerfile-iň her setirinden geçip, iň oňat tejribeleri we optimizasiýalary düşündirjek ýazgylaryň bir bölegidir. Birinji makala diňe surat ululygyny azaltmak optimizasiýasyna degip geçer.
featured image - Docker suratlaryny optimizirlemek diňe bir we ýerine ýetirilen zat däl
Igor Alexandrov HackerNoon profile picture
0-item


Bu makala, Rels default Dockerfile-iň her setirinden geçip, iň oňat tejribeleri we optimizasiýalary düşündirjek ýazgylaryň bir bölegidir.


Doker şekilleri, şekiliň ululygyny azaltmak, öndürijiligi optimizasiýa, howpsuzlyk we dowam etdirmek boýunça iň oňat tejribe we amaly aýratyn optimizasiýalary öz içine alýan, ýöne çäklendirilmedik dürli usullar bilen optimizirlenip bilner. Birinji makalada diňe surat ululygyny azaltmak optimizasiýasyna degip geçerin we olaryň näme üçin möhümdigini düşündirerin.

Näme üçin surat ölçegini optimizirlemeli?

Programma üpjünçiligini ösdürmegiň beýleki ähli işlerinde bolşy ýaly, her bir dörediji Docker-iň has çalt gurulmagyny islemeginiň sebäplerini sanap geçer. Meniň üçin iň möhüm sebäpleri sanap geçerin.

Has çalt gurulýar we ýerleşdirilýär

Kiçijik şekilleri gurmak has çalt, sebäbi has az faýl we gatlak işlenmeli. Bu, esasanam iteratiw ösüş sikllerinde işläp düzüjiniň öndürijiligini ýokarlandyrýar. Has kiçi suratlar, reýestre basmak we ýerleşdirilende ondan çekmek üçin az wagt alýar. Konteýnerler ýygy-ýygydan gurulýan we ýerleşdirilýän CI / CD turbageçirijilerinde bu aýratyn möhümdir.

Saklamak üçin çykdajylaryň azalmagy we toruň giňligi

Kiçijik suratlar konteýner registrlerinde, ýerli ösüş maşynlarynda we önümçilik serwerlerinde az saklanýar. Bu, esasanam uly göwrümli enjamlar üçin infrastruktura çykdajylaryny azaldar. Kiçijik suratlar, serwerleriň arasynda geçirilende has az geçirijilik giňligini ulanýar, esasanam ýerli ýa-da CI / CD turbageçirijilerinde şekilleri guranyňyzda we reýestre basanyňyzda möhümdir.


"2022-nji ýylda bulut üçin 3,2 million dollar sarp etdik ... Bulut çykyşymyzdan bäş ýylyň dowamynda serwer çykdajylaryny takmynan 7 million dollar tygşytlamaly." David Heinemeier Hansson - HEY World

Gowulandyrylan öndürijilik we howpsuzlyk

Kiçijik suratlar, konteýnerleşdirilen programmalaryň umumy işleýşini gowulandyrmak we ýüklemek üçin az çeşmeleri (meselem, CPU, RAM) talap edýär. Has çalt başlangyç wagtlary, hyzmatlaryňyzyň has çalt taýýardygyny aňladýar, bu ulalmak we ýokary elýeterlilik ulgamlary üçin möhümdir. alpine ýa-da debian-slim ýaly iň az esasy şekiller, öňünden gurlan paketleri az saklaýar, iberilmedik ýa-da gereksiz programma üpjünçiliginiň ulanylmagy howpuny peseldýär.


Aboveokarda agzalan ähli zatlardan başga-da, gereksiz faýllary we gurallary aýyrmak, meseleler anyklanylanda ünsüňi sowup, has oňat saklanmagyna we tehniki berginiň azalmagyna getirýär.

Docker şekillerini barlamak

Ululygyny goşmak bilen şekiliň dürli parametrlerini almak üçin “Docker Desktop” -a seredip bilersiňiz ýa-da terminalda docker images buýrugyny işledip bilersiňiz.


 ➜ docker images REPOSITORY TAG IMAGE ID CREATED SIZE kamal-dashboard latest 673737b771cd 2 days ago 619MB kamal-proxy latest 5f6cd8983746 6 weeks ago 115MB docs-server latest a810244e3d88 6 weeks ago 1.18GB busybox latest 63cd0d5fb10d 3 months ago 4.04MB postgres latest 6c9aa6ecd71d 3 months ago 456MB postgres 16.4 ced3ad69d60c 3 months ago 453MB


Suratyň ululygyny bilmek size doly surat bermeýär. Suratyň içindäki zatlary, näçe gatlagyny ýa-da her gatyň uludygyny bilmeýärsiňiz. Docker şekil gatlagy, Docker şekiliniň düzüm bölegi bolan diňe okalýan, üýtgewsiz faýl ulgamy gatlagydyr . Her gatlak, faýl goşmak, konfigurasiýalary üýtgetmek ýa-da programma üpjünçiligi gurmak ýaly şekiliň faýl ulgamyna girizilen üýtgeşmeleriň toplumyny aňladýar.


Docker şekilleri yzygiderli, gatlak boýunça gurulýar we her gatlak Dockerfile -de görkezmä laýyk gelýär. Suratyň gatlaklaryny almak üçin, docker history buýrugyny işledip bilersiňiz.


 ➜ docker history kamal-dashboard:latest IMAGE CREATED CREATED BY SIZE COMMENT 673737b771cd 4 days ago CMD ["./bin/thrust" "./bin/rails" "server"] 0B buildkit.dockerfile.v0 <missing> 4 days ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0 <missing> 4 days ago ENTRYPOINT ["/rails/bin/docker-entrypoint"] 0B buildkit.dockerfile.v0 <missing> 4 days ago USER 1000:1000 0B buildkit.dockerfile.v0 <missing> 4 days ago RUN /bin/sh -c groupadd --system --gid 1000 … 54MB buildkit.dockerfile.v0 <missing> 4 days ago COPY /rails /rails # buildkit 56.2MB buildkit.dockerfile.v0 <missing> 4 days ago COPY /usr/local/bundle /usr/local/bundle # b… 153MB buildkit.dockerfile.v0 <missing> 4 days ago ENV RAILS_ENV=production BUNDLE_DEPLOYMENT=1… 0B buildkit.dockerfile.v0 <missing> 4 days ago RUN /bin/sh -c apt-get update -qq && apt… 137MB buildkit.dockerfile.v0 <missing> 4 days ago WORKDIR /rails 0B buildkit.dockerfile.v0 <missing> 3 weeks ago CMD ["irb"] 0B buildkit.dockerfile.v0 <missing> 3 weeks ago RUN /bin/sh -c set -eux; mkdir "$GEM_HOME";… 0B buildkit.dockerfile.v0 <missing> 3 weeks ago ENV PATH=/usr/local/bundle/bin:/usr/local/sb… 0B buildkit.dockerfile.v0 <missing> 3 weeks ago ENV BUNDLE_SILENCE_ROOT_WARNING=1 BUNDLE_APP… 0B buildkit.dockerfile.v0 <missing> 3 weeks ago ENV GEM_HOME=/usr/local/bundle 0B buildkit.dockerfile.v0 <missing> 3 weeks ago RUN /bin/sh -c set -eux; savedAptMark="$(a… 78.1MB buildkit.dockerfile.v0 <missing> 3 weeks ago ENV RUBY_DOWNLOAD_SHA256=018d59ffb52be3c0a6d… 0B buildkit.dockerfile.v0 <missing> 3 weeks ago ENV RUBY_DOWNLOAD_URL=https://cache.ruby-lan… 0B buildkit.dockerfile.v0 <missing> 3 weeks ago ENV RUBY_VERSION=3.4.1 0B buildkit.dockerfile.v0 <missing> 3 weeks ago ENV LANG=C.UTF-8 0B buildkit.dockerfile.v0 <missing> 3 weeks ago RUN /bin/sh -c set -eux; mkdir -p /usr/loca… 19B buildkit.dockerfile.v0 <missing> 3 weeks ago RUN /bin/sh -c set -eux; apt-get update; a… 43.9MB buildkit.dockerfile.v0 <missing> 3 weeks ago # debian.sh --arch 'arm64' out/ 'bookworm' '… 97.2MB debuerreotype 0.15


Suratlar we gatlaklar barada eýýäm teoriýa berendigim sebäpli, Dockerfile -ni öwrenmegiň wagty geldi. Rels 7.1-den başlap, Dockerfile täze Rail programmasy bilen döredilýär. Aşakda onuň nähili bolup biljekdiginiň mysaly.


 # syntax=docker/dockerfile:1 # check=error=true # Make sure RUBY_VERSION matches the Ruby version in .ruby-version ARG RUBY_VERSION=3.4.1 FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base # Rails app lives here WORKDIR /rails # Install base packages # Replace libpq-dev with sqlite3 if using SQLite, or libmysqlclient-dev if using MySQL RUN apt-get update -qq && \ apt-get install --no-install-recommends -y curl libjemalloc2 libvips libpq-dev && \ rm -rf /var/lib/apt/lists /var/cache/apt/archives # Set production environment ENV RAILS_ENV="production" \ BUNDLE_DEPLOYMENT="1" \ BUNDLE_PATH="/usr/local/bundle" \ BUNDLE_WITHOUT="development" # Throw-away build stage to reduce size of final image FROM base AS build # Install packages needed to build gems RUN apt-get update -qq && \ apt-get install --no-install-recommends -y build-essential curl git pkg-config libyaml-dev && \ rm -rf /var/lib/apt/lists /var/cache/apt/archives # Install application gems COPY Gemfile Gemfile.lock ./ RUN bundle install && \ rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git && \ bundle exec bootsnap precompile --gemfile # Copy application code COPY . . # Precompile bootsnap code for faster boot times RUN bundle exec bootsnap precompile app/ lib/ # Precompiling assets for production without requiring secret RAILS_MASTER_KEY RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile # Final stage for app image FROM base # Copy built artifacts: gems, application COPY --from=build "${BUNDLE_PATH}" "${BUNDLE_PATH}" COPY --from=build /rails /rails # Run and own only the runtime files as a non-root user for security RUN groupadd --system --gid 1000 rails && \ useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash && \ chown -R rails:rails db log storage tmp USER 1000:1000 # Entrypoint prepares the database. ENTRYPOINT ["/rails/bin/docker-entrypoint"] # Start server via Thruster by default, this can be overwritten at runtime EXPOSE 80 CMD ["./bin/thrust", "./bin/rails", "server"]


Aşakda soňky surat ölçegini täsirli etmek üçin ýokardaky Dockerfile de ulanylýan çemeleşmeleriň we düzgünleriň sanawyny bererin.

Paket gurnamalaryny optimizirläň

Developmenterli ösüş enjamyňyzda diňe zerur programma üpjünçiligini saklaýandygyňyza ynanýaryn. Docker şekillerinde-de edil şonuň ýaly ulanylmaly. Aşakdaky mysallarda ýokardaky Rail Dockerfile-den alnan Dockerfile-i yzygiderli erbetleşdirerin. Asyl Dockerfile wersiýasy hökmünde görkezerin.

Düzgün # 1: Iň az esasy suratlary ulanyň

 FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base


Esasy şekil Dockerfile üçin başlangyç nokatdyr. Konteýner döretmek üçin ulanylýan şekil. Esasy şekil Dockerfile -iň birinji gatlagy we Dockerfile iň özi tarapyndan döredilmedik ýeke-täk gatlak.


Esasy surat FROM buýrugy bilen görkezilýär, soň bolsa suratyň ady we belligi. Bellik islege bagly, kesgitlenmedik bolsa iň latest bellik ulanylýar. Esasy surat Docker Hub-da ýa-da başga bir reýestrde bar bolan islendik surat bolup biler.


Dockerfile ” -de, 3.4.1-slim ýazgyly ruby şekili ulanýarys. ruby şekili, Docker Hub-da bar bolan resmi Ruby şekili . 3.4.1-slim belligi, debian-slim şekile esaslanýan Ruby şekiliniň inçe görnüşi. debian-slim şekil, ululygy üçin optimallaşdyrylan Debian Linux şekiliniň minimal görnüşi. slim şekiliň näderejede kiçidigi barada düşünmek üçin aşakdaky tablisa serediň.


 ➜ docker images --filter "reference=ruby" REPOSITORY TAG IMAGE ID CREATED SIZE ruby 3.4.1-slim 0bf957e453fd 5 days ago 219MB ruby 3.4.1-alpine cf9b1b8d4a0c 5 days ago 99.1MB ruby 3.4.1-bookworm 1e77081540c0 5 days ago 1.01GB


2024-nji ýylyň ýanwar aýyna çenli häzirki Debian neşirine kitap gurçugy diýilýär, öňki kitaby öküz .


1GB ýerine 219 MB - ullakan tapawut. Emma alpine şekili has kiçi bolsa näme etmeli? alpine şekili, ululygy we howpsuzlygy üçin optimallaşdyrylan aşa ýeňil Linux paýlanyşy bolan “Alpine Linux” paýlanyşyna esaslanýar. “Alp”, GNU kärdeşleriniň ýerine musl kitaphanasyny ( glibc ýerine) we busybox (“Unix” enjamlarynyň ykjam toplumy) ulanýar. “Rails” -i işletmek üçin alpine şekilini ulanmak tehniki taýdan mümkin bolsa-da, bu makalada bu barada durup geçmerin.

2-nji düzgün: Gatlaklary kiçeltmek

 RUN apt-get update -qq && \ apt-get install --no-install-recommends -y curl libjemalloc2 libvips libpq-dev && \ rm -rf /var/lib/apt/lists /var/cache/apt/archives


Dockerfile -de her RUN , COPY we FROM görkezmeleri täze gatlak döredýär. Näçe köp gatlak bolsa, şekiliň ululygy şonça-da ulydyr. Şonuň üçin iň oňat tejribe, birnäçe buýrugy bir RUN görkezmesine birleşdirmekdir. Bu nokady görkezmek üçin aşakdaky mysala seredeliň.


 # syntax=docker/dockerfile:1 # check=error=true # Make sure RUBY_VERSION matches the Ruby version in .ruby-version ARG RUBY_VERSION=3.4.1 FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base RUN apt-get update -qq RUN apt-get install --no-install-recommends -y curl RUN apt-get install --no-install-recommends -y libjemalloc2 RUN apt-get install --no-install-recommends -y libvips RUN apt-get install --no-install-recommends -y libpq-dev RUN rm -rf /var/lib/apt/lists /var/cache/apt/archives CMD ["echo", "Whalecome!"]


RUN görkezmesini birnäçe setire böldüm, bu bolsa olary has köp adam okamaga mümkinçilik berýär. Theöne şekiliň ululygyna nähili täsir eder? Geliň, şekili guralyň we barlap göreliň.


 ➜ time docker build -t no-minimize-layers --no-cache -f no-minimize-layers.dockerfile . 0.31s user 0.28s system 2% cpu 28.577 total


Suraty gurmak üçin 28 sekunt gerek boldy, asyl nusgasyny kiçeldilen gatlaklar bilen gurmak üçin bary-ýogy 19 sekunt gerek ( takmynan 33% çalt ).


 ➜ time docker build -t original --no-cache -f original.dockerfile . 0.25s user 0.28s system 2% cpu 19.909 total


Suratlaryň ululygyny barlap göreliň.


 ➜ docker images --filter "reference=*original*" --filter "reference=*no-minimize*" REPOSITORY TAG IMAGE ID CREATED SIZE original latest f1363df79c8a 8 seconds ago 356MB no-minimize-layers latest ad3945c8a8ee 43 seconds ago 379MB


Iň pes gatlakly şekil, kiçeldilmedik gatlaklardan 23 MB kiçidir. Bu ululygyň 6% azalmagydyr . Bu mysalda azajyk tapawut ýaly bolup görünse-de, ähli RUN görkezmelerini birnäçe setire bölseňiz, tapawut has uly bolar.

3-nji düzgün: Diňe zerur zatlary guruň

Düzgüne görä, apt-get install maslahat berilýän paketleri we gurnamagyňyzy haýyş eden paketleri gurýar. --no-install-recommends opsiýasy, maslahat berilýänleri däl-de, diňe anyk görkezilen paketleri apt-get aýdýar.


 ➜ time docker build -t without-no-install-recommends --no-cache -f without-no-install-recommends.dockerfile . 0.33s user 0.30s system 2% cpu 29.786 total ➜ docker images --filter "reference=*original*" --filter "reference=*recommends*" REPOSITORY TAG IMAGE ID CREATED SIZE without-no-install-recommends latest 41e6e37f1e2b 3 minutes ago 426MB minimize-layers latest dff22c85d84c 17 minutes ago 356MB


Görşüňiz ýaly, --no-install-recommends şekil , asyl nusgasyndan 70 MB uludyr. Bu ululygyň 16% ýokarlanmagydyr .


Surata haýsy faýllaryň goşulandygyny görmek üçin çümmek programmasyny ulanyň - makalanyň ahyrynda bu hakda has giňişleýin okaň.

4-nji düzgün: Gurmakdan soň arassalaň

Asyl Dockerfile apt-get install buýrugyndan soň rm -rf /var/lib/apt/lists/* /var/cache/apt/archives buýrugyny öz içine alýar. Bu buýruk, gurnamadan soň zerur däl paket sanawlaryny we arhiwleri aýyrýar. Suratyň ululygyna nähili täsir edýändigini göreliň, munuň üçin arassalamak buýrugy bolmazdan täze Dockerfile dörederin.


 RUN apt-get update -qq && \ apt-get install --no-install-recommends -y curl libjemalloc2 libvips libpq-dev


Suratlary gurmak, asyl nusgasy bilen deň wagt alýar, manysy bar.


 ➜ time docker build -t without-cleaning --no-cache -f without-cleaning.dockerfile . 0.28s user 0.30s system 2% cpu 21.658 total


Suratlaryň ululygyny barlap göreliň.


 ➜ docker images --filter "reference=*original*" --filter "reference=*cleaning*" REPOSITORY TAG IMAGE ID CREATED SIZE without-cleaning latest 52884fe50773 2 minutes ago 375MB original latest f1363df79c8a 16 minutes ago 356MB


Arassalamazdan şekil, arassalaýyşdan 19 MB uludyr, bu 5% ýokarlanýar .

Iň erbet senari

Aboveokarda agzalan dört optimizasiýanyň hemmesi ulanylmasa näme etmeli? Geliň, hiç hili optimizasiýa bolmazdan täze Dockerfile döredeliň we şekili guralyň.


 # syntax=docker/dockerfile:1 # check=error=true ARG RUBY_VERSION=3.4.1 FROM docker.io/library/ruby:$RUBY_VERSION AS base RUN apt-get update -qq RUN apt-get install -y curl RUN apt-get install -y libjemalloc2 RUN apt-get install -y libvips RUN apt-get install -y libpq-dev CMD ["echo", "Whalecome!"]


 ➜ time docker build -t without-optimizations --no-cache -f without-optimizations.dockerfile . 0.46s user 0.45s system 1% cpu 1:02.21 total


Wah, şekili gurmak üçin bir minutdan gowrak wagt gerek boldy.


 ➜ docker images --filter "reference=*original*" --filter "reference=*without-optimizations*" REPOSITORY TAG IMAGE ID CREATED SIZE without-optimizations latest 45671929c8e4 2 minutes ago 1.07GB original latest f1363df79c8a 27 hours ago 356MB


Optimizasiýasyz şekil, asyl nusgasyndan 714 MB uludyr, bu 200% ýokarlanýar . Bu, Dockerfile -ni optimizirlemegiň nähili möhümdigini aýdyň görkezýär, has uly suratlar has köp disk ýerini gurmak we sarp etmek üçin has köp wagt sarp edýär.

Elmydama .dockerignore ulanyň

.dockerignore faýly Git tarapyndan ulanylýan .gitignore faýlyna meňzeýär. Faýllary we kataloglary gurluşyň mazmunyndan aýyrmak üçin ulanylýar. Kontekst, şekil gurlanda Docker daemonyna iberilýän faýllaryň we kataloglaryň toplumydyr. Kontekst “Docker” daemonyna tarbol görnüşinde iberilýär, şonuň üçin ony mümkin boldugyça kiçi saklamak möhümdir.


Haýsydyr bir sebäbe görä, taslamaňyzda .dockerignore faýly ýok bolsa, ony el bilen döredip bilersiňiz. Resmi Rails .dockerignore faýl şablonyny başlangyç nokady hökmünde ulanmagyňyzy maslahat berýärin. Aşakda onuň nähili bolup biljekdiginiň mysaly.


 # See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files. # Ignore git directory. /.git/ /.gitignore # Ignore bundler config. /.bundle # Ignore all environment files. /.env* # Ignore all default key files. /config/master.key /config/credentials/*.key # Ignore all logfiles and tempfiles. /log/* /tmp/* !/log/.keep !/tmp/.keep # Ignore pidfiles, but keep the directory. /tmp/pids/* !/tmp/pids/.keep # Ignore storage (uploaded files in development and any SQLite databases). /storage/* !/storage/.keep /tmp/storage/* !/tmp/storage/.keep # Ignore assets. /node_modules/ /app/assets/builds/* !/app/assets/builds/.keep /public/assets # Ignore CI service files. /.github # Ignore development files /.devcontainer # Ignore Docker-related files /.dockerignore /Dockerfile*


Taslamada .dockerfile faýlynyň bolmagy diňe bir zerur däl faýllary we kataloglary (meselem, .github bukjasyndan GitHub iş akymlary ýa-da node_modules JavaScript garaşlylygy) aýyrmaga mümkinçilik bermeýär. Şeýle hem surata tötänleýin duýgur maglumatlary goşmazlyk üçin kömek edýär. Mysal üçin, daşky gurşaw üýtgeýjilerini öz içine alýan .env faýly ýa-da şahsyýet maglumatlaryny açmak üçin ulanylýan master.key faýly.

Dive ulanyň

Aboveokarda agzalan ähli optimizasiýa düşündirilende düşnükli bolup biler. Sizde eýýäm ullakan şekil bar bolsa we nireden başlamalydygyňyzy bilmeseňiz näme etmeli?


Iň halanýan we iň peýdaly guralym Dive . Dive, Docker şekilini, gatlak mazmunyny öwrenmek we şekiliň ululygyny kiçeltmegiň usullaryny tapmak üçin TUI guralydyr. Dive, ulgam paket dolandyryjyňyz bilen gurlup bilner ýa-da ony işletmek üçin resmi Docker şekilini ulanyp bilersiňiz. Suraty iň erbet ssenariýamyzdan ulanalyň.


 docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest without-optimizations 


“Docker” gatlaklary gurallary barlaýar

Aboveokardaky skrinshotda, iň optimal däl suratymyzyň gözden geçirilişini görüp bilersiňiz. Çümmek her gatyň ululygyny, şekiliň umumy ululygyny we her gatlakda üýtgedilen (goşulan, üýtgedilen ýa-da öçürilen) faýllary görkezýär. Meniň üçin bu “Dive” -iň iň peýdaly aýratynlygy. Faýllary sag panelde görkezmek bilen, zerur däl faýllary aňsatlyk bilen kesgitläp we surata goşýan buýruklary aýyryp bilersiňiz.


“Dive” -ni hakykatdanam gowy görýän bir zadym, “UI” terminaly bolmakdan başga-da, ýerli ösüşde-de täsirli bolup biljek “CI” üçin amatly önüm berip biler. Ony ulanmak üçin CI gurşaw üýtgeýjisi bilen “Dive” -i true , buýrugyň çykyşy aşakdaky skrinshotda.


 docker run -e CI=true --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest without-optimizations 


CI üçin amatly çykyşy çümdüriň

Şahsy islegim, Dive-i meýilleşdirilen esasda ulanmak, mysal üçin hepdede bir gezek suratlaryňyzyň gowy ýagdaýda bolmagyny üpjün etmek. Geljekki makalalarda Dockerfile-i barlamak üçin ulanýan awtomatiki iş akymlarymy, şol sanda Dive we Hadolint-i öz içine alaryn.

Gatlaklary gysmaň

Gören suratymyň ululygyny kiçeltmegiň bir usuly, gatlaklary gysmaga synanyşmakdyr. Bu pikir, şekiliň ululygyny azaltmak üçin birnäçe gatlagy bir gatlaga birleşdirmekdi. Docker-de eksperimental warianty bardy --squash , bulardan başga-da, docker-squash ýaly üçünji tarap gurallary bardy.


Bu çemeleşme ozal işlän hem bolsa, häzirki wagtda köneldi we ulanmak maslahat berilmeýär. Gatlak gatlaklary Dokeriň gatlak keş keşbiniň esasy aýratynlygyny ýok etdi. Mundan başga-da, --squash ulananyňyzda, bilkastlaýyn soňky gatlakdaky öňki gatlaklardan duýgur ýa-da wagtlaýyn faýllary goşup bilersiňiz. Bu inçe däneli dolandyryşyň ýoklugy ýa-da hiç zat däl.


Gatlaklary gysmagyň ýerine köp basgançakly gurluşlary ulanmak maslahat berilýär. Rels Dockerfile eýýäm köp basgançakly gurluşlary ulanýar, indiki makalada nähili işleýändigini düşündirerin.

Netijeler

Docker şekillerini optimizirlemek, beýleki optimizasiýa ýaly, bir gezek edilip, ýatdan çykarylyp bilinmez . Bu yzygiderli barlaglary we gowulandyrmalary talap edýän dowam edýän prosesdir. Esasy zatlary ýapmaga synanyşdym, ýöne bilmek we düşünmek gaty möhümdir. Indiki makalalarda, Docker-iň has çalt we täsirli gurulmagyna kömek edip biljek has ösen usullary we gurallary açaryn.