Sobes.tech
Junior

Какво се използва вътре в Docker контейнер?

sobes.tech AI

Отговор от AI

Контейнерът Docker използва редица технологии за изолиране на процесите и ресурсите:

  • Namespaces на ядрото на Linux: Осигуряват изолация за различни системни ресурси, като:

    • PID (Идентификатор на процес): Изолират процесите.
    • Net (Мрежа): Изолират мрежовия стек.
    • Mount (mnt): Изолират точките за монтиране на файловата система.
    • UTS (Unix Timesharing System): Изолират името на хоста и домейна.
    • IPC (Межпроцесна комуникация): Изолират механизмите за межпроцесна комуникация.
    • User (Потребителски и групови идентификатори): Изолират идентификаторите на потребителите и групите.
  • Контролни групи (cgroups): Управляват и ограничават използването на хардуерни ресурси за процесите вътре в контейнера, включително:

    • CPU: Ограничение на използването на процесорно време.
    • Memory: Ограничение на използването на RAM.
    • Block I/O: Ограничение на пропускателната способност на дисковия вход/изход.
    • Net I/O: Ограничение на пропускателната способност на мрежовия вход/изход.
  • Union файлови системи: Предоставят обединена файлова система, състояща се от няколко слоя. Docker използва такива файлови системи като OverlayFS, AUFS, Btrfs, ZFS. Това позволява ефективно управление на съхранението на образи и създаване на слоеве само за промените.

  • Процесът Docker Daemon: Управлява жизнения цикъл на контейнерите (създаване, стартиране, спиране, изтриване).

  • Контейнерна среда за изпълнение: Ниско ниво изпълнение на контейнера. Docker е използвал и поддържа различни среди за изпълнение, като runc (спецификация OCI), containerd.

  • Образ на контейнера: Комплект от слоеве на файловата система и метаданни, необходими за стартиране на приложението.

  • Приложение: Изпълним код, библиотеки, зависимости и конфигурационни файлове, които съставляват самата програма, работеща вътре в контейнера.

По същество, контейнерът е изолиран процес (или набор от процеси), който работи в ограничена среда, предоставена от ядрото на Linux и управлявана от Docker.