← Lahat ng tanong
Ano ang Docker at paano ito gumagana?
MadalasBaguhanDevOps

Ano ang Docker at paano ito gumagana?

Maikling sagot
Ang Docker ay isang bukas na platform para sa packaging at pagpapatakbo ng mga application bilang mga lalagyan: nakahiwalay na mga proseso na nagbabahagi ng Linux kernel ng host (sa pamamagitan ng mga namespace at cgroup) sa halip na nangangailangan ng isang buong virtual machine. Gumagamit ito ng modelo ng client-server: ang Ang docker client ay nagpapadala ng mga command sa isang REST API sa dockerd daemon, na bumubuo ng mga larawan at nagpapatakbo ng mga lalagyan mula sa kanila.

Bakit ito umiiral. Hinahayaan ka ng Docker na i-package ang isang application kasama ang lahat ng mga dependency nito (mga library, config, runtime) sa isang artifact — isang image — at patakbuhin ito nang pareho sa isang developer laptop, sa CI, at sa produksyon. Nalulutas nito ang klasikong "gumagana sa aking makina" na problema.

Container vs. virtual machine. Ang isang VM ay nag-virtualize ng hardware at nagpapadala ng isang buong guest OS na may sarili nitong kernel. Ang container ay isang nakahiwalay na proseso na gumagamit ng kernel ng host. Bilang resulta, ang mga lalagyan ay mas magaan, nagsisimula sa mga fraction ng isang segundo, at gumagamit ng mas kaunting mga mapagkukunan. Ngunit ang isang container ay hindi isang magaan na VM: ito ay nakatali sa host kernel, at ang paghihiwalay na hangganan nito ay mas mahina kaysa sa isang VM. Ang isang VM ay may hardware-enforced isolation, samantalang ang isang vulnerability sa shared kernel ay maaaring potensyal na makatakas mula sa isang container — iyon ang trade-off para sa bilis at density. Dapat tumugma ang host sa uri ng lalagyan: Ang mga lalagyan ng Linux ay nangangailangan ng isang kernel ng Linux, ang mga lalagyan ng Windows ay nangangailangan ng isang kernel ng Windows. Sa macOS at Windows, ang Docker Desktop ay malinaw na nagpapatakbo ng isang maliit na Linux VM (hal. sa pamamagitan ng WSL2), kaya ang mga lalagyan ng Linux doon ay nagbabahagi ng kernel ng VM na iyon, hindi ang kernel ng iyong OS.

Arkitektura (client-server). Ayon sa dokumentasyon ng Docker:

  • Ang docker client ay ang pangunahing paraan ng pakikipag-ugnayan ng mga user sa Docker; Ang mga command tulad ng docker run ay ipinadala sa daemon.
  • Ang dockerd daemon ay "gumagawa ng mabigat na pag-angat" ng pagbuo, pagpapatakbo, at pamamahagi ng mga lalagyan at pinamamahalaan ang mga bagay gaya ng mga larawan, lalagyan, network, at volume.
  • Nakikipag-usap ang kliyente sa daemon sa pamamagitan ng REST API sa pamamagitan ng UNIX socket o isang network interface, upang maaari silang tumakbo sa iba't ibang machine.
  • Isang registry ang nag-iimbak ng mga larawan; ang default na pampubliko ay ang Docker Hub.

Mga larawan at lalagyan. Isang madaling gamitin na pagkakatulad: ang isang imahe ay parang isang klase (o isang programa sa disk), at isang lalagyan ay isang halimbawa nito (isang tumatakbong proseso); maaari kang magsimula ng maraming lalagyan mula sa isang larawan.

  • Ang image ay isang read-only na template na may mga tagubilin para sa paggawa ng container, na binuo mula sa mga layer. Ito ay tinukoy ng isang Dockerfile; kapag binago mo ito, ang binagong mga layer lamang ang itinayong muli.
  • Ang container ay isang runnable na instance ng isang imahe. Sa itaas ng mga read-only na layer ng imahe, nagdaragdag ito ng manipis na writable layer (copy-on-write); anumang nakasulat doon ay nawala kapag ang lalagyan ay inalis — na kung bakit ang patuloy na data ay nangangailangan ng mga volume.

Paano gumagana ang paghihiwalay (sa ilalim ng hood). Hindi direktang tinatawag ng dockerd ang kernel — itinatalaga nito ang pamamahala ng lifecycle ng container sa containerd, na humihiling ng OCI runtime; sa Docker ang default ay runc, ngunit ang runtime ay pluggable (crun, gVisor, Kata, atbp.). Ang aktwal na paghihiwalay ay nagmumula sa mga tampok ng Linux kernel:

  • namespaces ihiwalay ang mga mapagkukunan (bawat man7 page ay mayroong 8 uri: PID, network, mount, UTS, IPC, user, cgroup, oras). "Nakikita" lang ng isang proseso ang sarili nitong mga PID, sarili nitong network stack, at iba pa.
  • cgroups (control groups) limit at account para sa paggamit ng resource (CPU, memory, I/O).

Mga karaniwang follow-up. Naka-cache ang mga layer ng imahe; Ang docker compose ay nagpapatakbo ng mga multi-container na app; nagpapatuloy ang data sa pamamagitan ng mga volume (ang lalagyan ay ephemeral bilang default); at ini-standardize ng OCI ang format ng imahe (image-spec), ang runtime (runtime-spec), at ang registry distribution protocol (distribution-spec) — pinapanatili ng tatlong detalyeng ito na interoperable ang ecosystem.

DockerMga lalagyan

I-download na at subukan nang libre para sa iyong mga gawain!

I-download para sa Windows
10 15 libreng credits • Walang credit card na kailanganBersyon: Naglo-load…

Walang install - i-download at patakbuhin. Walang rehistro - mag-log in gamit ang Google.