Ity lahatsoratra ity dia ampahany amin'ny andian-dahatsoratra izay handehanako amin'ny andalana tsirairay amin'ny Rails default Dockerfile ary hanazava ny fomba fanao tsara indrindra sy ny fanatsarana. Ny sary Docker dia azo amboarina amin'ny fomba isan-karazany izay ahitana, fa tsy voafetra amin'ny, fampihenana ny haben'ny sary, fananganana fanatsarana ny fampisehoana, fiarovana, ary fomba fanao tsara indrindra amin'ny fikojakojana, ary fanatsarana manokana amin'ny fampiharana. Ao amin'ny lahatsoratra voalohany dia tsy hikasika afa-tsy ny fampihenana ny haben'ny sary aho ary hanazava ny antony maha-zava-dehibe azy ireo. Nahoana no manatsara ny haben'ny sary? Tahaka ny amin'ny dingana hafa rehetra amin'ny fampivoarana rindrambaiko, ny mpamorona tsirairay dia mitanisa ny antony tiany hahatonga ny Docker hanangana haingana kokoa. Tanisaiko ireo antony manan-danja indrindra amiko. Fananganana sy fametrahana haingana kokoa Ny sary kely kokoa dia haingana kokoa ny fananganana satria vitsy kokoa ny rakitra sy ny sosona tokony hokarakaraina. Izany dia manatsara ny famokarana developer, indrindra mandritra ny tsingerin'ny fampandrosoana miverimberina. Ny sary kely kokoa dia maka fotoana kely hanosehana any amin'ny rejisitra ary hisintona azy mandritra ny fametrahana. Manakiana indrindra izany amin'ny fantsona CI/CD izay amboarina sy apetraka matetika ny kaontenera. Ahena ny vidin'ny fitehirizana sy ny fampiasana bandwidth tambazotra Ny sary kely kokoa dia mandany fitehirizana kely kokoa amin'ny rejisitra kaontenera, milina fampandrosoana eo an-toerana, ary lohamilina famokarana. Mampihena ny vidin'ny fotodrafitrasa izany, indrindra ho an'ny fametrahana lehibe. Ny sary kely kokoa dia mampiasa bandwidth kely kokoa rehefa afindra eo amin'ny mpizara, indrindra rehefa manangana sary eo an-toerana ianao na amin'ny fantsona CI/CD ary manosika azy ireo ho any amin'ny rejisitra. "Nandany $3.2m tamin'ny rahona izahay tamin'ny taona 2022... Mijoro eo amin'ny $7m eo ho eo amin'ny fandaniana amin'ny serivisy izahay mandritra ny dimy taona avy amin'ny fivoahana rahona." David Heinemeier Hansson — HEY World Fanatsarana sy fiarovana Ny sary kely kokoa dia mitaky loharanon-karena vitsy kokoa (oh: CPU, RAM) hametahana sy hampandeha azy, hanatsarana ny fampandehanana ankapobeny ny fampiharana voatahiry. Ny fotoana fanombohana haingana kokoa dia midika fa vonona haingana kokoa ny serivisyo, izay tena zava-dehibe amin'ny rafitra scaling sy avo lenta. Ny sary fototra faran'izay kely indrindra toa na dia misy fonosana efa napetraka mialoha, mampihena ny mety hisian'ny rindrambaiko tsy voafehy na tsy ilaina. alpine debian-slim Ankoatra izay rehetra voalaza etsy ambony, ny fanesorana ireo rakitra sy fitaovana tsy ilaina dia manamaivana ny fanelingelenana rehefa mamantatra olana ary mitarika amin'ny fikojakojana tsara kokoa sy fampihenana ny trosa ara-teknika. Fanaraha-maso ny sary Docker Mba hahazoana mari-pamantarana samihafa amin'ny sary, anisan'izany ny habeny, azonao atao ny mijery ny Docker Desktop na mampandeha ny baiko ao amin'ny terminal. 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 Ny fahafantarana ny haben'ny sary dia tsy manome anao ny sary feno. Tsy fantatrao izay ao anatin'ilay sary, firy ny sosona misy azy, na ny haben'ny sosona tsirairay. Ny dia , izay singa iray amin'ny sary Docker. Ny sosona tsirairay dia maneho andiana fanovana natao tamin'ny rafitry ny fisie an'ilay sary, toy ny fampidirana fisie, fanovana ny tefy, na fametrahana rindrambaiko. sarin'ny Docker sarin'ny rafitra rakitra tsy azo ovaina Ny sary Docker dia amboarina tsikelikely, isaky ny sosona, ary ny sosona tsirairay dia mifanaraka amin'ny torolàlana ao amin'ny . Mba hahazoana ny sarin'ny sary dia azonao atao ny mampandeha ny baikon'ny . 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 Satria efa nanome teoria momba ny sary sy ny sosona aho, fotoana izao hijerena ny . Manomboka amin'ny Rails 7.1, ny dia noforonina miaraka amin'ny rindranasa Rails vaovao. Ity ambany ity ny ohatra iray amin'ny mety ho endriky ny azy. 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"] Eto ambany aho dia hanome lisitr'ireo fomba fiasa sy fitsipika izay ampiharina amin'ny etsy ambony mba hahombiazana ny haben'ny sary farany. Dockerfile Optimize ny fametrahana fonosana Azoko antoka fa tsy mitazona afa-tsy rindrambaiko ilaina amin'ny milina fampandrosoana eo an-toerana ianao. Toy izany koa no tokony hampiharina amin'ny sary Docker. Ao amin'ireo ohatra etsy ambany dia hanaratsy hatrany tao amin'ny Rails Dockerfile etsy ambony aho. Hantsoiko ho dikan-teny . ny Dockerfile nalaina Dockerfile tany am-boalohany Fitsipika #1: Mampiasà sary fototra kely indrindra FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base Ny sary fototra no teboka fanombohana ny . Izy io no sary ampiasaina hamoronana ny fitoeran-javatra. Ny sary fototra no sosona voalohany ao amin'ny , ary io no hany sosona tsy noforonin'ny mihitsy. Dockerfile Dockerfile Dockerfile Ny sary fototra dia voafaritra miaraka amin'ny baiko , arahin'ny anaran'ny sary sy ny marika. Ny tenifototra dia tsy voatery, ary raha tsy voafaritra dia ny marika no ampiasaina. Ny sary fototra dia mety ho sary misy ao amin'ny Docker Hub na rejisitra hafa. FROM latest Ao amin'ny momba, dia mampiasa ny sary miaraka amin'ny marika izahay. Ny sary dia hita ao amin'ny Docker Hub. Ny marika dia dika manify amin'ny sary Ruby izay mifototra amin'ny sary . Raha ny sary dia dika kely indrindra amin'ny sary Debian Linux izay natao ho an'ny habe. Jereo ny tabilao etsy ambany mba hahitanao ny fahavitsian'ny sary . Dockerfile ruby 3.4.1-slim ruby ny sary Ruby ofisialy 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 Tamin'ny Janoary 2024, ny famoahana Debian ankehitriny dia antsoina hoe ary ny teo aloha dia . bookworm bullseye 219 MB fa tsy 1GB — fahasamihafana lehibe. Ahoana anefa raha kely kokoa ny sarin'ny ? Ny sary dia mifototra amin'ny fizarana Alpine Linux, izay fizarana Linux tena maivana izay natao ho an'ny habe sy ny fiarovana. Alpine dia mampiasa ny tranomboky (fa tsy ) sy (sehatra kofehin'ny fitaovana Unix) fa tsy ny GNU. Na dia azo atao ara-teknika aza ny mampiasa ny sary hampandehanana ny Rails, dia tsy holazaiko amin'ity lahatsoratra ity izany. alpine alpine musl glibc busybox alpine Fitsipika #2: Manamaivana ny sosona 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 Ny torolàlana , ary ao amin'ny dia mamorona sosona vaovao. Arakaraka ny sosona anananao no lehibe kokoa ny haben'ny sary. Izany no mahatonga ny fomba fanao tsara indrindra dia ny manambatra baiko maromaro ao anaty fampianarana tokana. Mba hanazavana io hevitra io, andeha hojerentsika ny ohatra etsy ambany. RUN COPY FROM Dockerfile 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!"] Nozaraiko ho andalana maromaro ny torolàlana , izay mazava ho azy fa mahatonga azy ireo kokoa. Ahoana anefa no hisy fiantraikany amin'ny haben'ny sary? Andao hamboarintsika ny sary ary hojerentsika izany. RUN ho mora vakiana ➜ 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 Naharitra 28 segondra ny fananganana ilay sary, raha 19 segondra monja ny fananganana ny ( ). dikan-teny tany am-boalohany miaraka amin'ny sosona faran'izay kely efa ho 33% haingana kokoa ➜ time docker build -t original --no-cache -f original.dockerfile . 0.25s user 0.28s system 2% cpu 19.909 total Andeha hojerentsika ny haben'ny sary. ➜ 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 Ny sary miaraka amin'ny sosona faran'izay kely dia 23 MB kely kokoa noho ilay tsy misy sosona kely kokoa. Izany dia . Na dia toa misy fahasamihafana kely amin'ity ohatra ity aza, dia ho lehibe kokoa ny fahasamihafana raha mizara ny torolàlana rehetra ho andalana maromaro ianao. fampihenana 6% ny habeny RUN Fitsipika #3: Apetraho izay ilaina ihany Amin'ny alàlan'ny default, dia mametraka ny fonosana natolotra ary koa ny fonosana nasainao hapetraka. Ny safidy dia milaza mba hametraka afa-tsy ireo fonosana voatondro mazava fa tsy ireo soso-kevitra. 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 Araka ny hitanao, ny sary tsy misy dia 70 MB lehibe kokoa noho ny . Izany dia . --no-install-recommends voalohany fitomboana 16% amin'ny habeny fitaovana hijerena izay rakitra nampidirina amin'ny sary - vakio bebe kokoa momba izany any amin'ny faran'ny lahatsoratra. Mampiasà antsitrika Fitsipika #4: Manadio aorian'ny fametrahana Ny tany am-boalohany dia ahitana ny baiko aorian'ny baiko . Ity baiko ity dia manaisotra ny lisitry ny fonosana sy ny arisiva izay tsy ilaina intsony aorian'ny fametrahana. Andeha hojerentsika ny fiantraikan'izany amin'ny haben'ny sary, mba hahatratrarana izany dia hamorona vaovao aho . Dockerfile rm -rf /var/lib/apt/lists/* /var/cache/apt/archives apt-get install Dockerfile tsy misy baiko fanadiovana RUN apt-get update -qq && \ apt-get install --no-install-recommends -y curl libjemalloc2 libvips libpq-dev Ny fananganana ny sary dia saika mitovy ny fotoana amin'ny voalohany, izay misy dikany. ➜ time docker build -t without-cleaning --no-cache -f without-cleaning.dockerfile . 0.28s user 0.30s system 2% cpu 21.658 total Andeha hojerentsika ny haben'ny sary. ➜ 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 Ny sary tsy misy fanadiovana dia 19 MB lehibe kokoa noho ilay misy fanadiovana, izany dia . fitomboana 5% amin'ny habeny Ny scenario ratsy indrindra Ahoana raha tsy ampiharina ireo fanatsarana efatra voalaza etsy ambony ireo? Andao hamorona vaovao ary hanangana ny sary. Dockerfile tsy misy fanatsarana # 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 Oay, naharitra iray minitra mahery ny fanamboarana ilay sary. ➜ 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 Ny sary tsy misy fanatsarana dia 714 MB lehibe kokoa noho ny tany am-boalohany, izany dia . Izany dia mampiseho mazava ny maha-zava-dehibe ny fanatsarana ny , ny sary lehibe kokoa dia mitaky fotoana bebe kokoa hanamboarana sy handaniana toerana malalaka kokoa. fitomboana 200% amin'ny habeny Dockerfile Ampiasao foana ny .dockerignore Ny rakitra dia mitovy amin'ny rakitra ampiasain'ny Git. Izy io dia ampiasaina hanilika ny rakitra sy ny lahatahiry amin'ny tontolon'ny fananganana. Ny contexte dia fitambarana rakitra sy lahatahiry alefa any amin'ny daemon Docker rehefa manangana sary. Ny contexte dia alefa any amin'ny daemon Docker ho toy ny tarball, noho izany dia zava-dehibe ny mitazona azy ho kely araka izay azo atao. .dockerignore .gitignore Raha toa ka tsy manana ny rakitra ao amin'ny tetikasanao ianao, na inona na inona antony, dia azonao atao ny mamorona azy amin'ny tanana. Manoro hevitra anao aho hampiasa ny Rails ho fanombohana. Ity ambany ity ny ohatra iray amin'ny mety ho endriky ny azy. .dockerignore maodelin'ny rakitra .dockerignore # 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* rakitra ao amin'ny tetikasa dia tsy mamela afa-tsy ny manilika ny rakitra sy ny lahatahiry tsy ilaina (oh: GitHub workflows avy amin'ny lahatahiry na JavaScript miankina amin'ny ) avy amin'ny contexte. Manampy amin'ny fisorohana ny fampidirana tsy nahy fampahalalana mafampana amin'ny sary. Ohatra, ny rakitra izay misy ny fari-piainan'ny tontolo iainana na ny rakitra izay ampiasaina hamongorana ny fahazoan-dàlana. Ny fananana .dockerfile .github node_modules .env master.key Mampiasa Dive Ny fanatsarana rehetra voalaza etsy ambony dia mety ho toa miharihary rehefa hazavaina. Inona no tokony hatao raha efa manana sary goavana ianao, ary tsy fantatrao hoe aiza no hanombohana? Ny fitaovana tiako indrindra sy mahasoa indrindra dia . Dive dia fitaovana TUI hikarohana sary Docker, atiny sosona, ary fitadiavana fomba hampihenana ny haben'ny sary. Ny dive dia azo apetraka miaraka amin'ny mpitantana ny fonosanao, na azonao ampiasaina ny sarin'ny Docker ofisialy hampandehanana azy. Andao hampiasa ny sary avy amin'ny toe-javatra ratsy indrindra. ny Dive docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest without-optimizations Ao amin'ny pikantsary etsy ambony dia azonao jerena ny fisavana ny sary tsy mety indrindra. Ny dive dia mampiseho ny haben'ny sosona tsirairay, ny habe manontolon'ny sary ary ny rakitra novaina (nampiana, novaina, na nofafana) isaky ny sosona. Ho ahy, ity no endri-javatra mahasoa indrindra amin'ny Dive. Amin'ny alàlan'ny lisitra ireo rakitra ao amin'ny tontonana havanana, azonao atao ny mamantatra mora foana ireo rakitra tsy ilaina ary manala baiko izay manampy azy ireo amin'ny sary. Ny zavatra iray tena tiako momba ny Dive dia ny hoe, ankoatry ny fananana UI terminal, dia afaka manome vokatra CI-namana ihany koa izy, izay mety hahomby amin'ny fampandrosoana eo an-toerana ihany koa. Raha hampiasa azy io dia andramo ny Dive miaraka amin'ny fari-piainan'ny tontolo iainana napetraka ho , ny famoahana ny baiko dia ao amin'ny pikantsary etsy ambany. CI true docker run -e CI=true --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest without-optimizations Ny tiako manokana dia ny fampiasana Dive amin'ny fototra voalahatra, ohatra, indray mandeha isan-kerinandro, mba hahazoana antoka fa mbola ao anaty endrika tsara ny sarinao. Ao amin'ny lahatsoratra ho avy, dia handrakotra ny workflow mandeha ho azy aho hanamarina ny Dockerfile-ko, anisan'izany ny Dive sy . Hadolint Aza squash sosona Ny fomba iray hanamaivanana ny haben'ny sary hitako dia ny fiezahana mametaka ireo sosona. Ny hevitra dia ny hanambatra sosona maromaro ho sosona iray mba hampihenana ny haben'ny sary. Docker dia nanana safidy andrana , ankoatr'izay dia nisy fitaovana hafa toy ny . --squash docker-squash Na dia niasa tamin'ny lasa aza io fomba fiasa io, amin'izao fotoana izao dia tsy ampiasaina ary tsy asaina ampiasaina. Ny squashing layer dia nandrava ny endri-javatra fototra an'i Docker momba ny caching layer. Ankoatra izany, raha mampiasa ianao dia afaka mampiditra tsy nahy na rakitra saro-pady avy amin'ny sosona teo aloha amin'ny sary farany. Ity dia fomba iray na tsy misy na inona na inona izay tsy misy fanaraha-maso tsara. --squash Raha tokony ho squashing sosona, dia nanolorana azy ho mampiasa multi-dingana fananganana. Ny Rails dia efa mampiasa fananganana sehatra maromaro, hazavaiko ny fomba fiasany amin'ny lahatsoratra manaraka. Dockerfile Fehiny Ny fanatsarana ny sary Docker, toy ny fanatsarana hafa rehetra, . Izany dia dingana mitohy izay mitaky fisavana sy fanatsarana tsy tapaka. Niezaka nanazava ny fototra aho, saingy tena ilaina ny mahafantatra sy mahazo azy. Ao amin'ny lahatsoratra manaraka dia handrakotra teknika sy fitaovana mandroso kokoa aho izay afaka manampy amin'ny fananganana ny Docker anao haingana kokoa sy mahomby kokoa. dia tsy azo atao indray mandeha ary adino