Skip to content

Working with Docker Images đŸ–ŧī¸ ​

Docker Image āĻšāϞ⧋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻŽā§‚āϞ āĻŦā§āϞ⧁-āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻŦāĻž āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϰāĻŋāĻĄ-āĻ…āύāϞāĻŋ (Read-only) āĻĢāĻžāχāϞ āϝāĻžāϤ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϏāĻŦ āϕ⧋āĻĄ, āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ, āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻāĻŦāĻ‚ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻĨāĻžāϕ⧇āĨ¤


ā§§. Docker Image āϕ⧀? (What is an Image?) ​

āϏāĻšāϜ āĻ•āĻĨāĻžā§Ÿ, āχāĻŽā§‡āϜ āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻšāĻŋāĻŽāĻžāϝāĻŧāĻŋāϤ (Frozen) āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇āϰ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟāĨ¤ āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āϗ⧇āĻŽ āχāĻ¨ā§āϏāϟāϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ ISO āĻŦāĻž āχāĻ¨ā§āϏāϟāϞāĻžāϰ āĻĢāĻžāχāϞ āϞāĻžāϗ⧇, āϤ⧇āĻŽāύāĻŋ āĻāĻ•āϟāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϰāĻžāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜ āϞāĻžāϗ⧇āĨ¤ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻšāϞ⧋ āχāĻŽā§‡āĻœā§‡āϰ āĻāĻ•āϟāĻŋ āϰāĻžāύāĻŋāĻ‚ āĻ­āĻžāĻ°ā§āϏāύāĨ¤


⧍. Image Layers (āϞ⧇āϝāĻŧāĻžāϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ) ​

āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜāϗ⧁āϞ⧋ āĻāĻ•āĻžāϧāĻŋāĻ• āϞ⧇āϝāĻŧāĻžāϰ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϤ⧈āϰāĻŋ āĻšā§ŸāĨ¤ āφāĻĒāύāĻŋ āϝāĻ–āύ āϕ⧋āύ⧋ Dockerfile āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧇āύ, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϞ⧇āϝāĻŧāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤

  • Layer Caching: āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻĢāĻžāχāϞ⧇ āϕ⧋āύ⧋ āϛ⧋āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇āύ, āĻĄāĻ•āĻžāϰ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏ⧇āχ āϞ⧇āϝāĻŧāĻžāϰāϟāĻŋ āĻĒ⧁āύāϰāĻžā§Ÿ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧇āĨ¤ āĻŦāĻžāĻ•āĻŋāϗ⧁āϞ⧋ āĻ•ā§āϝāĻžāĻļ (Cache) āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϝāĻž āĻŦāĻŋāĻ˛ā§āĻĄ āĻĒā§āϰāϏ⧇āϏāϕ⧇ āĻ…āύ⧇āĻ• āĻĻā§āϰ⧁āϤ āĻ•āϰ⧇āĨ¤
  • Shared Layers: āϝāĻĻāĻŋ āĻĻ⧁āϟāĻŋ āχāĻŽā§‡āĻœā§‡āϰ āĻŦ⧇āϏ āϞ⧇āϝāĻŧāĻžāϰ (āϝ⧇āĻŽāύ: Ubuntu) āĻāĻ• āĻšā§Ÿ, āϤāĻŦ⧇ āϤāĻžāϰāĻž āϏ⧇āχ āϞ⧇āϝāĻŧāĻžāϰāϟāĻŋ āĻļā§‡ā§ŸāĻžāϰ āĻ•āϰ⧇ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āϏāĻžāĻļā§āϰ⧟ āĻ•āϰ⧇āĨ¤

ā§Š. Base Images (āĻ­āĻŋāĻ¤ā§āϤāĻŋ āχāĻŽā§‡āϜ) ​

āϝ⧇āϕ⧋āύ⧋ āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ Base Image āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋāĨ¤ āĻāϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ•āϟāĻŋ āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ (āϝ⧇āĻŽāύ: āωāĻŦ⧁āĻ¨ā§āϟ⧁, āφāϞāĻĒāĻžāχāύ) āĻŦāĻž āϕ⧋āύ⧋ āĻ˛ā§āϝāĻžāĻ™ā§āĻ—ā§ā§Ÿā§‡āϜ āϰāĻžāύāϟāĻžāχāĻŽ (āϝ⧇āĻŽāύ: āĻĒāĻžāχāĻĨāύ, āύ⧋āĻĄ) āĻšā§Ÿā§‡ āĻĨāĻžāϕ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖ: FROM python:3.9 āĻāĻ–āĻžāύ⧇ python:3.9 āĻšāϞ⧋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻŦ⧇āϏ āχāĻŽā§‡āϜāĨ¤


ā§Ē. Image naming convention & Tags ​

āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āĻœā§‡āϰ āύāĻžāĻŽ āϏāĻžāϧāĻžāϰāĻŖāϤ āϤāĻŋāύāϟāĻŋ āĻ…āĻ‚āĻļ⧇ āĻŦāĻŋāĻ­āĻ•ā§āϤ āĻĨāĻžāϕ⧇:

bash
[Registry]/[User/Org]/[Image Name]:[Tag]
  • Registry: āϕ⧋āĻĨāĻžā§Ÿ āϰāĻžāĻ–āĻž āĻšā§Ÿā§‡āϛ⧇ (āϝ⧇āĻŽāύ: docker.io - āĻĄāĻ•āĻžāϰ āĻšāĻžāĻŦ)āĨ¤
  • User/Org: āĻ•āĻžāϰ āχāĻŽā§‡āϜ (āϝ⧇āĻŽāύ: riponahmed2201)āĨ¤
  • Image Name: āĻ…ā§āϝāĻžāĻĒ⧇āϰ āύāĻžāĻŽ (āϝ⧇āĻŽāύ: my-web-app)āĨ¤
  • Tag: āĻ­āĻžāĻ°ā§āϏāύ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāĻĢāĻžāϝāĻŧāĻžāϰ (āϝ⧇āĻŽāύ: v1.0, latest)āĨ¤

