Skip to content

Docker Architecture đŸ—ī¸ ​

Docker-āĻāϰ āĻ•āĻžāĻœā§‡āϰ āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§‹āĻāĻžāϰ āϜāĻ¨ā§āϝ āĻāϰ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āĻŦā§‹āĻāĻž āϖ⧁āĻŦāχ āϜāϰ⧁āϰāĻŋāĨ¤ Docker āĻāĻ•āϟāĻŋ Client-Server āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϝ⧇āĻ–āĻžāύ⧇ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻāĻŦāĻ‚ āĻĄā§‡āĻŽāύ (Daemon) āĻāϕ⧇ āĻ…āĻĒāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰ⧇āĨ¤


ā§§. Client-Server Architecture ​

Docker āĻŽā§‚āϞāϤ āϤāĻŋāύāϟāĻŋ āĻĒā§āϰāϧāĻžāύ āĻ…āĻ‚āĻļ⧇ āĻŦāĻŋāĻ­āĻ•ā§āϤ:

  • Docker Client: āφāĻŽāϰāĻž āϝāĻ–āύ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϞāĻžāχāύ⧇ (Terminal) docker run āĻŦāĻž docker build āϞāĻŋāĻ–āĻŋ, āϤāĻ–āύ āφāĻŽāϰāĻž āφāϏāϞ⧇ Docker Client āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻ›āĻŋāĨ¤ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻāχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϗ⧁āϞ⧋ Docker Daemon-āĻāϰ āĻ•āĻžāϛ⧇ āĻĒāĻžāĻ āĻžāϝāĻŧāĨ¤
  • Docker Host (Daemon): āĻāϕ⧇ dockerd āĻŦāϞāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡ āϚāϞ⧇ āĻāĻŦāĻ‚ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϤ⧈āϰāĻŋ, āĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻŦāĻž āχāĻŽā§‡āĻœā§‡āϰ āĻĻ⧇āĻ–āĻžāĻļā§‹āύāĻž āĻ•āϰ⧇āĨ¤
  • Docker Registry: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϏ⧇āĻ¨ā§āĻŸā§āϰāĻžāϞ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āϝ⧇āĻ–āĻžāύ⧇ āχāĻŽā§‡āϜāϗ⧁āϞ⧋ āϜāĻŽāĻž āĻĨāĻžāϕ⧇ (āϝ⧇āĻŽāύ: Docker Hub)āĨ¤

⧍. Docker Daemon (dockerd) ​

Docker Daemon āĻšāϞ⧋ Docker Engine-āĻāϰ āĻšāĻžāĻ°ā§āϟāĨ¤ āĻāϟāĻŋ API āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻļā§‹āύ⧇ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϝ⧇āĻŽāύ āχāĻŽā§‡āϜ, āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ, āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻāĻŦāĻ‚ āĻ­āϞāĻŋāωāĻŽ āĻŽā§āϝāĻžāύ⧇āϜ āĻ•āϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻĄāĻ•āĻžāϰ āĻĄā§‡āĻŽā§‹āύ āĻ…āĻ¨ā§āϝ āĻĄā§‡āĻŽā§‹āύ⧇āϰ āϏāĻžāĻĨ⧇āĻ“ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤


ā§Š. Docker Client ​

āĻāϟāĻŋ āĻĄāĻ•āĻžāϰ āχāωāϜāĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻžāχāĻŽāĻžāϰāĻŋ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏāĨ¤ āφāĻĒāύāĻŋ āϝāĻ–āύ docker āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻ⧇āύ, āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϏ⧇āχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ dockerd-āϕ⧇ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻā§‡ā§ŸāĨ¤ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϚāĻžāχāϞ⧇ āĻāĻ•āχ āϏāĻžāĻĨ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻĄā§‡āĻŽā§‹āύ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤


ā§Ē. REST API ​

Docker Client āĻāĻŦāĻ‚ Daemon-āĻāϰ āĻŽāĻ§ā§āϝ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻšā§Ÿ REST API-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡āĨ¤ āĻĄāĻ•āĻžāϰ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āφāϏāϞ⧇ āĻāχ API āĻ•āϞ āĻ•āϰ⧇ āĻĄā§‡āĻŽā§‹āύāϕ⧇ āχāύāĻ¸ā§āĻŸā§āϰāĻžāĻ•āĻļāύ āĻĻā§‡ā§ŸāĨ¤ āĻāϰ āĻĢāϞ⧇ āφāĻĒāύāĻŋ āϚāĻžāχāϞ⧇ āϰāĻŋāĻŽā§‹āϟāϞāĻŋāĻ“ āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻĄāĻ•āĻžāϰ āĻŽā§āϝāĻžāύ⧇āϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤


ā§Ģ. Docker Objects ​

