Skip to content

Distroless Images đŸ›Ąī¸ ​

āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋāϰ āĻĻāĻŋāĻ• āĻĨ⧇āϕ⧇ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜāϕ⧇ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧇āĻļāĻŋ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ Distroless Images āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āĻāϟāĻŋ āϗ⧁āĻ—āϞ (Google) āĻ•āĻ°ā§āϤ⧃āĻ• āĻļ⧁āϰ⧁ āĻšāĻ“ā§ŸāĻž āĻāĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāĨ¤


ā§§. Distroless Image āĻ•āĻŋ? ​

Distroless āχāĻŽā§‡āϜ āĻšāϞ⧋ āĻāĻŽāύ āĻāĻ• āϧāϰāύ⧇āϰ āχāĻŽā§‡āϜ āϝāĻžāϤ⧇ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ“āχ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āĻĢāĻžāχāϞ āĻāĻŦāĻ‚ āϤāĻžāϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϰāĻžāύāϟāĻžāχāĻŽ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ (āϝ⧇āĻŽāύ: libc, SSL certificates) āĻĨāĻžāϕ⧇āĨ¤

āĻāϤ⧇ āϕ⧋āύ⧋:

  • āĻļ⧇āϞ (Shell/bash/sh) āĻĨāĻžāϕ⧇ āύāĻžāĨ¤
  • āĻĒā§āϝāĻžāϕ⧇āϜ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ (apt, apk) āĻĨāĻžāϕ⧇ āύāĻžāĨ¤
  • āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āϞāĻŋāύāĻžāĻ•ā§āϏ āχāωāϟāĻŋāϞāĻŋāϟāĻŋ (ls, cd, mkdir) āĻĨāĻžāϕ⧇ āύāĻžāĨ¤

⧍. āϕ⧇āύ Distroless āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ? (Benefits) ​

  1. Minimal Attack Surface: āĻšā§āϝāĻžāĻ•āĻžāϰāϰāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āĻļ⧇āϞ āĻŦāĻž āĻĒā§āϝāĻžāϕ⧇āϜ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇ āĻ…ā§āϝāĻžāϟāĻžāĻ• āĻ•āϰ⧇āĨ¤ āϝ⧇āĻšā§‡āϤ⧁ āĻāϤ⧇ āĻāϗ⧁āϞ⧋ āύ⧇āχ, āϤāĻžāχ āĻ…ā§āϝāĻžāϟāĻžāĻ• āĻ•āϰāĻž āĻĒā§āϰāĻžā§Ÿ āĻ…āϏāĻŽā§āĻ­āĻŦāĨ¤
  2. Reduced Image Size: āĻ…āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϏāĻŦ āĻĢāĻžāχāϞ āĻŦāĻžāĻĻ āĻĻ⧇āĻ“ā§ŸāĻžā§Ÿ āĻāϗ⧁āϞ⧋ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āϛ⧋āϟ āϏāĻžāχāĻœā§‡āϰ āĻšā§ŸāĨ¤
  3. Better Compliance: āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻ…āĻĄāĻŋāĻŸā§‡ āĻāϗ⧁āϞ⧋ āϖ⧁āĻŦ āϏāĻšāĻœā§‡āχ āϟāĻŋāϕ⧇ āϝāĻžā§Ÿ āĻ•āĻžāϰāĻŖ āĻāϤ⧇ āϕ⧋āύ⧋ āϏāĻŋāĻ­āĻŋā§Ÿā§āϝāĻžāĻ°ā§āϟāĻŋ (CVE) āĻĨāĻžāϕ⧇ āύāĻž āĻŦāϞāϞ⧇āχ āϚāϞ⧇āĨ¤

ā§Š. āĻŽāĻžāĻ˛ā§āϟāĻŋ-āĻ¸ā§āĻŸā§‡āϜ āĻŦāĻŋāĻ˛ā§āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ (Usage) ​

Distroless āχāĻŽā§‡āĻœā§‡ āϝ⧇āĻšā§‡āϤ⧁ āϕ⧋āύ⧋ āĻĒā§āϝāĻžāϕ⧇āϜ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āύ⧇āχ, āϤāĻžāχ āφāĻĒāύāĻŋ āĻāϤ⧇ āύāϤ⧁āύ āĻ•āĻŋāϛ⧁ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ Multi-stage build āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

