Что такое Docker

Docker — это технология, которая позволяет создавать и использовать приложения в «родном» окружении. В основе Docker лежит идея: если приложение работает у вас, то оно должно работать где угодно. Способ этого добиться очень простой — нужно упаковать настройки окружения вместе с приложением.

Docker чаще всего применяется для развёртывания серверных приложений, но может использоваться и в мире фронтенда для:

  • сборки бандлов;
  • статического анализа кода;
  • тестирования приложений;
  • подготовки ресурсов (картинок, шрифтов, иконок и пр.);
  • воспроизводимых экспериментов с новыми технологиями и демок;
  • настройки инфраструктуры разработчика (редактора кода, платформы, пакетных менеджеров, линтеров и прочего).

Установка Docker

Установите Docker:

Запустите Docker и проверьте его работоспособность с помощью графического интерфейса Dashboard (для Mac или Windows) или команды в терминале (для всех операционных систем):

docker --version

У создателей Docker есть готовая демка, которую можно запустить командой:

docker run -d -p 80:80 docker/getting-started

Теперь можно открыть в браузере документацию Docker по адресу http://localhost.

Представьте, что вы передали проект другому разработчику, и вам не приходится возиться с тем, чтобы проект запускался, не приходится говорить: «А у меня все работало»

Без Docker вы, скорее всего, действовали бы так:

  1. Узнали операционную систему на компьютере разработчика.
  2. Сформировали сценарий или инструкцию настройки окружения.
  3. Протестировали, как развёртывается ваше приложение.
  4. Передали приложение разработчику, и ждали результаты.

Ситуация будет ещё сложнее, если вы и другой разработчик используете разные операционные системы. С Docker все намного проще! Вы создаёте конфигурацию, и если она работает у вас, то заработает у всех.

Docker упаковывает приложение так, что будет счастлив любой, кто его получит.

Давайте разберёмся, как это происходит. Что должен делать Docker с вашим приложением, какое окружение он должен подготовить?

Рассмотрим пример с демкой от создателей Docker. Когда вы выполнили команду docker run, произошло следующее:

  1. Docker нашёл и загрузил приложение с именем docker/getting-started из реестра приложений Docker Hub. Приложение уже было заботливо упаковано со всеми необходимыми ему утилитами и программами. Такая упаковка называется образ (Docker Image). Образ обычно содержит в себе операционную систему на базе Linux, стартовую конфигурацию для установки служб, утилит, приложений, зависимостей проекта — все это называется окружением приложения.
  2. Docker создал контейнер (Docker Container) на основе образа. Контейнер — это конкретный экземпляр образа на вашем компьютере. Отношение «образ — контейнер» примерно такое же, как у пары «класс — объект класса» в ООП.
  3. Docker запустил контейнер с веб-сервером Nginx внутри, и веб-приложение «Справка по Docker» заработало. Для вашей операционной системы запустить контейнер — это все равно что запустить любое приложение или сервис.

Вы просто начали использовать веб-приложение, никаких сложностей.

Перед тем, как мы научимся готовить образ сами, необходимо разобраться с терминами.

Важные службы

Движок Docker Engine — приложение для управления объектами Docker включает в себя три компонента:

  1. сервер (Docker Daemon);
  2. интерфейс (Docker API);
  3. консольный клиент (Docker CLI).

Ваш компьютер называется Docker Host. Все операции, которые мы выполняем в интерфейсе или через консоль, выполняются сервером через API движка.

Docker Desktop — пакет приложений с графическим интерфейсом, включающий специальную виртуальную машину для работы с движком, визуальный интерфейс (Dashboard), консольный клиент, инструменты для работы с реестром Docker Hub и пр.

Для платформы Mac и Windows невозможно использовать Docker Engine напрямую, необходимо запустить виртуальную машину. Docker Desktop содержит такую виртуальную машину. Все процессы в ней оптимизированы, контейнеры работают быстрее, но определённые ограничения все равно присутствуют.

Объекты Docker

Образ (Docker Image) — прототип будущего контейнера, содержащий операционную систему, приложение или проект для сборки приложения. Образы состоят из слоёв. Каждый новый слой — это надстройка над предыдущим. Слои должны надстраиваться поверх базового образа, формируя новый. Например, базовым образом может быть образ операционной системы.

Слои образа описываются в специальных файлах конфигурации. Как правило, для этого используется Dockerfile. Конфигурационный файл всегда начинается с указания базового образа, имя которого прописывается после директивы FROM. Дальше могут идти разные надстройки (новые слои) образа.

Вы можете задать рабочую папку проекта с помощью директивы WORKDIR, скопировать файлы в эту рабочую папку директивой COPY, запустить выполнение команды или нескольких команд в терминале директивой RUN.

