Энэ нийтлэл нь би Rails-ийн анхдагч Dockerfile-ийн мөр бүрийг үзэж, шилдэг туршлагууд болон оновчлолуудыг тайлбарлах цуврал нийтлэлүүдийн нэг хэсэг юм. Докерийн зургуудыг зургийн хэмжээг багасгах, бүтээмжийг оновчтой болгох, аюулгүй байдал, засвар үйлчилгээ хийх шилдэг туршлагууд, програмын онцлогт тохирсон оновчлол зэргийг багтаасан боловч үүгээр хязгаарлагдахгүй өөр өөр аргаар оновчтой болгож болно. Эхний нийтлэлд би зөвхөн зургийн хэмжээг багасгах оновчлолыг хөндөж, яагаад чухал болохыг тайлбарлах болно. Яагаад зургийн хэмжээг оновчтой болгох вэ? Програм хангамж хөгжүүлэх бусад үйл явцын нэгэн адил хөгжүүлэгч бүр яагаад Docker-ийн бүтээцийг илүү хурдан болгохыг хүссэн шалтгаанаа жагсаах болно. Миний хувьд хамгийн чухал шалтгаануудыг жагсаах болно. Илүү хурдан бүтээх, байршуулах Цөөн файл, давхаргыг боловсруулах шаардлагатай тул жижиг зургуудыг бүтээхэд илүү хурдан байдаг. Энэ нь хөгжүүлэгчийн бүтээмжийг сайжруулдаг, ялангуяа давтагдах хөгжлийн мөчлөгийн үед. Жижиг зургуудыг байршуулах явцад бүртгэл рүү түлхэж, түүнээс татахад бага хугацаа зарцуулдаг. Энэ нь ихэвчлэн чингэлэг барьж, байрлуулдаг CI/CD дамжуулах хоолойд онцгой чухал юм. Хадгалах зардал, сүлжээний зурвасын өргөн ашиглалтыг бууруулсан Жижиг зургууд нь контейнерийн бүртгэл, локал хөгжүүлэлтийн машинууд болон үйлдвэрлэлийн серверүүд дээр бага хэмжээний санах ой зарцуулдаг. Энэ нь дэд бүтцийн зардал, ялангуяа томоохон хэмжээний ашиглалтын зардлыг бууруулдаг. Жижиг зургуудыг сервер хооронд шилжүүлэхэд бага зурвасын өргөнийг ашигладаг, ялангуяа та дотоод эсвэл CI/CD дамжуулах шугам дээр зураг бүтээж, бүртгэл рүү түлхэж байх үед чухал юм. "Бид 2022 онд үүлэнд 3.2 сая доллар зарцуулсан... Бид үүлэнд гарснаар таван жилийн хугацаанд серверийн зардлыг 7 сая орчим доллар хэмнэх болно." David Heinemeier Hansson - HEY World Гүйцэтгэл, аюулгүй байдал сайжирсан Жижиг зургуудыг ачаалах, ажиллуулахын тулд бага нөөц (жишээ нь: CPU, RAM) шаардагддаг бөгөөд энэ нь контейнержүүлсэн програмуудын ерөнхий гүйцэтгэлийг сайжруулдаг. Илүү хурдан эхлүүлэх нь таны үйлчилгээ илүү хурдан бэлэн болно гэсэн үг бөгөөд энэ нь цар хүрээг нэмэгдүүлэх, өндөр хүртээмжтэй системд чухал ач холбогдолтой юм. эсвэл зэрэг хамгийн бага үндсэн зургууд нь урьдчилан суулгасан багцуудыг бага агуулж, засвар хийгдээгүй эсвэл шаардлагагүй программ хангамжийг ашиглах эрсдлийг бууруулдаг. alpine debian-slim Дээр дурдсан бүх зүйлээс гадна шаардлагагүй файл, хэрэгслийг устгах нь асуудлыг оношлоход анхаарал сарниулах явдлыг багасгаж, засвар үйлчилгээг сайжруулах, техникийн өрийг бууруулахад хүргэдэг. Docker зургуудыг шалгаж байна Зургийн янз бүрийн параметрүүдийг, түүний дотор хэмжээг авахын тулд та Docker Desktop-г харах эсвэл терминал дахь командыг ажиллуулж болно. 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 Зургийн хэмжээг мэдэх нь танд бүрэн дүр зургийг өгөхгүй. Зурган дотор юу байгаа, хэдэн давхаргатай, давхарга бүр нь хэр том болохыг та мэдэхгүй. нь зөвхөн уншигдах боломжтой, бөгөөд Docker зургийн бүрэлдэхүүн хэсэг юм. Давхарга бүр нь файл нэмэх, тохиргоог өөрчлөх, программ суулгах гэх мэт зургийн файлын системд хийсэн өөрчлөлтүүдийн багцыг илэрхийлдэг. Docker зургийн давхарга хувиршгүй файлын системийн давхарга Докерын зургуудыг давхарга бүрээр үе шаттайгаар бүтээдэг бөгөөд давхарга бүр нь дахь заавартай тохирч байна. Зургийн давхаргыг авахын тулд та командыг ажиллуулж болно. 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 Би аль хэдийн зураг, давхаргын тухай онолыг өгсөн тул г судлах цаг болжээ. Rails 7.1-ээс эхлэн нь шинэ Rails програмаар үүсгэгддэг. Доорх нь ямар харагдаж болох жишээг доор харуулав. 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"] Доор би зургийн эцсийн хэмжээг үр ашигтай болгохын тулд дээрх -д хэрэглэгдэх арга, дүрмийн жагсаалтыг өгөх болно. Dockerfile Багцын суулгацыг оновчтой болгох Та орон нутгийн хөгжүүлэлтийн машин дээрээ зөвхөн шаардлагатай программ хангамжийг хадгалдаг гэдэгт итгэлтэй байна. Үүнтэй ижил зүйлийг Docker зургуудад ашиглах ёстой. Доорх жишээнүүдэд би дээрх Rails Dockerfile-аас улам бүр дордуулах болно. Би үүнийг хувилбар гэж үзэх болно. гаргаж авсан Dockerfile-ийг Dockerfile анхны Дүрэм №1: Хамгийн бага үндсэн зургийг ашигла FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base Үндсэн зураг нь ийн эхлэлийн цэг юм. Энэ нь савыг бүтээхэд ашигладаг зураг юм. Үндсэн зураг нь ийн эхний давхарга бөгөөд энэ нь өөрөө үүсгээгүй цорын ганц давхарга юм. Dockerfile Dockerfile Dockerfile Үндсэн дүрсийг командын тусламжтайгаар зааж өгсний дараа зургийн нэр, шошго бичнэ. Шошго нь сонголттой бөгөөд хэрэв заагаагүй бол шошгыг ашиглана. Үндсэн зураг нь Docker Hub эсвэл бусад бүртгэл дээр байгаа ямар ч зураг байж болно. FROM latest about дээр бид шошготой дүрсийг ашиглаж байна. зураг нь Docker Hub дээр байгаа юм. шошго нь зураг дээр суурилсан Ruby зургийн нарийхан хувилбар юм. дүрс нь Debian Linux зургийн хамгийн бага хувилбар бөгөөд хэмжээ нь оновчтой байдаг. дүрс хэр жижиг болохыг мэдэхийн тулд доорх хүснэгтийг харна уу. Dockerfile 3.4.1-slim ruby ruby албан ёсны Ruby зураг 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 оны 1-р сарын байдлаар Debian-ийн одоогийн хувилбарыг гэж нэрлэдэг бол өмнөх хувилбар нь юм. номын хорхой bullseye 1 ГБ-ын оронд 219 MB - асар их ялгаа. Харин зураг үүнээс ч бага байвал яах вэ? зураг нь Alpine Linux түгээлт дээр суурилдаг бөгөөд энэ нь хэмжээ, аюулгүй байдлын хувьд оновчтой болсон супер хөнгөн Линукс түгээлт юм. Alpine нь GNU-ийн оронд library ( ийн оронд) болон (Unix хэрэгслүүдийн авсаархан багц) ашигладаг. Rails-ийг ажиллуулахын тулд зургийг ашиглах техникийн хувьд боломжтой ч би энэ нийтлэлд энэ талаар ярихгүй. alpine alpine musl glibc busybox alpine Дүрэм №2: Давхаргыг багасгах 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 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!"] Би зааврыг олон мөрөнд хуваасан бөгөөд энэ нь тэднийг илүү болгосон нь ойлгомжтой. Гэхдээ энэ нь зургийн хэмжээнд хэрхэн нөлөөлөх вэ? Зургийг бүтээж, шалгацгаая. RUN хүнд уншихад хялбар ➜ 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 Зургийг бүтээхэд 28 секунд зарцуулсан бол бүтээхэд ердөө 19 секунд шаардлагатай ( ). давхаргыг багасгасан анхны хувилбарыг бараг 33% хурдан ➜ time docker build -t original --no-cache -f original.dockerfile . 0.25s user 0.28s system 2% cpu 19.909 total Зургуудын хэмжээг шалгацгаая. ➜ 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 Давхаргыг багасгасан зураг нь жижигрүүлсэн давхаргагүй зургаас 23 МБ-аар бага байна. Энэ нь . Энэ жишээн дээр бага зэргийн ялгаа мэт санагдаж байгаа ч, хэрэв та бүх зааврыг олон мөрөнд хуваавал ялгаа нь илүү их байх болно. хэмжээ нь 6% буурсан байна RUN Дүрэм №3: Зөвхөн шаардлагатай зүйлийг суулгана уу Анхдагч байдлаар, санал болгож буй багцууд болон таны суулгахыг хүссэн багцуудыг суулгадаг. сонголт нь зөвхөн тодорхой заасан багцуудыг суулгахыг хэлдэг бөгөөд санал болгож буй багцуудыг суулгахгүй. 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 Таны харж байгаагаар гүй зураг 70 МБ том байна. Энэ нь . --no-install-recommends анхныхаасаа хэмжээ нь 16% өссөн байна Зурагт ямар файл нэмэгдсэнийг харахын тулд хэрэгслийг - нийтлэлийн төгсгөлд энэ талаар дэлгэрэнгүй уншина уу. шумбах ашиглана уу Дүрэм №4: Суулгасны дараа цэвэрлэх Анхны нь командын дараа командыг агуулдаг. Энэ тушаал нь суулгасны дараа шаардлагагүй болсон багцын жагсаалт болон архивыг устгадаг. Энэ нь зургийн хэмжээнд хэрхэн нөлөөлж байгааг харцгаая, үүнд хүрэхийн тулд би шинэ үүсгэх болно. Dockerfile apt-get install rm -rf /var/lib/apt/lists/* /var/cache/apt/archives цэвэрлэх командгүйгээр Dockerfile RUN apt-get update -qq && \ apt-get install --no-install-recommends -y curl libjemalloc2 libvips libpq-dev Зургийг бүтээхэд анхныхтай бараг ижил хугацаа шаардагдах бөгөөд энэ нь утга учиртай юм. ➜ time docker build -t without-cleaning --no-cache -f without-cleaning.dockerfile . 0.28s user 0.30s system 2% cpu 21.658 total Зургуудын хэмжээг шалгацгаая. ➜ 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 Цэвэрлэгээгүй зураг нь цэвэрлэсэн зургаас 19 МБ том бөгөөд энэ нь байна. хэмжээ нь 5% нэмэгдсэн Хамгийн муу хувилбар Дээр дурдсан дөрвөн оновчлолыг бүгдийг нь ашиглаагүй бол яах вэ? шинэ үүсгэж, дүрсийг бүтээцгээе. Ямар ч оновчлолгүйгээр 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 Хөөх, зургийг бүтээхэд нэг минут гаруй хугацаа зарцуулагдсан. ➜ 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 Оновчлолгүй зураг нь анхныхаасаа 714 МБ том бөгөөд энэ нь байна. Энэ нь оновчтой болгох нь хэр чухал болохыг тодорхой харуулж байгаа тул том зургуудыг бүтээхэд илүү их цаг зарцуулж, илүү их зай эзэлдэг. хэмжээ нь 200% нэмэгдсэн Dockerfile .dockerignore-г үргэлж ашиглаарай файл нь Git-ийн ашигладаг файлтай төстэй. Энэ нь барилгын контекстээс файл, лавлахыг хасахад хэрэглэгддэг. Контекст нь зураг бүтээх үед Docker дэмон руу илгээгддэг файлууд болон сангуудын багц юм. Контекстийг Docker дэмон руу tarball хэлбэрээр илгээдэг тул үүнийг аль болох бага байлгах нь чухал юм. .dockerignore .gitignore Хэрэв ямар нэг шалтгааны улмаас таны төсөлд файл байхгүй бол та үүнийг гараар үүсгэж болно. Би танд албан ёсны Rails эхлэх цэг болгон ашиглахыг санал болгож байна. Энэ нь ямар харагдаж болох жишээг доор харуулав. .dockerignore .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* Төсөлд файл шаардлагагүй файлууд болон сангуудыг (жишээ нь, фолдероос GitHub ажлын урсгал эсвэл -аас JavaScript хамаарал) контекстээс хасах боломжийг олгодоггүй. Энэ нь зураг дээр санамсаргүй байдлаар нууц мэдээллийг нэмэхээс зайлсхийхэд тусалдаг. Жишээлбэл, орчны хувьсагчдыг агуулсан файл эсвэл итгэмжлэлийг тайлахад ашигладаг файл. .dockerfile байгаа нь .github node_modules .env master.key Dive ашиглана уу Дээр дурдсан бүх оновчлолыг тайлбарлахад ойлгомжтой мэт санагдаж магадгүй юм. Хэрэв танд асар том дүр төрх байгаа бол хаанаас эхлэхээ мэдэхгүй байгаа бол яах вэ? Миний дуртай бөгөөд хамгийн хэрэгтэй хэрэгсэл бол юм. Dive нь Docker-ийн зураг, давхаргын агуулгыг судлах, зургийн хэмжээг багасгах арга замыг олоход зориулагдсан TUI хэрэгсэл юм. Dive-г өөрийн системийн багц менежерээр суулгаж болно, эсвэл албан ёсны Docker дүрсийг ашиглан ажиллуулж болно. Хамгийн муу хувилбарынхаа зургийг ашиглацгаая. Dive docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest without-optimizations Дээрх дэлгэцийн агшин дээр та бидний хамгийн оновчтой бус зургийг шалгаж үзэх боломжтой. Dive нь давхарга бүрийн хэмжээ, зургийн нийт хэмжээ, давхарга бүрт өөрчлөгдсөн (нэмсэн, өөрчилсөн, устгасан) файлуудыг харуулдаг. Миний хувьд энэ бол Dive-ийн хамгийн хэрэгтэй шинж чанар юм. Баруун талын самбарт байгаа файлуудыг жагсааснаар та шаардлагагүй файлуудыг хялбархан тодорхойлж, тэдгээрийг зурган дээр нэмэх командуудыг устгаж болно. Dive-д үнэхээр дуртай нэг зүйл бол терминалын UI-тай байхаас гадна орон нутгийн хөгжилд үр дүнтэй байж болох CI-д ээлтэй гаралтыг өгч чаддаг явдал юм. Үүнийг ашиглахын тулд Dive-г орчны хувьсагчийг гэж тохируулан ажиллуулна, командын гаралтыг доорх дэлгэцийн зураг дээр харуулав. CI true docker run -e CI=true --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest without-optimizations Миний хувийн сонголт бол дүр төрхөө сайн байлгахын тулд Dive-г хуваарийн дагуу, жишээлбэл, долоо хоногт нэг удаа ашиглах явдал юм. Дараагийн нийтлэлүүдэд би Dockerfile-ээ шалгахдаа ашигладаг автоматжуулсан ажлын урсгалууд, үүнд Dive болон зэрэг багтана. Hadolint Давхаргыг шахаж болохгүй Миний харсан зургийн хэмжээг багасгах нэг арга бол давхаргыг дарах явдал юм. Зургийн хэмжээг багасгахын тулд хэд хэдэн давхаргыг нэг давхаргад нэгтгэх санаа байв. Docker-д туршилтын хувилбар байсан , үүнээс гадна гэх мэт гуравдагч талын хэрэгслүүд байсан. --squash docker-squash Энэ арга нь өмнө нь ажиллаж байсан ч одоогоор хуучирсан бөгөөд ашиглахыг зөвлөдөггүй. Давхаргыг дарах нь Докерын давхаргын кэш хийх үндсэн шинж чанарыг устгасан. Үүнээс гадна, ашиглах үед та санамсаргүйгээр өмнөх давхаргуудын мэдрэмтгий эсвэл түр зуурын файлуудыг эцсийн зурагт оруулах боломжтой. Энэ бол бүх зүйл эсвэл юу ч биш гэсэн нарийн хяналтгүй хандлага юм. --squash Давхаргыг шахахын оронд олон үе шаттай барилга байгууламжийг ашиглахыг зөвлөж байна. Rails аль хэдийн олон үе шаттай бүтээцүүдийг ашигладаг бөгөөд энэ нь хэрхэн ажилладаг талаар дараагийн өгүүллээр тайлбарлах болно. Dockerfile Дүгнэлт Бусад оновчлолын нэгэн адил Docker-ийн зургийг оновчлох нь . Энэ нь байнгын шалгалт, сайжруулалтыг шаарддаг тасралтгүй үйл явц юм. Би үндсийг нь тусгах гэж оролдсон ч мэдэж, ойлгоход маш чухал. Дараагийн нийтлэлүүдэд би Docker-ийн бүтээцийг илүү хурдан, үр ашигтай болгоход туслах илүү дэвшилтэт техник, хэрэгслүүдийг авч үзэх болно. нэг удаа хийгээд мартагдах боломжгүй