dockerfile
# Stage 1: Build stage
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

# Stage 2: Final stage
FROM gcr.io/distroless/nodejs18-debian11
WORKDIR /app
COPY --from=builder /app .
CMD ["index.js"]

ā§Ē. āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āĻšā§āϝāĻžāϞ⧇āĻžā§āϜ (Debugging Challenges) ​

Distroless āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧜ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ⧋ āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚āĨ¤ āϝ⧇āĻšā§‡āϤ⧁ āĻāϤ⧇ bash āĻŦāĻž sh āύ⧇āχ, āϤāĻžāχ āφāĻĒāύāĻŋ docker exec āĻ•āϰ⧇ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇āϰ āϭ⧇āϤāϰ⧇ āĻĸ⧁āĻ•āϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤

  • āϏāĻŽāĻžāϧāĻžāύ: āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āĻœā§‡āϰ āĻāĻ•āϟāĻŋ debug āĻ­āĻžāĻ°ā§āϏāύ āĻĨāĻžāϕ⧇ (āϝ⧇āĻŽāύ: gcr.io/distroless/nodejs18-debian11:debug), āϝ⧇āϟāĻžāϤ⧇ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻ¸ā§āϤāĻŦāĻ•ā§āϏ (BusyBox) āĻļ⧇āϞ āĻĨāĻžāϕ⧇āĨ¤ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āĻŦāĻž āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚ā§Ÿā§‡āϰ āϏāĻŽā§Ÿ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤

ā§Ģ. āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ (Use Cases) ​

  • āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āϝ⧇āĻ–āĻžāύ⧇ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧇āĻļāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤
  • āϜāĻžāĻ­āĻž (Java), āĻĒāĻžāχāĻĨāύ (Python), āύ⧋āĻĄ (Node.js) āĻŦāĻž āĻ—ā§‹ (Go) āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝāĨ¤
  • āĻŽāĻžāχāĻ•ā§āϰ⧋āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϝ⧇āĻ–āĻžāύ⧇ āχāĻŽā§‡āϜ āϏāĻžāχāϜ āĻāĻŦāĻ‚ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻšāĻžāĻ°ā§āĻĄā§‡āύāĻŋāĻ‚ āĻĒā§āĻ°ā§Ÿā§‹āϜāύāĨ¤

ā§Ŧ. āϜāύāĻĒā§āϰāĻŋ⧟ āĻ•āĻŋāϛ⧁ Distroless āχāĻŽā§‡āϜ ​

āϗ⧁āĻ—āϞ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ (gcr.io) āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ˛ā§āϝāĻžāĻ™ā§āĻ—ā§ā§Ÿā§‡āĻœā§‡āϰ āϜāĻ¨ā§āϝ āχāĻŽā§‡āϜ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§Ÿ:

  • gcr.io/distroless/static (Go/Rust āĻŦāĻžāχāύāĻžāϰāĻŋāϰ āϜāĻ¨ā§āϝ)
  • gcr.io/distroless/java17
  • gcr.io/distroless/nodejs18-debian11
  • gcr.io/distroless/python3

āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ (Summary) ​

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āϞ⧇āϭ⧇āϞ⧇āϰ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āϚāĻžāύ, āϤāĻŦ⧇ Distroless āĻšāϞ⧋ āϏ⧇āϰāĻž āĻšā§Ÿā§‡āϏāĨ¤ āϝāĻĻāĻŋāĻ“ āĻļ⧁āϰ⧁āϤ⧇ āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āĻāĻ•āϟ⧁ āĻ•āĻ āĻŋāύ āĻŽāύ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻāϰ āϏ⧁āĻĢāϞ āĻ…āύ⧇āĻ•āĨ¤


IMPORTANT

āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻĄāĻŋāĻĒā§āϞ⧟āĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϏāĻŽā§Ÿ āϏāĻŦāϏāĻŽā§Ÿ Distroless āχāĻŽā§‡āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻ•āĻĨāĻž āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰ⧁āύ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āϟāĻŋāĻŽā§‡āϰ āϤāĻžāϤ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻĻāĻ•ā§āώāϤāĻž āĻĨāĻžāϕ⧇āĨ¤

Released under the MIT License.