Основы и концепции
Редактировать на GitHubdocker?🔹 СпособыВопросы
Что такое docker и какие инструменты linux лежат в основе? Для чего он используется?
Docker базируется на технологиях namespaces, cgroups, capabilities, overlay namespaces - обеспечивает изоляцию. Используется для изоляции. Например, можно айдишники процессов разместить в разных контейнерах. cgroup - штука, которая позволяет управлять группой процессов, и управлять их ресурсами. capabilites - штука, которая позволяет дать некоторые рут привелегии процессам или исполняемым файлам. Например, изменить UID процесса на 0, или дать возможность монтировать файловые системы. overlay (overlayFS, overlay2-драйвер) - файловая система, которая умеет работать "слоями". Не сохранять каждый раз новые файлы, а наслаивать один слой на другой, тем самым экономя место на диске и время создания контейнера.
А вот докер - это уже штука, которая всеми этими технологиями рулит. Да ещё и удобным для нас образом.
Компоненты докера:
- Docker Daemon — то самое Container Engine; запускает контейнеры.
- Docker CII — утилита по управлению Docker.
- Dockerfile — инструкция по тому, как собирать образ.
- Image — образ, из которого раскатывается контейнер.
- Container.
- Docker registry — хранилище образов.

На Docker_host работает Docker daemon, запускает контейнеры. Есть Client, который передаёт команды: собери образ, скачай образ, запусти контейнер. Docker daemon ходит в registry и выполняет их. Docker-клиент может обращаться и локально (к юникс-сокету), и по TCP с удалённого хоста.
Docker daemon (демон) — это серверная часть, она работает на хост-машине: скачивает образы и запускает из них контейнеры, создаёт сеть между контейнерами, собирает логи. Когда мы говорим «создай образ», этим тоже занимается демон.
Docker CLI — клиентская часть Docker, консольная утилита для работы с демоном. Повторю, она может работать не только локально, но и по сети.
Что такое контейнеры, образы? В чём заключаются концепции их использования?
Образ - шаблон приложения, который содержит слои файловой системы в режиме "только-чтение". Контейнер - запущенный образ приложения, который кроме нижних слоев в режиме "только чтение" содержит верхний слой в режиме "чтение-запись". Контейнер - это уже развернутое и запущенное приложение. Однажды запущенный контейнер сохранён в библиотеке, его можно останавливать, менять настройки, перезапускать, но до удаления контейнера это некоторая постоянная сущность со своим id. Продолжая аналогию с установкой ПО, контейнер можно сравнить с уже установленной и работающей программой на ПК. Образ - Это неизменяемый образ, из которого разворачивается контейнер. Его можно рассматривать как набор файлов, необходимых для запуска и работы приложения на другом хосте. Можно привести аналогию из мира установки ПО: образ — это компакт-диск, с которого устанавливается программа.
В каком виде хранятся образы? Для чего используются слои? Что представляет собой overlayfs?
Образы(images) - это логическая группировка слоев плюс метаданные о том, что делать при создании контейнера и как собирать слои. Часть этих метаданных заключается в том, что каждый слой знает ID своего родителя. Итак, что входит в слой? Файлы (и каталоги), которые вы добавили в родительский файл. Существуют также специальные файлы ("whiteout"), которые указывают на то, что что-то было удалено из родительского файла. Docker-image — шаблон только для чтения (read-only) с набором некоторых инструкций, предназначенных для создания контейнера. Он состоит из слоев, которые Docker комбинирует в один образ при помощи вспомогательной файловой системы UnionFS. Так решается проблема нерационального использования дисковой памяти. Параметры образа определяются в Docker-file.
Что такое docker commit
Это утилита, с помощью которой можно сощздать новый образ на основе контейнера либо перезаписать текущий образ
Может быть полезно когда ты что ты изменил какой то файл в docker контейнере, и тебе нужно сохранить этот новый рабочий обновленный образ.
Что такое слои в докере?
По сути, слой или слой образа это изменение образа или промежуточного образа. Каждая команда, указанная (FROM, RUN, COPY и т.д.) в вашем Dockerfile вызывает предыдущий образ изменения, создавая тем самым новый слой. Вы можете думать об этом как о внесении изменений при использовании git: вы добавляете изменение файла, затем еще одно, затем добавляя ещё одно, и слои накладываются один за другим.
Так же любые изменения, которые происходят в docker контейнере, автоматически записываются в новый слой.
Что такое эфемерные контейнеры?
Эфемерные контейнеры стали бета-функцией в Kubernetes v1.23 и теперь включены по умолчанию. Эфемерные контейнеры предназначены для транзитных задач, когда вам нужно временно подключить дополнительный контейнер к существующему поду. Это идеально подходит для отладочных операций, когда вы хотите проверить поды, не затрагивая живые экземпляры контейнеров.
Почему latest образы использовать нежелательно?
Сложно в отладке как минимум. Не разобраться какая именно версия закосячила. А так прод работает на определенной версии, пусть дальше на ней и работает. Помимо этого это небезопасно. Никто не знает что выкатит разработчик в новой версии. Может не быть обратной совместимости в проекте.
Что такое kata контейнер?
Это иная реализация контейнеров. Которые работают в оси под открытой инициативой. Kata Containers объединяют преимущества контейнеров и виртуальных машин (VM). Они обеспечивают более высокий уровень изоляции и безопасности для приложений, сохраняя при этом лёгкость и скорость работы контейнеров.
Если обычные контейнеры используют стандартные механизмы контейнеризации Linux, у Kata Containers используются qemu, kvm.
Контейнер на стероидах. Больше для безопасности придумано.
Можно ли скопировать файл из файловой системы Linux в Docker-контейнер без использования команд docker?
Ответ:
Да, можно. Контейнер в Linux — это обычный процесс, у которого есть своя файловая система, примонтированная в каталог /var/lib/docker/....
🔹 Способы
- Через файловую систему контейнера
- Файлы контейнера лежат в
/var/lib/docker/overlay2/<ID>/merged/. - Можно найти нужный контейнер (
docker inspect <container> | grep MergedDir) и скопировать файл напрямую:
- Файлы контейнера лежат в
cp /host/file /var/lib/docker/overlay2/<ID>/merged/path/in/container/- Через
nsenterв namespace процесса- У контейнера есть свой PID namespace. Можно войти туда и использовать обычные команды Linux:
PID=$(docker inspect -f '{{.State.Pid}}' <container>)
nsenter --target $PID --mount --uts --ipc --net --pid
cp /host/file /path/in/container/- Через общий volume
- Если контейнер использует volume или bind-mount, файл можно скопировать прямо в этот каталог на хосте, и он появится внутри контейнера.
📌 Итог:
Да, можно. Без docker cp доступ к контейнеру возможен через:
- директории
/var/lib/docker/overlay2/.../merged, nsenterв namespace процесса,- или volume/bind-mount.
Последнее обновление: 19 сент. 2025 г., 13:21:46