ചെറിയതും സുരക്ഷിതവുമായ കണ്ടെയ്നർ ചിത്രങ്ങൾ
നിങ്ങളുടെ ചിത്രം ആവശ്യമുള്ളതിലും പത്തിരട്ടി വലുതായിരിക്കും. എന്റെ കൈകൾ എങ്ങനെ ചുരുങ്ങുന്നു, കടുപ്പിക്കുന്നു.
നിങ്ങളുടെ ചിത്രം ആവശ്യമുള്ളതിലും പത്തിരട്ടി വലുതായിരിക്കും. എന്റെ കൈകൾ എങ്ങനെ ചുരുങ്ങുന്നു, കടുപ്പിക്കുന്നു.

ഓടിപ്പോകുക. docker images ഏതാണ്ട് ഏത് പ്രോജക്റ്റിലും 800 MB, 1 GB, ചിലപ്പോൾ അതിലധികവും വലുപ്പമുള്ള ചിത്രങ്ങൾ കാണാം. ഏതാനും മെഗാബൈറ്റ് കോഡുള്ള ഒരു ആപ്ലിക്കേഷന് വേണ്ടി. ബാക്കി ഒരു പൂർണ്ണ ഓപ്പറേറ്റിങ് സിസ്റ്റം ആണ്, കമ്പൈലറുകൾ, പാക്കേജ് മാനേജർമാർ, ഷെല്ലുകൾ, ഡീബഗ്ഗിംഗ് ടൂളുകൾ, അവശേഷിക്കുന്ന ഫയലുകൾ.
വലിയ ചിത്രങ്ങള് നിർമ്മിക്കാനും, വലിച്ചെടുക്കാനും തുടങ്ങാനും കൂടുതൽ സമയമെടുക്കും. കൂടാതെ, ഓരോ അധിക പാക്കേജും സുരക്ഷാ അപകടം കൂട്ടുന്നു. ഇതാ എന്റെ കയ്യിലെ പൈപ്പ് ചെറുതും സുരക്ഷിതവുമാക്കുന്നു.
ഏറ്റവും വലിയ വിജയം, ഇതുവരെ. നിങ്ങളുടെ ആപ്ലിക്കേഷൻ കംപൈൽ ചെയ്യുന്നതിന് എല്ലാ ബിൽഡ് ടൂളുകളുമായും ഒരു ഘട്ടം ഉപയോഗിക്കുക, തുടർന്ന് ഫലം മാത്രം ഒരു മിനിമം അന്തിമ ചിത്രത്തിലേക്ക് പകർത്തുക.
# Build stage
FROM golang:1.25 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /app ./cmd/server
# Final stage
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /app /app
USER nonroot
ENTRYPOINT ["/app"]
അവസാന ചിത്രത്തില് ബൈനറി അടങ്ങിയിരിക്കുന്നു. മറ്റൊന്നും ഇല്ല. ഷെല്ലും പാക്കേജ് മാനേജറും കംപൈലറും ഇല്ല. ഒരു ഗോ ആപ്പിനായി, അതായത് ഒരു ജിഗാബൈറ്റിൽ നിന്ന് ഇരുപത് മെഗാബൈറ്റിലേക്ക് പോകുക.
മറ്റ് ഭാഷകളിലും ഇതേ രീതി തന്നെ: പൂർണ്ണ SDK ഇമേജ് ഉപയോഗിച്ച് നിർമ്മിക്കുക, സ്ലിം റൺടൈം ഇമേജ് കൊണ്ട് പ്രവർത്തിപ്പിക്കുക.
നിങ്ങളുടെ ചിത്രത്തിന്റെ വലുപ്പവും അതിന്റെ ദുർബലതയും അടിസ്ഥാന ചിത്രമാണ് തീരുമാനിക്കുന്നത്.
ubuntu, debian, node, python): സുഖകരവും വലുതും, ആവശ്യമില്ലാത്ത ധാരാളം പാക്കേജുകളും.python:3.13-slim, node:22-slim): നല്ലൊരു മധ്യസ്ഥം.ഒരു കുറിപ്പ് ബിറ്റനാമി: ബിറ്റ്നാമിയുടെ സൌജന്യ കണ്ടെയ്നർ ചിത്രങ്ങളും ഹെൽം ചാർട്ടുകളും പല ടീമുകളും ആശ്രയിച്ചു. 2025 ൽ, ബ്രോഡ്കോം സ്വതന്ത്ര കാറ്റലോഗ് ഗണ്യമായി മാറ്റി, മിക്ക പതിപ്പുകളുള്ള ചിത്രങ്ങളും അപ്ഡേറ്റുകൾ ലഭിക്കാത്ത ഒരു ലെഗസി റിപ്പോസിറ്ററിയിലേക്ക് നീക്കി. നിങ്ങളുടെ ചാർട്ടുകളോ ഡോക്കർ ഫയലുകളോ ഇപ്പോഴും ബിറ്റ്നാമി ഇമേജുകളിലേക്ക് റഫറൻസ് ചെയ്യുന്നുണ്ടെങ്കിൽ, അവ ഇപ്പോൾ പരിശോധിച്ച് പിന്തുണയ്ക്കുന്ന ബദലുകളിലേക്ക് മാറുക.
നിങ്ങളുടെ ചിത്രത്തിലെ ഓരോ പാക്കേജും നിങ്ങൾ പായ്ച്ച് ചെയ്യേണ്ട ഒരു പാക്കേജ് ആണ്. പരിഹരിക്കാന് ഏറ്റവും എളുപ്പമുള്ള ദോഷം നിങ്ങള് ഒരിക്കലും അയക്കാത്തതാണ്.
ഡോക്കർ ലെയറുകളെ ക്രമത്തിൽ നിർമ്മിക്കുന്നു, എന്തെങ്കിലും മാറ്റം വരുന്നതുവരെ കാഷെ ചെയ്ത ലെയറുകളെയും പുനരുപയോഗിക്കുന്നു. അതുകൊണ്ട് ക്രമം പ്രധാനമാണ്:
package.json, go.mod, requirements.txt), ആശ്രിതത്വങ്ങള് ഇൻസ്റ്റോൾ ചെയ്യുക, പിന്നെ കോഡിന്റെ ബാക്കി പകര് ക്കുക. കോഡ് മാറ്റം അനുസരണ പാളി അസാധുവാക്കുന്നില്ല..dockerignore സൂക്ഷിക്കുക node_modules, .git, ടെസ്റ്റ് ഡാറ്റയും പ്രാദേശിക രഹസ്യങ്ങളും ബിൽഡ് പശ്ചാത്തലത്തിൽ നിന്ന്.RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txt
--cache-to ഒപ്പം --cache-from കൂടെ docker buildx), അതിനാൽ പൈപ്പ്ലൈൻ പഴയ പണിയുന്ന നിന്ന് പാളികൾ വീണ്ടും ഉപയോഗിക്കുന്നു.USER ഡോക്കര് ഫയലിലും runAsNonRoot: true കുബർനെറ്റീസിൽ.--mount=type=secret) നിർമ്മാണ സമയത്ത് ആവശ്യമുള്ള എല്ലാത്തിനും.ഐ. സി. യിൽ ചിത്രങ്ങൾ സ്കാൻ ചെയ്ത്, ഗുരുതരമായ, പരിഹരിക്കാവുന്ന ദോഷങ്ങളുള്ള ബിൽഡിൽ പരാജയപ്പെടുക:
trivy image --severity HIGH,CRITICAL --ignore-unfixed \
--exit-code 1 registry.example.com/shop-api:1.4.2
ട്രിവി ഒപ്പം ഗ്രിപ്പ് രണ്ടും മികച്ച ഓപ്പൺ സോഴ്സ് സ്കാനറുകളാണ്. ഡോക്കർ സ്കൌട്ടും മിക്ക രജിസ്ട്രികളും ഓട്ടോമാറ്റിക് സ്കാൻ ചെയ്യുന്നു.
രണ്ടു നുറുങ്ങുകൾ: ഉപയോഗിക്കുക --ignore-unfixed (അല്ലെങ്കിൽ സമാനമായ) അതിനാൽ നിങ്ങൾ ആരും പരിഹരിക്കാൻ കഴിയില്ല ദോഷങ്ങളുമുണ്ട് തടയുന്നില്ല, പതിവായി ചിത്രങ്ങൾ വീണ്ടും സ്കാൻ, മാത്രമല്ല ബിൽഡ് സമയം, പുതിയ ദോഷങ്ങളുണ്ട് കാരണം പഴയ ചിത്രങ്ങൾ എല്ലാ ദിവസവും കണ്ടെത്തി.
നിങ്ങളുടെ ഏറ്റവും വലിയ ചിത്രം എടുക്കുക. ഒരു മൾട്ടി-സ്റ്റേജ് ബിൽഡും ഒരു സ്ലിം അല്ലെങ്കിൽ ഡിസ്ട്രോലെസ് ബേസും ചേർക്കുക. ട്രിവിയെ മുമ്പും ശേഷവും ഓടിക്കുക. വലിപ്പത്തിലും സുരക്ഷയിലും വ്യത്യാസം സാധാരണയായി വളരെ വലുതാണ്, ടീമിലെ മറ്റുള്ളവരും അത് ആഗ്രഹിക്കുന്നു.
എന്റെ അഭിപ്രായം: നിങ്ങളുടെ ആപ്പ് ഷിപ്പ് ചെയ്യുക, ഒരു ഓപ്പറേറ്റിങ് സിസ്റ്റം മുഴുവനല്ല. ചെറിയ ചിത്രങ്ങൾ വേഗതയേറിയതും വിലകുറഞ്ഞതും സുരക്ഷിതവുമാണ്.
ഡെസ്ലി