āĻĄāĻ•āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϏāĻŽā§Ÿ āφāĻŽāϰāĻž āĻŽā§‚āϞāϤ āĻ•āĻŋāϛ⧁ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰāĻŋ:

  • Images: āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϰāĻŋāĻĄ-āĻ…āύāϞāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϝāĻž āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϤ⧈āϰāĻŋāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§ŸāĨ¤ (āϝ⧇āĻŽāύ: āĻāĻ•āϟāĻŋ āωāĻŦ⧁āĻ¨ā§āϟ⧁ āχāĻŽā§‡āϜ)āĨ¤
  • Containers: āχāĻŽā§‡āĻœā§‡āϰ āĻāĻ•āϟāĻŋ āϰāĻžāύāĻŋāĻ‚ āχāύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϏ āĻšāϞ⧋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰāĨ¤ āĻāϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āφāχāϏ⧋āϞ⧇āĻŸā§‡āĻĄ āĻāύāĻ­āĻžā§ŸāϰāύāĻŽā§‡āĻ¨ā§āϟāĨ¤
  • Networks: āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰāϗ⧁āϞ⧋ āĻāϕ⧇ āĻ…āĻĒāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāĻŦ⧇ āϤāĻžāϰ āϜāĻ¨ā§āϝ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§ŸāĨ¤
  • Volumes: āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻĄāĻŋāϞāĻŋāϟ āĻšā§Ÿā§‡ āϗ⧇āϞ⧇āĻ“ āĻĄā§‡āϟāĻž āϏ⧇āĻ­ āϰāĻžāĻ–āĻžāϰ āϜāĻ¨ā§āϝ āĻ­āϞāĻŋāωāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§ŸāĨ¤

ā§Ŧ. Docker Engine Components ​

āĻŽāĻĄāĻžāĻ°ā§āύ āĻĄāĻ•āĻžāϰ āχāĻžā§āϜāĻŋāύ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ™ā§āϗ⧇āϞ āϟ⧁āϞ āύ⧟, āĻāϟāĻŋ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁ āĻ¸ā§āϤāϰ⧇ āĻŦāĻŋāĻ­āĻ•ā§āϤ:

āĻ•. containerd ​

āφāϗ⧇ āĻĄāĻ•āĻžāϰ āĻĄā§‡āĻŽā§‹āύ āĻāĻ•āĻžāχ āϏāĻŦ āĻ•āĻžāϜ āĻ•āϰāϤāĨ¤ āĻāĻ–āύ āχāĻŽā§‡āϜ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ, āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϞāĻžāχāĻĢāϏāĻžāχāϕ⧇āϞ āĻāĻŦāĻ‚ āĻĒ⧁āĻļ/āĻĒ⧁āϞ āĻ•āϰāĻžāϰ āĻ•āĻžāϜāϗ⧁āϞ⧋ containerd āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āϰāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϰāĻžāύāϟāĻžāχāĻŽāĨ¤

āĻ–. runc ​

āϝāĻ–āύ āĻāĻ•āϟāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰāĻžāϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšā§Ÿ, āϤāĻ–āύ containerd āφāϏāϞ⧇ runc-āϕ⧇ āĻ•āϞ āĻ•āϰ⧇āĨ¤ runc āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āĻšāĻžāϞāĻ•āĻž āϟ⧁āϞ āϝāĻž āĻ…āĻĒāĻžāϰ⧇āϟāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϞ⧇āϭ⧇āϞ⧇ āĻ—āĻŋā§Ÿā§‡ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤


ā§­. Docker Registry ​

Docker Registry āĻšāϞ⧋ āχāĻŽā§‡āĻœā§‡āϰ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāĨ¤

  • Public Registry: Docker Hub āĻšāϞ⧋ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āĻŦ⧜ āĻĒāĻžāĻŦāϞāĻŋāĻ• āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāĨ¤
  • Private Registry: āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϗ⧁āϞ⧋ āύāĻŋāĻœā§‡āϰ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻœā§‡āĻĻ⧇āϰ āĻĒā§āϰāĻžāχāϭ⧇āϟ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ (āϝ⧇āĻŽāύ: Google Container Registry, Azure Container Registry) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤

āĻ•āĻžāĻœā§‡āϰ āĻĒā§āϰāĻŦāĻžāĻš (Workflow Example) ​

  • āφāĻĒāύāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋāϞ⧇āύ: docker run hello-world
  • Client āĻāϟāĻŋ Daemon-āϕ⧇ āĻĒāĻžāĻ āĻžāϞ⧋āĨ¤
  • Daemon āĻĻ⧇āĻ–āϞ⧋ āϞ⧋āĻ•āĻžāϞ āĻŽā§‡āĻļāĻŋāύ⧇ āχāĻŽā§‡āϜāϟāĻŋ āύ⧇āχāĨ¤
  • āϏ⧇ Registry āĻĨ⧇āϕ⧇ āχāĻŽā§‡āϜāϟāĻŋ pull āĻ•āϰāϞ⧋āĨ¤
  • Daemon āĻāĻ•āϟāĻŋ āύāϤ⧁āύ Container āϤ⧈āϰāĻŋ āĻ•āϰāϞ⧋ āĻāĻŦāĻ‚ āϏ⧇āϟāĻŋ āϰāĻžāύ āĻ•āϰāϞ⧋āĨ¤

IMPORTANT

āĻĄāĻ•āĻžāϰ āφāĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āϚāĻžāϰ āĻŦā§‹āĻāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻĒāύāĻŋ āφāϰāĻ“ āϏāĻšāĻœā§‡ āĻāϰ⧋āϰ āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āĻāĻŦāĻ‚ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄā§‡ āϕ⧀ āϘāϟāϛ⧇āĨ¤

Released under the MIT License.