5 минут, чтобы быстро понять основные принципы Docker

Linux Docker

Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.

Однажды одноклассник привел мне аналогию: главный компьютер похож на большой дом,dockerсделать это вNнебольшая перегородка. Между этими небольшими перегородками находится отдельный санузел, небольшая кровать, телевизор...

Хоть воробей и маленький, но у него есть все внутренние органы.Эта метафора очень уместна. Linux предоставляет очень полный механизм изоляции, так что каждая ячейка не влияет друг на друга. Даже если в соседней комнате полно весны, моя комната такая же пустынная и не действует на меня.

Docker может реализовать эти функции в зависимости отchroot,namespace,cgroupподожди три老技术. В этой статье давайте сначала поговорим об этомnamespaceаспект вещей. Ведь изоляция — это первый элемент контейнеров.

Ядро Linux предоставляет до 8 типов пространств имен. В этих независимых пространствах имен ресурсы не влияют друг на друга, и меры изоляции реализованы очень хорошо.

1. 8 типов

Давайте сначала посмотрим, какие пространства имен поддерживаются Linux. в состоянии пройтиunshareПриказ наблюдать за этими деталями. Выполняется в терминалеman unshare, появится введение в эти пространства имен.

  1. Устанавливать (mnt) изолировать точку монтирования
  2. Process ID (pid) идентификатор карантинного процесса
  3. Network (net) для изоляции сетевых устройств, номеров портов и т. д.
  4. Interprocess Communication (ipc) для изоляции очередей сообщений System V IPC и POSIX.
  5. UTS Namespace(uts) Изолированные от имени хоста и доменного имени
  6. User Namespace (user) для изоляции пользователей и групп пользователей

Кроме того, в версии Linux 4.6 и версии 5.6 добавлено два типа изоляции, cgroups и Time соответственно, всего до 8 типов.

  1. Пространство имен контрольной группы (cgroup) изолирует корневой каталог Cgroups (добавлено в версии 4.6).
  2. Пространство имен времени изолирует системное время (добавлено в версии 5.6)

2. 1 пример

пройти черезunshareКоманда, вы можете быстро установить некоторые изолированные примеры, мы берем самые простые и интуитивныеpid namespaceДавайте посмотрим, как это работает.

Как мы все знаем, номер процесса Linux1, называетсяsystemdпроцесс. Но в Docker мы делаемpsкоманду, но видят только очень небольшой список процессов.

Выполните следующую команду, чтобы войти в изолированную среду и использовать bash в качестве корневого процесса:

unshare --pid --fork --mount-proc /bin/bash

Эффект показан на рисунке. Видно, что наш bash стал процессом №1, а информация о процессе хоста и других изолированных окружений здесь невидима.

Сначала в изолированной среде выполнитеsleep 1000. Откройте другой терминал и выполните его на хостеpstree, мы увидим информацию о ходе выполнения этой изолированной среды.

Затем на хосте сравните информацию о пространстве имен процесса, соответствующего спящему режиму, с информацией о пространстве имен хоста. Видно, что ихpid namespace, соответствующие значения различны.

Вот другая экспериментальная команда пространства имен, вы можете попрактиковаться.

3. Эксперимент

unshare --mount --fork /bin/bash

Создайтеmount namespace, и в каждой другой среде используйте другой каталог монтирования.

unshare --uts --fork /bin/bash

uts можно использовать для изоляции имен хостов, позволяя каждому пространству имен иметь отдельное имя хоста, вы можете передатьhostnameкоманду изменить.

unshare --ipc --fork /bin/bash

Пространство имен IPC в основном используется для изоляции межпроцессного взаимодействия. Межпроцессное взаимодействие Linux, есть каналы, сигналы, сообщения, разделяемая память, семафоры, сокеты и другие методы. Использование пространства имен IPC означает, что все эти методы связи в пространстве имен не будут работать! Впрочем, это именно то, на что мы рассчитывали.

unshare --user -r /bin/bash

Пространство имен пользователя, это очень легко понять. Мы можем создать учетную запись xjjdog в одном пространстве имен или создать учетную запись xjjdog в другом пространстве имен, и они не влияют друг на друга.

unshare --net --fork /bin/bash

net namespaceЭто очень полезно.它可以用来隔离网络设备、IP 地址和端口等信息。

End

Видно, что с помощью различных пространств имен Linux может точно настроить изоляцию различных ресурсов. Докер сам по себе тоже新瓶装旧酒игрушка. Инновация Docker заключается в том, что он добавляет центральный репозиторий и инкапсулирует множество простых в использовании команд.

Вы можете обнаружить, что до сих пор мы не изолировали использование ресурсов ЦП и памяти, и нет соответствующего пространства имен для решения этих проблем.

Функция ограничения ресурсов заключается в использованииCgroupsвыполняется путем настройки квот иNamespaceЭто не имеет значения. Мы представим технологию Cgroups в следующей статье.

Наконец, прикрепите диаграмму жизненного цикла Docker. источник(docker-Сайгон.GitHub.IO/post/docker…). Студенты, которым это нужно, могут добавить своих друзей, чтобы получить это.

Докер развился до настоящего времени, и цепочка инструментов приложения была очень зрелой, и многие студенты уже знакомы с ней.Если вы очень заинтересованы в контейнерной технологии, лучше прочитать больше о лежащих в ее основе принципах. Таким образом, независимо от того, продвигает ли Google свой собственный контейнер или продолжает использовать докер, его можно быстро освоить.

Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.​