Термины
Виртуализация - технология, позволяющая запускать экземпляры операционных систем (гостевые машины) параллельно и изолированно на единственной хост-машине. При этом каждой гостевой машине предоставляются собственные ресурсы, а гостевая операционная система может быть полностью отличной от операционной системы хост-машины.
Гипервизор - программное обеспечение, позволяющее запускать многожественные гостевы (виртуальные) машины на единственной физической машине (хост-машине), а также обеспечивающее передоставление ресурсов виртуальным машинам.
Гостевая машина - виртуальная машина, запускаемая в изолированной среде системы виртуализации внутри хост-машины.
Гостевая операционная система - операционная система, работающая на гостевой машине.
Хост-машина - машина, в операционной системе которой запускатся система виртуализации и работающие в этой системе виртуализации гостевые машины.
draw.io Diagram | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Системы виртуализации в ОС СН
В состав ОС СН входят две системы виртуализации, поддерживающие два описанных выше типа виртуальзации:
- libvirt - система полной виртуальзации;
- docker - система контейнерной вартуализации.
Система контейнерной виртуализации Docker
Термины
Образ - набор упорядоченных слоёв, фактически сумма изменений, внесённых в систему, текущее состояние системы;
Слой - в трактовке Docker набор изменений файловой системы, другими словами - некий моментальный снимок состояния системы. Слои доступны только для чтения, каждое изменение порождает новый слой. Любой слой может использоваться несколькоми образами одновременно;
Контейнер - экземпляр образа docker, образ, находящийся в работе, то есть образ с новым слоем текущих изменений. При работе контейнера все изменния сохраняются в новом слое, а все предыдущие слои остаются неизменными;
Реестр образов - сетевое хранилище подготовленных образов, доступных для загрузки на целевые машины.
Особенности
Система контейнерной виртуализации Docker позиционируется не только как система виртуализации, но как система быстрого распространения и развёртывания приложений.
Традиционный способ развёртывания приложений предполагает:
- передачу пользователю приложения комплекта неких файлов приложения как правило:
- исполнимый файл;
- конфигурационный файл;
- сценарии установки и удаления;
- инструкции по установке;
- выполнение пользователем для развёртывания предоставленных сценариев и инструкций на целевой машине.
При этом, несмотря на то, что разработчиками приложений тратятся значительные усилия на создание сценариев развёртывания, учитывающих всевозможные особенности целевыз машин и возможные конфликты с другими приложениями, выполение действий по установке часто завершается неудачей,
Docker предлагает альтернативный вариант развёртывания: поставщик приложений передаёт пользователям приложений предварительно настроенные контейнеры с приложениями. Эти контейнеры просто запускаются пользователем на целевой машине, предоставляя каждому приложению изолированное преднастроенное окружение для работы. Таким образом исключается существенная часть ошибок, связанных с предварительной настройкой нестандартных пользовательских систем. Хорошим примером использования возможностей Docker по быстрому развёртыванию приложений явлется пример развёртывания собственного реестра образов, выполняемого путём простого скачивания подготовленного образа (см. раздел "Администрировани" - "Создание собственного реестра образов").
При этом, по сравнению с системами полной виртуализации, запуск контейнеров требует значительно меньших вычислительныз ресурсов, и, кроме того, Docker для экономии ресурсов поддерживает систему повторного использования "слоёв". "Слой" в терминологии Docker - это некий моментальный снимок состояния системы, а "образ" - это итоговое состояние системы с учетом cостояний всех подлежащих слоёв. При этом "слои" могут использоваться повторно разными "образами":
draw.io Diagram | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Дополнительным эффектом от повторного использования "слоёв" является снижение объёмов передаваемых данных при передаче подготовленных в виде образов прикладных программ: при использовании реестра образов Docker передаваться будет только новые слои, в примере выше - слой "Базовая система Astra Linux SE" будет загружен из реестра образов только один раз, далее загружаться будут только новые слои.
Ограничения Docker
Предупреждение |
---|
|
Администрирование Docker
Установка Docker
В ОС СН Смоленск 1.7 Docker представлен пакетом docker.io и может быть установлен с помощью графического менеджера пакетов или из командной строки командой:
Command |
---|
sudo apt install docker.io |
Для более ранних версий Astra Linux см. статью: Установка и настройка Docker в ОС Astra Linux
Создание собственного реестра образов
Загрузить подготовленный образ Docker, содержащий приложение "Реестр образов Docker". Образ "Реестр образов Docker" загружается из реестра образов Docker:
Command | ||
---|---|---|
| ||
Unable to find image 'registry:2' locally |
После выполнения указанной команды локальный реестр образов автоматически запущен и готов к работе. Управление работой контейнера реестра осуществляется так же как управление любым другим контейнером. например остановка работы реестра:
Command |
---|
sudo docker container stop registry |
Удаление реестра:
Command |
---|
sudo docker container stop registry && sudo docker container rm -v registry |
Настройка внешнего доступа к собственному реестру
Создание собственного образа
См. статью: Создание собственного образа для использования в Docker
Управление Docker-ом
Подробная справка по командному интерфейсу Docker представлена на сайте разработчиков: https://docs.docker.com/engine/reference/commandline/docker/. При работе в системе список команд можно получить с помощью команды:
Command |
---|
docker help |
Более подробную справку по аргументам команд можно получить с помощью ключа --help, например:
Command |
---|
docker attach --help |
Часто употребимые команды (аргументы команд для краткости не указаны):
Команда | Краткое описание | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
docker attach | Подключить стандартные каналы ввода-вывода (stdin, stdout, stderr) к активному контейнеру | ||||||||||
docker build | Построить Docker-образ из Docker-файла | ||||||||||
docker builder | Управление модулем построения Docker-образов | ||||||||||
docker commit | Создание нового Docker-образа из активного контейнера | ||||||||||
docker config | Управление конфигурациями Docker | ||||||||||
docker container | Управление контейнерами:
| ||||||||||
docker context | Управление конекстами Docker | ||||||||||
docker cp | Копирование файлов или каталогов между локальной файловой системой и файловой системой контейнера | ||||||||||
docker create | Создать новый изменяемый слой в указанном контейнере | ||||||||||
docker diff | Вывести список файлов и каталогов, изменененных с момента создания контейнера | ||||||||||
docker events | Вывести событий, произошедших с различными объектами Docker | ||||||||||
docker exec | Выполнить команду в активном контейнере | ||||||||||
docker export | Экспортировать файловую систему контейнера как архив формата tar | ||||||||||
docker history | Показать историю образа | ||||||||||
docker image | Управление образами:
| ||||||||||
docker images | Вывести список образов верхнего уровня | ||||||||||
docker import | Создать файловую систему образа из архива | ||||||||||
docker info | Вывод системной информации | ||||||||||
docker inspect | Вывод подробной информации об объектах Docker | ||||||||||
docker kill | Принудительно деактивировать активный контейнер (контейнеры) | ||||||||||
docker load | Загрузить образ из архива tar или из стандартного ввода | ||||||||||
docker login | Войти в реестр образов | ||||||||||
docker logout | Выйти из реестра образов | ||||||||||
docker logs | Извлечь журналы контейнера | ||||||||||
docker manifest | Управление манифестами и списками манифестов Docker | ||||||||||
docker network | Управление сетями | ||||||||||
docker node | Управление узлами кластеров Docker | ||||||||||
docker pause | Приостановить все процессы в активном контейнере (контейнерах) | ||||||||||
docker plugin | Управление плагинами | ||||||||||
docker port | Вывести список отображения портов контейнера | ||||||||||
docker ps | Вывести список активных контейнеров | ||||||||||
docker pull | Загрузить образ на локальный компьютер из реестра образов | ||||||||||
docker push | Загрузить образ с локального компьютера в реестр образов | ||||||||||
docker rename | Переименовать контейнер | ||||||||||
docker restart | Перезапустить контейнер (контейнеры) | ||||||||||
docker rm | Удалить контейнер (контейнеры) | ||||||||||
docker rmi | Удалить образ (образы) | ||||||||||
docker run | Выполнить команду в новом контейнере, то есть: создать в существующем образе новый изменяемый слой, и выполнить команду, сохраняя изменения в этом слое
| ||||||||||
docker save | Сохранить образ (образы) в архиве tar (через стандартный вывод по умолчанию) | ||||||||||
docker search | Поиск образов Docker в сети Интернет | ||||||||||
docker secret | Управление паролями кластеров Docker | ||||||||||
docker service | Управление сервисами кластеров Docker | ||||||||||
docker stack | Управление стеками | ||||||||||
docker start | Активировать контейнер (контейнеры) | ||||||||||
docker stats | Отобразить в режиме реального времени статистику потребления ресурсов контейнером | ||||||||||
docker stop | Дективировать активный контейнер (контейнеры) | ||||||||||
docker swarm | Управление кластерами Docker | ||||||||||
docker system | Управление службой Docker | ||||||||||
docker tag | Создать тэг образа, ссылающийся на существующий образ | ||||||||||
docker top | Вывести список процессов активного контейнера | ||||||||||
docker trust | Управление ключами и подписями образов | ||||||||||
docker unpause | Продолжить выполнение приостановленного активного контейнера (контейнеров) | ||||||||||
docker update | Обновить конфигурацию контейнера (контейнеров) | ||||||||||
docker version | Отобразить версию Docker | ||||||||||
docker volume | Управление томами хранения данных для контенеров | ||||||||||
docker wait | Ожидание завершения работы контейнера (контейнеров) и вывод кодов завершения |
Загрузка образа в реестр
Получить список доступных на локальной машине образов:
Command | ||
---|---|---|
| ||
REPOSITORY TAG IMAGE ID CREATED SIZE wiki/astralinux se17rc5 5d69ce8720a7 25 hours ago 318MB registry 2 678dfa38fcfa 12 days ago 26.2MB localhost:5000/hello-world-se latest bf756fb1ae65 12 months ago 13.3kB hello-world latest bf756fb1ae65 12 months ago 13.3kB |
Пометить загружаемый образ тэгом (tag) для загрузки в нужный реестр:
Command |
---|
sudo docker tag wiki/astralinux:se17rc5 localhost:5000/se17rc5 |
Перепроверить список доступных образов, чтобы убедиться, что тэг присвоен верно:
Command | ||
---|---|---|
| ||
REPOSITORY TAG IMAGE ID CREATED SIZE wiki/astralinux se17rc5 5d69ce8720a7 25 hours ago 318MB localhost:5000/se17rc5 latest 5d69ce8720a7 25 hours ago 318MB registry 2 678dfa38fcfa 12 days ago 26.2MB localhost:5000/hello-world-se latest bf756fb1ae65 12 months ago 13.3kB hello-world latest bf756fb1ae65 12 months ago 13.3kB |
В примере выше первые две строки сообщают об одном и том же образе (идентификатор образа 5d69ce8720a7). При этом образ помечен как размещенный в двух локациях - на локальной машине wiki/astralinux и сетевом реестре на локальной машине localhost:5000.
Загрузить образ в реестр:
Command | ||||
---|---|---|---|---|
| ||||
The push refers to repository [localhost:5000/se17rc5] d5f516170dbe: Pushed latest: digest: sha256:8d12b1c9ebe3b3060734965bbd7214a0063633261bf1da17d3caf50ed4f1f534 size: 529 |