Пример конфигурации:

FROM ubuntu:18.04
WORKDIR /app
COPY . .
RUN apt-get update && apt-get upgrade

Контейнер (Docker Container) — уже собранное и запущенное приложение в изолированном окружении, которое формируется послойно, в соответствии с образом. Каждый новый слой расширяет функциональность предыдущего, формируя стек используемых инструментов, платформ и настроек системных служб. Файловая система контейнера тоже стековая (Union File Systems). Каталоги и файлы отдельного слоя образа накладываются друг на друга, образуя единое целое.

Том (Docker Volume) — папка, которую можно подключить (говорят «примонтировать») к контейнерам. Папка может быть связана с конкретной папкой на вашем компьютере, а может быть как бы сетевой для контейнеров на вашем компьютере.

Тома необходимы для хранения файлов конфигурации, критических с точки зрения безопасности, файлов баз данных, файлов, которые нельзя удалять после окончания работы приложения.

Сеть (Docker Network) — виртуальная локальная сеть, которая позволяет совместно использовать несколько запущенных контейнеров и соединять запущенный контейнер с вашим компьютером. В основном вы будете использовать три режима работы сетевой инфраструктуры Docker:

  1. bridge — когда контейнеры могут взаимодействовать между собой как веб-сервер и база данных.
  2. host — для доступа к локальному сетевому окружению на вашем компьютере.
  3. none — сеть для контейнеров полностью отключена.

Инструменты

Docker Hub (реестр) — официальный реестр образов.

Опубликованные образы хранятся в Docker Hub. Существуют и другие публичные реестры образов:

Предпочитайте официальные образы Docker, которые обновляются самой компанией. Они относительно безопасны. Для фронтенд - разработчика могут быть интересны:

Docker CLI — консольный клиент, позволяющий управлять Docker через интерфейс командной строки.

Консольный клиент содержит команды для управления объектами Docker. Список основных команд:

Как пользоваться

Ключи командного интерфейса Docker CLI хорошо проработаны и похожи на консольные команды в bash. Например, дополнительный ключ prune позволяет удалять неиспользуемые объекты. Ключ rm служит для удаления, а ключ ls для просмотра объектов.

Объекты Docker в обязательном порядке имеют уникальное имя. Если вы не именуете объект специально, то имя объекта формируется с помощью хэш-функции. Если вы попытаетесь создать объект одного и того же типа с уже использованным именем, в этом вам будет отказано.

Мониторинг контейнеров

  • docker ps — просмотр запущенных контейнеров.
  • docker ps -a — ключ -a выводит и запущенные, и остановленные контейнеры.
  • docker ps -s — ключ -s выводит дисковое пространство, используемое каждым запущенным контейнером.
  • docker ps -f name=hello — ключ -f фильтрует список контейнеров по имени, например, hello.

Полный список ключей для команды docker ps доступен в документации.

Запуск контейнеров

Для запуска контейнера, который доступен локально или на Docker Hub, выполните команду:

docker run --name test -i -t hello

Ключ --name используется для установки имени запущенного контейнера. Ключи -i и -t указывают, что для запуска контейнера будет использоваться стандартный поток ввода и терминал TTY соответственно.

Полный список ключей для команды docker run доступен в документации.

Управление образами

Вы можете получить список всех доступных локально образов с помощью команды:

docker image ls

Ключи prunerm действуют обычным способом, позволяя удалить неиспользуемые или конкретные образы соответственно. Для работы с реестром необходимо использовать следующие команды:

  • docker image pull hello — загрузка образа с именем hello из реестра;
  • docker image push hello — отправка образа с именем hello в реестр;
  • docker image inspect hello — полная информация о контейнере hello;
  • docker image build — собрать контейнер из текущей папки с учётом Dockerfile.

Полный список ключей для команды docker image доступен в документации.

Управление контейнерами

Наиболее используемыми командами будут команды запуска и остановки контейнеров.

Команда для запуска контейнера:

docker container start

Команда для перезапуска контейнера:

docker container restart

Команда для остановки контейнера:

docker container stop

Команда для постановки контейнера на паузу:

docker container pause

Полный список ключей для команды docker container доступен в документации.

Управление томами

  • docker volume ls — вывод всех томов.
  • docker volume ls -f name=hello — вывод всех томов с фильтрацией по имени, например, hello.
  • docker volume create hello — создание нового тома, например, hello.
  • docker volume inspect hello — исчерпывающая информация о томе.

Полный список ключей для команды docker volume доступен в документации.

Источник: doka.guide

Написать комментарий