Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.
Однажды одноклассник привел мне аналогию: главный компьютер похож на большой дом,docker
сделать это вN
небольшая перегородка. Между этими небольшими перегородками находится отдельный санузел, небольшая кровать, телевизор...
Хоть воробей и маленький, но у него есть все внутренние органы.Эта метафора очень уместна. Linux предоставляет очень полный механизм изоляции, так что каждая ячейка не влияет друг на друга. Даже если в соседней комнате полно весны, моя комната такая же пустынная и не действует на меня.
Docker может реализовать эти функции в зависимости отchroot
,namespace
,cgroup
подожди три老技术
. В этой статье давайте сначала поговорим об этомnamespace
аспект вещей. Ведь изоляция — это первый элемент контейнеров.
Ядро Linux предоставляет до 8 типов пространств имен. В этих независимых пространствах имен ресурсы не влияют друг на друга, и меры изоляции реализованы очень хорошо.
1. 8 типов
Давайте сначала посмотрим, какие пространства имен поддерживаются Linux. в состоянии пройтиunshare
Приказ наблюдать за этими деталями. Выполняется в терминалеman unshare
, появится введение в эти пространства имен.
- Устанавливать (
mnt
) изолировать точку монтирования - Process ID (
pid
) идентификатор карантинного процесса - Network (
net
) для изоляции сетевых устройств, номеров портов и т. д. - Interprocess Communication (
ipc
) для изоляции очередей сообщений System V IPC и POSIX. - UTS Namespace(
uts
) Изолированные от имени хоста и доменного имени - User Namespace (
user
) для изоляции пользователей и групп пользователей
Кроме того, в версии Linux 4.6 и версии 5.6 добавлено два типа изоляции, cgroups и Time соответственно, всего до 8 типов.
- Пространство имен контрольной группы (cgroup) изолирует корневой каталог Cgroups (добавлено в версии 4.6).
- Пространство имен времени изолирует системное время (добавлено в версии 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, добро пожаловать в друзья для дальнейшего общения.