TIP

āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āϕ⧋āύ⧋ āĻŸā§āϝāĻžāĻ— āύāĻž āĻĻ⧇āύ, āĻĄāĻ•āĻžāϰ āĻ…āĻŸā§‹āĻŽā§‡āϟāĻŋāĻ• latest āĻŸā§āϝāĻžāĻ— āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āϤāĻŦ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ­āĻžāĻ°ā§āϏāύ āĻŸā§āϝāĻžāĻ— (āϝ⧇āĻŽāύ: 1.2.3) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻ­āĻžāϞ⧋āĨ¤


ā§Ģ. Official vs User Images ​

  • Official Images: āĻāϗ⧁āϞ⧋ āĻĄāĻ•āĻžāϰ āϟāĻŋāĻŽā§‡āϰ āĻĻā§āĻŦāĻžāϰāĻž āϭ⧇āϰāĻŋāĻĢāĻžāχāĻĄ āĻāĻŦāĻ‚ āĻŽā§‡āχāύāĻŸā§‡āχāύ āĻ•āϰāĻž āĻšā§Ÿ (āϝ⧇āĻŽāύ: nginx, python, mongo)āĨ¤ āĻāϗ⧁āϞ⧋āϰ āύāĻžāĻŽā§‡āϰ āφāϗ⧇ āϕ⧋āύ⧋ āχāωāϜāĻžāϰāύ⧇āĻŽ āĻĨāĻžāϕ⧇ āύāĻžāĨ¤
  • User Images: āĻāϗ⧁āϞ⧋ āϏāĻžāϧāĻžāϰāĻŖ āχāωāϜāĻžāϰ āĻŦāĻž āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϗ⧁āϞ⧋āϰ āϤ⧈āϰāĻŋ (āϝ⧇āĻŽāύ: jitesoft/node)āĨ¤ āĻāϗ⧁āϞ⧋āϰ āύāĻžāĻŽā§‡āϰ āĻļ⧁āϰ⧁āϤ⧇ āĻ…āĻŦāĻļā§āϝāχ āχāωāϜāĻžāϰāύ⧇āĻŽ āĻŦāĻž āĻ…āĻ°ā§āĻ—āĻžāύāĻžāχāĻœā§‡āĻļāύ āύ⧇āĻŽ āĻĨāĻžāϕ⧇āĨ¤

ā§Ŧ. Image ID vs Image Name ​

  • Image Name: āĻāϟāĻŋ āĻŽāĻžāύ⧁āώ⧇āϰ āĻĒ⧜āĻžāϰ āϜāĻ¨ā§āϝ (āϝ⧇āĻŽāύ: ubuntu:20.04)āĨ¤ āĻāϟāĻŋ āχāωāύāĻŋāĻ• āύāĻž-āĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ (āĻŸā§āϝāĻžāĻ— āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϝ⧋āĻ—ā§āϝ)āĨ¤
  • Image ID: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻ• SHA⧍ā§Ģā§Ŧ āĻšāĻžāĻļ (Hash)āĨ¤ āĻāϟāĻŋ āχāĻŽā§‡āĻœā§‡āϰ āĻ•āĻ¨ā§āĻŸā§‡āĻ¨ā§āĻŸā§‡āϰ āĻ“āĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϤ⧈āϰāĻŋ āĻšā§ŸāĨ¤ āχāĻŽā§‡āϜāϟāĻŋ āχāωāύāĻŋāĻ•āϞāĻŋ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāĻĢāĻžāχ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāχāĻĄāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§ŸāĨ¤

ā§­. Image Size (āχāĻŽā§‡āϜ āϏāĻžāχāϜ) ​

āχāĻŽā§‡āĻœā§‡āϰ āϏāĻžāχāϜ āĻ•āĻŽāĻžāύ⧋ āϖ⧁āĻŦāχ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāϰāĻŖ:

  • āĻĻā§āϰ⧁āϤ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ“ āφāĻĒāϞ⧋āĻĄ āĻšā§ŸāĨ¤
  • āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻ•āĻŽ āϞāĻžāϗ⧇āĨ¤
  • āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻŦ⧇āĻļāĻŋ āĻĨāĻžāϕ⧇ (āĻ…āĻĒā§āĻ°ā§Ÿā§‹āϜāύ⧀āϝāĻŧ āĻĢāĻžāχāϞ āĻ•āĻŽ āĻĨāĻžāϕ⧇)āĨ¤

IMPORTANT

āχāĻŽā§‡āĻœā§‡āϰ āϏāĻžāχāϜ āĻ•āĻŽāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ Alpine āĻŦāĻž Distroless āχāĻŽā§‡āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻŦ⧇āĻ¸ā§āϟ āĻĒā§āĻ°ā§āϝāĻžāĻ•āϟāĻŋāϏāĨ¤


TIP

āχāĻŽā§‡āϜ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ­āĻžāϞ⧋āĻ­āĻžāĻŦ⧇ āϜāĻžāύāĻž āĻĨāĻžāĻ•āϞ⧇ āφāĻĒāύāĻŋ āφāϰāĻ“ āĻĻāĻ•ā§āώ āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞ āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύāĨ¤

Released under the MIT License.