Docker Compose — это мощный инструмент оркестрации, предназначенный для упрощения управления и развертывания многоконтейнерных приложений с помощью Docker. docker-compose.yml file упрощает развертывание, определяя сложные приложения с несколькими службами, сетями и томами в одном файле. Одним из важных аспектов работы с Docker Compose является управление постоянными данными с помощью томов.

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

Что такое тома Docker?

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

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

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

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

Типы томов Docker

Тома Docker необходимы для управления данными в приложениях на основе контейнеров. Они бывают двух разных типов: именованные тома и анонимные тома. В этом разделе рассматриваются ключевые различия между этими двумя типами и демонстрируется, как их реализовать для управления данными в ваших приложениях.

Именованные и анонимные тома служат разным целям и предлагают различные возможности контроля и управления. Хотя именованные тома обычно предпочтительнее для большинства случаев использования из-за их удобочитаемых идентификаторов и простоты управления, важно понимать, как работают оба типа, чтобы максимизировать их преимущества.

Именованные тома

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

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

Чтобы создать именованный том в Docker, запустите:

docker volume create my_named_volume

Анонимные тома

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

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

Чтобы создать контейнер с анонимным томом, выполните:

docker run -v /data nginx

Эта команда монтирует анонимный том в /данные каталог внутри контейнера nginx. Вы можете заменить nginx с именем контейнера, в который вы монтируете том.

Как создавать тома и управлять ими с помощью Docker Compose

Docker Compose упрощает создание томов и управление ими, позволяя вам определять их в docker-compose.yml файл. Этот файл содержит конфигурацию служб, сетей и томов вашего приложения, что позволяет легко управлять ресурсами вашего приложения в одном месте.

1. Определите тома в Docker Compose

Чтобы создать именованный том в docker-compose.yml файл, определите его в разделе volumes ключ. При необходимости вы также можете указать драйвер тома и параметры.

2. Подключите тома к контейнерам

Чтобы прикрепить том к контейнеру, используйте команду volumes ключ внутри service определение в docker-compose.yml файл. Укажите имя тома, затем двоеточие и путь к контейнеру, в котором вы хотите смонтировать том.

Вы также можете использовать тома в нескольких контейнерах, используя одно и то же имя тома.

Вот пример создания именованных томов под названием web_data и db_data в вашей docker-compose.yml файл:

version: '3.8'
services:
  web:
    image: nginx
    volumes:
      - web_data:/var/www/html
  web-test:
    image: nginx
    volumes:
      - web_data:/var/www/html # Web and web test share the web_data volume
  db:
    image: mysql
    volumes:
      - db_data:/var/lib/mysql
volumes:
  web_data:
  db_data:
    driver: local # Define the driver and options under the volume name
    driver_opts:
      type: none
      device: /data/db_data
      o: bind

В этом примере определяются два именованных тома. Затем он монтирует тома в соответствующие контейнеры по определенным путям. Далее он монтирует web_data объем до /вар/www/html каталог в веб-контейнере и db_data объем до /вар/lib/mysql каталог в db контейнер.

Контейнеры web и web-test поделитесь web_data том, что позволяет им получать доступ и изменять один и тот же объем данных.

Путем определения томов и управления ими внутри docker-compose.yml файл, вы можете легко создавать, обновлять и удалять тома по мере необходимости, не управляя ими вручную с помощью команд Docker. Этот оптимизированный процесс позволяет вам сосредоточиться на разработке и развертывании вашего приложения, в то время как Docker Compose занимается управлением базовыми ресурсами.

Как работать с командами Docker Compose и Volume

Docker Compose предоставляет несколько команд, которые помогут вам эффективно управлять вашим приложением и его ресурсами. Давайте рассмотрим эти команды и то, как они связаны с томами, более подробно:

  • docker compose up создает и запускает ваше приложение, включая его службы, сети и тома. Если вы определяете именованный том в docker-compose.yml файл до того, как он существует, эта команда создаст его автоматически.
  • docker compose down останавливает и удаляет службы и сети вашего приложения. По умолчанию именованные тома не удаляются. Чтобы удалить именованные тома, используйте команду --volumes или -v флаг.
  • docker compose ps перечисляет контейнеры и их текущий статус, включая информацию, связанную с томом.
  • docker compose config проверяет и отображает эффективную конфигурацию, созданную из docker-compose.yml файл, включая определения томов.

Получение списка томов

Чтобы вывести список всех томов, используйте ls:

docker volume ls

В выходных данных отображаются все именованные тома, включая те, которые созданы Docker Compose.

Проверка томов

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

docker volume inspect db_data

Подробная информация о томе представлена ​​в формате JSON. Например, учитывая docker-compose.yml файл, указанный выше, это возвращаемый результат:

[
    {
        "CreatedAt": "some-date-here",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/path/on/host/where/volume/is/mounted",
        "Name": "db_data",
        "Options": {
            "device": "/data/db_data",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local",
        "Status": {
            "Mounts": [
                ...
            ]
        }
    }
]

Удаление тома Docker по имени

Чтобы удалить том Docker, вы можете использовать docker volume rm за которым следует имя тома:

docker volume rm volume-name

Очистите неиспользуемые тома

Чтобы удалить неиспользуемые тома, используйте prune:

docker volume prune

Эта команда помогает очистить среду разработки и освободить место для хранения. Он удаляет все неиспользуемые тома, не связанные с контейнерами, включая те, которые создает Docker Compose.

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

Версии Docker Compose

По состоянию на июль 2023 года Docker Compose V1 перестал получать обновления. Он также больше не доступен в новых выпусках Docker Desktop. Однако Docker Desktop продолжает поддерживать docker-compose псевдоним для перенаправления команд на docker compose для удобства и улучшенной совместимости со сторонними инструментами и скриптами.

Чтобы переключить любой существующий код с версии Docker Compose 1 на 2, просто замените тире пробелом. Например, docker-compose up становится docker compose up.

В версии 2 вы можете использовать &compose команду непосредственно в интерфейсе командной строки (CLI) Docker, переключите контекст Docker для создания контейнера в облачном сервисе и используйте Amazon ECS и Microsoft ACI.

Краткое содержание

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

Docker Compose предлагает оптимизированный подход к созданию томов и управлению ими внутри docker-compose.yml файл. Этот метод упрощает процесс разработки и обеспечивает эффективное использование ресурсов.

Использование томов также делает разработку гибкой и эффективной: Docker Compose предоставляет различные команды, связанные с томами, которые помогут вам эффективно контролировать ресурсы приложения. Использование этих команд позволяет легко создавать, проверять и очищать тома.

Размещая свое приложение на Kinsta, вы получаете быструю, безопасную и надежную инфраструктуру, а ваши проекты развернуты в сети премиум-уровня Google Cloud Platform и на компьютерах C2. Выбирайте между 35 центрами обработки данных и CDN с поддержкой HTTP/3 и более чем 260 точками доступа.

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

Kinsta предоставляет высококачественные ресурсы и контент для веб-разработчиков, включая подробные учебные пособия и руководства для различных языков и инструментов, таких как Docker Compose. Прочтите наш контент, посвященный Docker, в блоге Kinsta, чтобы узнать больше о Docker.