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. ýa-da ýaly iň az esasy şekiller, öňünden gurlan paketleri az saklaýar, iberilmedik ýa-da gereksiz programma üpjünçiliginiň ulanylmagy howpuny peseldýär. alpine debian-slim 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 buýrugyny işledip bilersiňiz. docker images ➜ 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 şekiliniň düzüm bölegi bolan diňe okalýan, . 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 şekil gatlagy, üýtgewsiz faýl ulgamy gatlagydyr Docker şekilleri yzygiderli, gatlak boýunça gurulýar we her gatlak -de görkezmä laýyk gelýär. Suratyň gatlaklaryny almak üçin, buýrugyny işledip bilersiňiz. Dockerfile docker history ➜ 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, -ni öwrenmegiň wagty geldi. Rels 7.1-den başlap, täze Rail programmasy bilen döredilýär. Aşakda onuň nähili bolup biljekdiginiň mysaly. Dockerfile Dockerfile # 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 de ulanylýan çemeleşmeleriň we düzgünleriň sanawyny bererin. Dockerfile 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 yzygiderli erbetleşdirerin. wersiýasy hökmünde görkezerin. alnan Dockerfile-i Asyl Dockerfile Düzgün # 1: Iň az esasy suratlary ulanyň FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base Esasy şekil üçin başlangyç nokatdyr. Konteýner döretmek üçin ulanylýan şekil. Esasy şekil -iň birinji gatlagy we iň özi tarapyndan döredilmedik ýeke-täk gatlak. Dockerfile Dockerfile Dockerfile Esasy surat buýrugy bilen görkezilýär, soň bolsa suratyň ady we belligi. Bellik islege bagly, kesgitlenmedik bolsa iň bellik ulanylýar. Esasy surat Docker Hub-da ýa-da başga bir reýestrde bar bolan islendik surat bolup biler. FROM latest ” -de, ýazgyly şekili ulanýarys. şekili, Docker Hub-da bar bolan . belligi, şekile esaslanýan Ruby şekiliniň inçe görnüşi. şekil, ululygy üçin optimallaşdyrylan Debian Linux şekiliniň minimal görnüşi. şekiliň näderejede kiçidigi barada düşünmek üçin aşakdaky tablisa serediň. Dockerfile 3.4.1-slim ruby ruby resmi Ruby şekili 3.4.1-slim debian-slim debian-slim slim ➜ 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 diýilýär, öňki kitaby . kitap gurçugy öküz 1GB ýerine 219 MB - ullakan tapawut. Emma şekili has kiçi bolsa näme etmeli? ş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 kitaphanasyny ( ýerine) we (“Unix” enjamlarynyň ykjam toplumy) ulanýar. “Rails” -i işletmek üçin şekilini ulanmak tehniki taýdan mümkin bolsa-da, bu makalada bu barada durup geçmerin. alpine alpine musl glibc busybox alpine 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 -de her , we 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 görkezmesine birleşdirmekdir. Bu nokady görkezmek üçin aşakdaky mysala seredeliň. Dockerfile RUN COPY FROM RUN # 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!"] görkezmesini birnäçe setire böldüm, bu bolsa olary has köp berýär. Theöne şekiliň ululygyna nähili täsir eder? Geliň, şekili guralyň we barlap göreliň. RUN adam okamaga mümkinçilik ➜ 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, gurmak üçin bary-ýogy 19 sekunt gerek ( ). asyl nusgasyny kiçeldilen gatlaklar bilen 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 . Bu mysalda azajyk tapawut ýaly bolup görünse-de, ähli görkezmelerini birnäçe setire bölseňiz, tapawut has uly bolar. ululygyň 6% azalmagydyr RUN 3-nji düzgün: Diňe zerur zatlary guruň Düzgüne görä, maslahat berilýän paketleri we gurnamagyňyzy haýyş eden paketleri gurýar. opsiýasy, maslahat berilýänleri däl-de, diňe anyk görkezilen paketleri aýdýar. apt-get install --no-install-recommends apt-get ➜ 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, şekil 70 MB uludyr. Bu . --no-install-recommends , asyl nusgasyndan ululygyň 16% ýokarlanmagydyr Surata haýsy faýllaryň goşulandygyny görmek üçin programmasyny - makalanyň ahyrynda bu hakda has giňişleýin okaň. çümmek ulanyň 4-nji düzgün: Gurmakdan soň arassalaň Asyl buýrugyndan soň 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 täze dörederin. Dockerfile apt-get install rm -rf /var/lib/apt/lists/* /var/cache/apt/archives arassalamak buýrugy bolmazdan Dockerfile 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ň, täze döredeliň we şekili guralyň. hiç hili optimizasiýa bolmazdan Dockerfile # 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 . Bu, -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. 200% ýokarlanýar Dockerfile Elmydama .dockerignore ulanyň faýly Git tarapyndan ulanylýan 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. .dockerignore .gitignore Haýsydyr bir sebäbe görä, taslamaňyzda faýly ýok bolsa, ony el bilen döredip bilersiňiz. Resmi Rails başlangyç nokady hökmünde ulanmagyňyzy maslahat berýärin. Aşakda onuň nähili bolup biljekdiginiň mysaly. .dockerignore .dockerignore faýl şablonyny # 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 faýlynyň diňe bir zerur däl faýllary we kataloglary (meselem, bukjasyndan GitHub iş akymlary ýa-da 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 faýly ýa-da şahsyýet maglumatlaryny açmak üçin ulanylýan faýly. .dockerfile bolmagy .github node_modules .env master.key 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, 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ň. Dive docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest without-optimizations 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 gurşaw üýtgeýjisi bilen “Dive” -i , buýrugyň çykyşy aşakdaky skrinshotda. CI true docker run -e CI=true --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest without-optimizations Ş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 öz içine alaryn. Hadolint-i 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 , bulardan başga-da, ýaly üçünji tarap gurallary bardy. --squash docker-squash 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, 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. --squash Gatlaklary gysmagyň ýerine köp basgançakly gurluşlary ulanmak maslahat berilýär. Rels eýýäm köp basgançakly gurluşlary ulanýar, indiki makalada nähili işleýändigini düşündirerin. Dockerfile Netijeler Docker şekillerini optimizirlemek, beýleki optimizasiýa ýaly, . 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. bir gezek edilip, ýatdan çykarylyp bilinmez