Docker предоставляет возможность упаковывать и запускать приложение в изолированной среде, называемой контейнером. Изоляция и безопасность позволяют запускать много контейнеров одновременно на одной машине(хосте). Контейнеры являются легкими, потому что не используют гипервизор, но только ресурсы хоста. Docker может быть запущен и на виртуальных машинах, главное чтобы хватило ресурсов!
Docker Engine-это клиент-серверное приложение, состоящее их 3-х основных компонентов:
Dockerfile используется как шаблон(набор инструкций), по которому можно сделать образ(docker image). Обратите внимание, что файл создается без разрешения! Каждая инструкция в этом файле создает отдельный слой в образе. При изменении Dockerfile и перестроении изображения перестраиваются только те слои, которые были изменены. Поэтому образы такие легкие и небольшого размера, плюс довольно быстрые, по сравнению с другими технологиями виртуализации.
Например, самый простой dockerfile будет выглядеть так, слой за слоеем:
FROM centos:7
RUN yum update -y
CMD ["bash]
Создаем образ из этого файла:
#docker build -t image_from .
-f если файл находится вне текущей директории.
На хабре есть отличная статья про файлы докера и команды.
Docker Image
С помощью docker файла мы сделали новый образ(read only!), который является шаблоном с инструкциями для создания контейнера. Как видно из примера, получившийся шаблон(docker-image) основан на другом шаблоне centos, но с дополнениями(yum update). Как вариант, вы можете создать свой шаблон, который устанавливает ваше приложение с вашими настройками и конфигами. Также есть возможность опубликовать собственные разработки на docker-hub'e, откуда они будут доступны другим участникам.
Containers(контейнер) - это выполняемый экземпляр образа(самодостаточная ОС, в которой только самое необходимое и код приложения). Вы можете создать, запустить, остановить, переместить или удалить контейнер с помощью Docker API или CLI. Вы можете подключить контейнер к одной или нескольким сетям, присоединить к нему хранилище или даже создать новый образ на основе его текущего состояния.
По умолчанию контейнер изолирован от других контейнеров и от хоста, на котором он запущен. При удалении контейнера все изменения, которые вы сделали за время его работы, если они не хранятся в в постоянном хранилище, потеряются.
Services (сервисы) - позволяют масштабировать контейнеры между несколькими демонами Docker, которые работают вместе в кластере(swarm)с несколькими менеджерами и работниками(manager and workers). Каждый член кластера является демоном Docker, и все демоны взаимодействуют с помощью API Docker.
Служба позволяет определить желаемое состояние, например количество реплик службы, которые должны быть доступны в любой момент времени. По умолчанию служба балансирует нагрузку на всех рабочих узлах кластера.
Успехов!
Docker Engine-это клиент-серверное приложение, состоящее их 3-х основных компонентов:
- Сервер, который является типом длительной программы, или проще говоря демон (dockerd). Демон прослушивает запросы API Docker и управляет объектами Docker, такими как изображения, контейнеры, сети и тома.
- REST API, определяет интерфейсы, которые программы могут использовать для общения с демоном и инструктировать его, что делать.
- Клиент интерфейса командной строки (CLI) (команда docker). Клиент отправляет команды в dockerd, который их выполняет(например, docker run).
Dockerfile используется как шаблон(набор инструкций), по которому можно сделать образ(docker image). Обратите внимание, что файл создается без разрешения! Каждая инструкция в этом файле создает отдельный слой в образе. При изменении Dockerfile и перестроении изображения перестраиваются только те слои, которые были изменены. Поэтому образы такие легкие и небольшого размера, плюс довольно быстрые, по сравнению с другими технологиями виртуализации.
Например, самый простой dockerfile будет выглядеть так, слой за слоеем:
FROM centos:7
RUN yum update -y
CMD ["bash]
Создаем образ из этого файла:
#docker build -t image_from .
-f если файл находится вне текущей директории.
FROM
— задаёт базовый (родительский) образ.LABEL
— описывает метаданные. Например — сведения о том, кто создал и поддерживает образ.ENV
— устанавливает постоянные переменные среды.RUN
— выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов.COPY
— копирует в контейнер файлы и папки.ADD
— копирует файлы и папки в контейнер, может распаковывать локальные .tar-файлы.CMD
— описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен. Аргументы могут быть переопределены при запуске контейнера. В файле может присутствовать лишь одна инструкцияCMD
.WORKDIR
— задаёт рабочую директорию для следующей инструкции.ARG
— задаёт переменные для передачи Docker во время сборки образа.ENTRYPOINT
— предоставляет команду с аргументами для вызова во время выполнения контейнера. Аргументы не переопределяются.EXPOSE
— указывает на необходимость открыть порт.VOLUME
— создаёт точку монтирования для работы с постоянным хранилищем.
Docker Image
С помощью docker файла мы сделали новый образ(read only!), который является шаблоном с инструкциями для создания контейнера. Как видно из примера, получившийся шаблон(docker-image) основан на другом шаблоне centos, но с дополнениями(yum update). Как вариант, вы можете создать свой шаблон, который устанавливает ваше приложение с вашими настройками и конфигами. Также есть возможность опубликовать собственные разработки на docker-hub'e, откуда они будут доступны другим участникам.
Containers(контейнер) - это выполняемый экземпляр образа(самодостаточная ОС, в которой только самое необходимое и код приложения). Вы можете создать, запустить, остановить, переместить или удалить контейнер с помощью Docker API или CLI. Вы можете подключить контейнер к одной или нескольким сетям, присоединить к нему хранилище или даже создать новый образ на основе его текущего состояния.
По умолчанию контейнер изолирован от других контейнеров и от хоста, на котором он запущен. При удалении контейнера все изменения, которые вы сделали за время его работы, если они не хранятся в в постоянном хранилище, потеряются.
Services (сервисы) - позволяют масштабировать контейнеры между несколькими демонами Docker, которые работают вместе в кластере(swarm)с несколькими менеджерами и работниками(manager and workers). Каждый член кластера является демоном Docker, и все демоны взаимодействуют с помощью API Docker.
Служба позволяет определить желаемое состояние, например количество реплик службы, которые должны быть доступны в любой момент времени. По умолчанию служба балансирует нагрузку на всех рабочих узлах кластера.
Успехов!
No comments:
Post a Comment