Поиск по сайту:

Что делает Docker и когда его следует использовать?


Docker — это инструмент для запуска ваших приложений внутри контейнеров. Контейнеры упаковывают все зависимости и код, необходимые вашему приложению для запуска, в один файл, который будет работать одинаково на любом компьютере.

Что такое докер?

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

Docker Engine работает в Linux, Windows и macOS и поддерживает Linux и Windows для контейнеров Docker. Точная версия Linux на самом деле не имеет значения; большинство версий Linux работают на одном и том же ядре и отличаются только пользовательским программным обеспечением. Docker может установить это пользовательское программное обеспечение в контейнер, что позволит вам запустить контейнер CentOS в Ubuntu. Вы не могли бы, например, запустить FreeBSD на Ubuntu, так как ядра разные.

Образ контейнера Docker включает только то, что необходимо вашему приложению для запуска. Если ваше приложение использует nginx и Node.js, образ контейнера будет включать их, но вы не будете обременены всеми другими пользовательскими приложениями, которые вы обычно найдете в Linux.

Почему Docker так полезен?

Docker использует тот же тип контроля версий и упаковки, что и такие инструменты, как Git и NPM, и позволяет вам использовать их для вашего серверного программного обеспечения. Поскольку ваш контейнер представляет собой единый образ, очень легко отслеживать версии различных сборок вашего контейнера. А поскольку все содержится, это значительно упрощает управление всеми вашими зависимостями.

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

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

Docker также позволяет организовать код для развертывания в новых службах. Допустим, у вас есть веб-сервер, который вы используете для своего приложения. Скорее всего, на этом сервере у вас установлено множество вещей, у вас есть веб-сервер nginx для размещения статического контента, у вас, вероятно, есть база данных для хранения некоторых вещей на бэкенде, может быть, у вас есть сервер API, работающий на Express. js также. В идеале вы должны разделить их на отдельные приложения для запуска на отдельных серверах, но разработка может запутаться.

Docker помогает очистить это; вы можете упаковать свой веб-сервер и запустить его с контейнером nginx, вы можете упаковать свой сервер API и запустить его с контейнером Node.js, и вы можете упаковать свою базу данных и запустить ее в своем собственном контейнере (хотя это <возможно не лучшая идея, но это возможно). Вы можете взять эти три контейнера Docker и запустить их все на одном компьютере. Если вам нужно переключить серверы, это так же просто, как перенести эти контейнеры на новый сервер. Если вам необходимо масштабирование, вы можете переместить один из этих контейнеров на новый сервер или развернуть его в кластере серверов.

Docker также может сэкономить вам деньги, если вы хотите запускать несколько приложений на одном VPS. Если у каждого приложения разные зависимости, ваш сервер очень легко загромождается, как обеденная тарелка на День Благодарения, когда все смешивается. С Docker вы можете запускать несколько отдельных контейнеров, например, с отдельными версиями PHP, например, поднос для обеда в старшей школе, где все разделено.

Как вы используете Докер?

В производственной среде существует множество сервисов для размещения контейнеров Docker, в том числе AWS ECS, Azure Container Instances, DigitalOcean Docker Droplets и многие другие. Если ваш провайдер не предлагает управляемый хостинг Docker, вы всегда можете установить его самостоятельно на свой VPS.

В процессе разработки контейнеры Docker просты в запуске и требуют всего несколько команд. Для начала вам необходимо установить движок Docker на хост-ОС. Для Windows и macOS вы можете использовать Docker Desktop, но для Linux вам необходимо установить выпуск Docker Community Edition из диспетчера пакетов. Для дистрибутивов на основе Debian, таких как Ubuntu, это будет:

sudo apt-get install docker

При любом методе установки у вас должен быть доступ к Docker из командной строки. Чтобы убедиться, что он работает, вы можете запустить:

docker run hello-world

Docker должен извлечь этот обучающий образ из Docker Hub, онлайн-репозитория множества полезных образов контейнеров. Вы можете использовать многие из этих образов в качестве основы для установки своих приложений.

Создадим простой веб-сервер на базе nginx. Nginx предоставляет сборку Docker Hub, которую мы можем использовать в качестве отправной точки. Создайте новый каталог для хранения файлов и откройте его:

mkdir ~/dockertest && cd ~/dockertest

Любые изменения, внесенные в базовый образ nginx, будут выполняться с помощью Dockerfile. Файлы Docker похожи на make-файлы для контейнеров, они определяют, какие команды следует запускать, когда Docker создает новый образ с вашими изменениями. Dockerfile называется просто Dockerfile без расширения. Создайте этот файл с помощью touch Dockerfile и откройте его в текстовом редакторе. Вставьте это в:

FROM nginx
COPY html /usr/share/nginx/html

Первая строка — это команда Docker, которая сообщает Docker, что этот образ должен основываться на образе nginx из Hub. Вторая строка — это еще одна команда, которая копирует каталог из этой локальной папки (~/dockertest/html) в образ Docker, в данном случае заменяя папку HTML для nginx.

Вы можете запускать множество команд в Dockerfiles. Например, если вашему приложению необходимо установить зависимости, вы можете сделать что-то вроде RUN cd src/ && npm install. Все, что нужно вашему приложению для начальной загрузки, установки и запуска, определено в Dockerfile.

На самом деле мы еще не создали каталог ./html , так что продолжайте и запустите:

mkdir html && touch html/index.html

Создать каталог и запись HTML. Откройте index.html и вставьте какой-нибудь фиктивный HTML:

<!DOCTYPE html>
<html>
<body>
Hello From nginx, inside Docker! Inside, your computer?
</body>
</html>

Теперь мы готовы приготовить наше изображение. Убедитесь, что вы находитесь в корне проекта (в ~/dockertest, а не в папке html ), и выполните:

docker build -t dockertest .

Точка в конце означает, что мы будем использовать текущий каталог в качестве отправной точки. Docker должен найти Dockerfile и приступить к работе. Однако это займет всего несколько секунд, и когда это будет сделано, вы можете запустить его с помощью:

docker run --name DockerTest -p 8080:80 -d dockertest

Это запустит новый контейнер с именем DockerTest, используя созданный нами образ «dockertest». Флаг -p привязывает локальный порт к порту внутри контейнера, в этом случае привязывая HTTP-порт nginx по умолчанию (порт 80) к порту 8080 на вашем локальном компьютере. Откройте localhost:8080 в веб-браузере, и вы должны увидеть работающий nginx.

Если вам нужна дополнительная настройка, вы можете отредактировать файлы конфигурации nginx, включив COPY nginx.conf /etc/nginx/nginx.conf и написав свой собственный файл конфигурации. Это сложнее настроить, чем напрямую редактировать файл конфигурации, поскольку вам придется перестраивать образ при каждом редактировании. Но с точки зрения дополнительной выгоды от возможности взять тот же контейнер, который вы используете при разработке, и развернуть его в рабочей среде, это довольно разумный компромисс.

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