Docker. Образы контейнеров

Образ контейнера состоит из двух частей: корневой файловой системы и конфигурации. при запуске контейнера на основе его образа создается экземпляр контейнера, а образ включает корневую файловую систему. Если выполнить команду docker run -it alpine sh и сравнить с тем, что находится внутри созданного вами вручную контейнера, то общая схема каталогов и файлов окажется той же, а если версия Alpine такая же, то они совпадут в точности. Часть команд Dockerfile (например, FROM, ADD, COPY и RUN) изменяет содержимое корневой файловой системы, включенной в образ. Другие команды,например USER, PORT и ENV, влияют на хранимую в образе параллельно с корневой файловой системой информацию о настройках. Просмотреть ее можно, выполнив для нужного образа команды docker inspect. Эти настройки задают Docker значения параметров времени выполнения, используемые по умолчанию при запуске образа. Например, переменные среды задаются для выполняемого процесса контейнера с помощью команды ENV в Dockerfile.

Виртуальные машины VS Контейнеры

Принципиальное различие между ними состоит в том, что в виртуальной машине выполняется копия операционной системы целиком, включая ядро, в то время как контейнер использует одно ядро совместно с хост-компьютером. Чтобы понять, что это значит, необходимо сначала разобраться в том, как диспетчер виртуальных машин (Virtual Machine Monitor, VMM) создает их и управляет ими. Начнем с подготовки почвы для этой дискуссии, а именно задумаемся над тем, что происходит при загрузке компьютера. ### Загрузка компьютера Представьте физический сервер: с несколькими CPU, оперативной памятью и сетевыми интерфейсами. В начале загрузки компьютера запускается специальная программа — BIOS (Basic Input Output System — «базовая система ввода/вывода»). Она проверяет объем доступной оперативной памяти, находит сетевые интерфейсы и все прочие устройства, например мониторы, клавиатуру, подключенные устройства хранения и т. д.

Linux. Пространство имен обмена информацией между процессами

В Linux различные процессы могут обмениваться информацией с помощью доступа к разделяемой области памяти либо очереди сообщений. Для доступа к общему множеству идентификаторов для этих механизмов два процесса должны входить в одно пространство имен обмена информацией между процессами (inter-process communications, IPC). Вообще говоря, нежелательно, чтобы контейнеры могли обращаться к разделяемой памяти друг друга, поэтому им назначаются отдельные пространства имен IPC. Чтобы посмотреть на это в действии, создайте разделяемый блок памяти и просмотрите текущее состояние IPC с помощью команды ipcs: ```

Docker. Как получить root доступ за 10 секунд

https://www.electricmonk.nl/log/2017/09/30/root-your-docker-host-in-10-seconds-for-fun-and-profit/

Пространства имен Linux

Контрольные группы позволяют контролировать ресурсы, доступные процессу, а пространства имен (namespaces) — ресурсы, которые он видит. Помещение процесса в пространство имен позволяет ограничить видимые ему ресурсы. Linux namespace – это абстракция над ресурсами в операционной системе. Мы можем думать об namespace, как о ящике. В этом ящике находятся системные ресурсы, которые точно зависят от типа ящика (namespace). В настоящее время существует семь типов пространств имён (namespaces): Cgroups, IPC, Network, Mount, PID, User, UTS. На сегодняшний день Linux поддерживает несколько видов пространств имен: