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
āĻĄāĻāĻžāϰ āĻāϰā§āĻāĻŋāĻā§āĻāĻāĻžāϰ āĻŦā§āĻāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻĒāύāĻŋ āĻāϰāĻ āϏāĻšāĻā§ āĻāϰā§āϰ āĻĄāĻŋāĻŦāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āĻāĻŦāĻ āĻŦā§āĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āĻā§ āĻāĻāĻā§āĨ¤