Введение
В этом руководстве вы узнаете, как создавать пользовательские образы Docker с помощью Dockerfile, развертывать и управлять приложениями Docker. Вы научитесь команде для сборки образа Docker из пользовательского Dockerfile, что позволит оптимизировать ваш рабочий процесс контейнеризации и более эффективно развертывать приложения.
Введение в контейнеры Docker
Docker — популярная открытая платформа, позволяющая разработчикам создавать, развертывать и запускать приложения в контейнерной среде. Контейнеры — это лёгкие, автономные и исполняемые программные пакеты, включающие всё необходимое для запуска приложения, включая код, среду выполнения, системные инструменты и библиотеки.
Что такое Docker?
Docker — инструмент, разработанный для упрощения создания, развертывания и запуска приложений с помощью контейнеров. Контейнеры позволяют разработчику упаковать приложение со всеми необходимыми компонентами, такими как библиотеки и другие зависимости, и отправить всё это как один пакет.
Преимущества контейнеров Docker
- Переносимость: Контейнеры Docker могут работать одинаково на любой среде, от локальной машины разработчика до серверов производства, гарантируя, что приложение будет вести себя одинаково независимо от базовой инфраструктуры.
- Масштабируемость: Docker упрощает масштабирование приложений вверх или вниз по мере необходимости, добавляя или удаляя контейнеры.
- Эффективность: Контейнеры Docker лёгкие и используют ядро операционной системы хоста, что делает их более эффективными, чем традиционные виртуальные машины.
- Согласованность: Docker гарантирует, что приложение будет работать одинаково от этапа разработки до этапа производства, устраняя проблему «работает на моей машине».
Архитектура Docker
Docker использует архитектуру клиент-сервер, где клиент Docker взаимодействует с демоном Docker, который отвечает за создание, запуск и распространение контейнеров Docker.
graph LD
subgraph Docker Architecture
client[Docker Client]
daemon[Docker Daemon]
client -- API --> daemon
daemon -- Images --> registry[Docker Registry]
end
Контейнеры Docker против виртуальных машин
Хотя контейнеры и виртуальные машины (ВМ) служат для запуска приложений в изолированных средах, существуют некоторые ключевые различия:
| Характеристика | Контейнеры Docker | Виртуальные машины |
|---|---|---|
| Изоляция | Контейнеры используют ядро операционной системы хоста, обеспечивая более лёгкую изоляцию. | ВМ имеют собственную полную операционную систему, обеспечивая более сильную изоляцию. |
| Использование ресурсов | Контейнеры более эффективны, так как они используют ресурсы хоста и не нуждаются в запуске полной операционной системы. | ВМ требуют больше ресурсов, так как каждая ВМ имеет свою собственную операционную систему. |
| Время запуска | Контейнеры могут запускаться за секунды, так как им не нужно загружать полную операционную систему. | ВМ могут загружаться несколько минут, так как им нужно загрузить всю операционную систему. |
Начало работы с Docker
Для начала работы с Docker вам необходимо установить движок Docker на вашу систему. Вы можете загрузить и установить Docker с официального сайта Docker (https://www.docker.com/get-started). После установки вы можете начать использовать Docker для создания, развертывания и запуска своих приложений.
Создание пользовательского образа Docker
Создание пользовательского образа Docker — это процесс построения нового образа на основе существующего базового образа и последующего добавления собственных настроек, таких как код приложения, зависимости и конфигурации.
Dockerfile
Dockerfile — это текстовый файл, содержащий все инструкции, необходимые для построения образа Docker. Он определяет базовый образ, шаги, выполняемые во время процесса сборки, и конечную конфигурацию образа.
Вот пример Dockerfile:
## Использование официального базового образа Ubuntu 22.04
FROM ubuntu:22.04
## Обновление индекса пакетов и установка необходимых пакетов
RUN apt-get update && apt-get install -y \
git \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
## Установка рабочей директории
WORKDIR /app
## Копирование кода приложения
COPY . /app
## Установка зависимостей Python
RUN pip3 install --no-cache-dir -r requirements.txt
## Открытие порта, на котором будет работать приложение
EXPOSE 8080
## Установка команды для запуска приложения
CMD ["python3", "app.py"]
Построение пользовательского образа
Чтобы построить пользовательский образ Docker с помощью Dockerfile, выполните следующие шаги:
Создайте Dockerfile в каталоге вашего проекта.
Откройте терминал и перейдите в каталог проекта.
Запустите следующую команду для построения образа:
docker build -t my-custom-image .Эта команда построит новый образ Docker с именем "my-custom-image" с использованием инструкций из Dockerfile.
Загрузка образа в реестр
После построения пользовательского образа Docker вы можете загрузить его в реестр Docker, такой как Docker Hub или частный реестр, чтобы его можно было использовать и развертывать на других системах.
Войдите в реестр Docker:
docker loginПометьте образ URL-адресом реестра и вашим именем пользователя:
docker tag my-custom-image username/my-custom-image:latestЗагрузите образ в реестр:
docker push username/my-custom-image:latest
Теперь ваш пользовательский образ Docker доступен в реестре и может быть скачан и использован другими разработчиками или развернут в производственной среде.
Развертывание и управление приложениями Docker
После создания пользовательского образа Docker вы можете развернуть и управлять вашими приложениями, основанными на Docker. Этот раздел охватывает ключевые понятия и шаги, связанные с развертыванием и управлением приложениями Docker.
Развертывание контейнеров Docker
Для развертывания контейнера Docker можно использовать команду docker run. Эта команда запускает новый контейнер на основе указанного образа и позволяет настроить различные параметры, такие как отображение портов, переменные окружения и монтирование томов.
Вот пример запуска контейнера на основе образа "my-custom-image":
docker run -d -p 8080:8080 -e DB_HOST=192.168.1.100 -v /data:/app/data my-custom-image
Эта команда:
- Запустит контейнер в отсоединенном режиме (
-d) - Отобразит порт 8080 контейнера на порт 8080 хоста (
-p 8080:8080) - Установит переменную окружения
DB_HOSTсо значением192.168.1.100(-e DB_HOST=192.168.1.100) - Смонтует директорию хоста
/dataв директорию контейнера/app/data(-v /data:/app/data) - Использует образ "my-custom-image" для запуска контейнера
Управление контейнерами Docker
Docker предоставляет несколько команд для управления запущенными контейнерами:
docker ps: Список всех запущенных контейнеровdocker stop <container_id>: Остановка запущенного контейнераdocker start <container_id>: Запуск остановленного контейнераdocker logs <container_id>: Просмотр логов контейнераdocker exec -it <container_id> /bin/bash: Доступ к оболочке запущенного контейнера
Docker Compose
Docker Compose — это инструмент, позволяющий определять и управлять многоконтейнерными приложениями Docker. Он использует файл YAML для настройки служб, сетей и томов вашего приложения.
Вот пример файла docker-compose.yml:
version: "3"
services:
web:
build: .
ports:
- "8080:8080"
environment:
- DB_HOST=database
depends_on:
- database
database:
image: mysql:5.7
environment:
- MYSQL_DATABASE=myapp
- MYSQL_ROOT_PASSWORD=secret
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
Этот файл Compose определяет две службы: веб-службу и базу данных. Веб-служба строится из текущей директории, а служба базы данных использует официальный образ MySQL 5.7. Службы связаны через сеть, а данные службы базы данных сохраняются в именованном томе.
Для развертывания этого приложения можно запустить docker-compose up -d в той же директории, что и файл docker-compose.yml.
Масштабирование приложений Docker
Docker упрощает масштабирование ваших приложений путем добавления или удаления контейнеров. Вы можете использовать Docker Compose для масштабирования ваших служб:
docker-compose up -d --scale web=3
Эта команда запустит три экземпляра службы "web".
Мониторинг и логирование
Docker предоставляет встроенные инструменты для мониторинга и логирования ваших контейнеров. Вы можете использовать команду docker stats для просмотра использования ресурсов в реальном времени и команду docker logs для доступа к логам контейнера.
Кроме того, вы можете интегрировать ваши приложения Docker с внешними инструментами мониторинга и логирования, такими как Prometheus, Grafana и Elasticsearch, чтобы получить более продвинутые возможности и информацию.
Резюме
В этом руководстве вы узнали, как создать пользовательский образ Docker с помощью Dockerfile, развернуть и управлять приложениями Docker. Теперь вы знаете команду для построения образа Docker из пользовательского Dockerfile, что позволит вам оптимизировать процесс контейнеризации и более эффективно развертывать приложения.



