Назад в блог

Работа с Docker Data Volumes на Ubuntu 20.04

Работа с Docker Data Volumes на Ubuntu 20.04

Введение

Docker Data Volumes — важная концепция при контейнеризации ваших приложений. Понимание этой концепции жизненно важно для обеспечения наилучшей работы вашего контейнеризированного приложения, а также для надежного хранения и управления данными. Однако, несмотря на важность этой концепции, она также является запутанной и сложной для многих разработчиков. Разработчикам и DevOps-специалистам важно понимать, как настраивать Docker Data Volumes, понимать их правильное использование, знать различные типы томов и то, какой тип выбрать для своего приложения.

Это руководство посвящено объяснению концепции и использования Docker Data Volumes. После завершения этого руководства вы освоите настройку и работу с любым типом Docker Data Volume.

Предварительные требования

Для прохождения этого руководства вам понадобятся следующие элементы:

  1. Ubuntu установлена. Ознакомьтесь с нашим Как настроить сервер Ubuntu 18.04 руководством для быстрой справки.
  2. Пользователь Ubuntu с привилегиями sudo. Этот шаг может быть сложным, особенно если вы не знакомы с Linux. Прочитайте Настройка файла Linux Sudoers для получения подробного руководства.
  3. Docker установлен на Ubuntu. Чтобы установить Docker на вашу Ubuntu, вы можете перейти в наш блог Как установить & управлять Docker на Ubuntu в публичном облаке .

Хотя это руководство ориентировано на управление Docker на Ubuntu, docker команды применимы во всех операционных системах с установленным Docker.

Понимание того, как работают контейнеры Docker

Чтобы полностью понять Docker Data Volumes, необходимо знать, как работают контейнеры Docker. В этом разделе мы приводим обзор основ для новых пользователей Docker. Если вы знаете, как работает Docker, или являетесь опытным пользователем Docker, вы можете пропустить этот раздел и сразу перейти к томам данных.

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

Поскольку дополнительной гостевой ОС нет, платформа Docker делит ресурсы с хост-машиной. Запуск приложения Docker происходит быстро, но сложности возникают, когда вам приходится делиться ресурсами. У Docker нет собственной памяти или хранилища для постоянного хранения данных. Эти ресурсы должны поступать с хост-машины. Люди, привыкшие к использованию виртуальных машин, находят этот процесс совместного использования и управления ресурсами сложным. Отсутствие надлежащих знаний может привести к неожиданным и нежелательным результатам. Хотя это руководство предполагает, что вы знакомы с экосистемой Docker, вы можете ознакомиться с нашим подробным руководством Что такое Docker? Обзор экосистемы Docker для быстрого освежения знаний.

Сохранение данных с использованием Docker Data Volumes

При работе с Docker вы не можете создать том непосредственно внутри него. Поэтому для хранения данных нам нужно создать контейнер тома Docker с прикрепленным к нему томом. Чтобы подключить наше приложение Docker к этому контейнеру тома данных, мы используем Docker’s --volume-from для получения контейнера и его подключения к нашему приложению.

Мы разберем этот процесс шаг за шагом:

  1. Сначала создайте новый контейнер с именем my-container выполнив команду ниже:
    Docker Data Volumes 1 docker create my-container
    Это создаст новый контейнер в папке /tmp . При необходимости вы можете изменить директорию папки.
  2. Теперь, когда ваш контейнер данных готов, вы можете производить в него запись, запустив новый контейнер Ubuntu с флагом --volume-from и затем запустив bash. Все, что мы записываем в tmp каталог будет сохранен в /tmp папке нашей хост-машины:
    Docker Data Volumes 2 Run docker container
    Параметр командной строки -t вызывает терминал изнутри контейнера. Флаг -i делает соединение интерактивным. В командной строке bash контейнера Ubuntu создайте файл в /tmp:
  3. Наконец, выйдите из bash, выполнив команду exit . Затем выполните команду ниже:
    Docker Data Volumes 3 New container sample file
    Вы найдете свой sample_file в этом каталоге. Ограничений на количество указываемых томов нет. Вы можете добавить столько томов, сколько хотите, используя флаг --volumes-from . Вы также можете создать столько контейнеров томов данных, сколько захотите.

Доступ к данным между хостом и контейнером Docker

Для читателей, знакомых с виртуализацией, этот вариант аналогичен общей папке в виртуальных машинах. Здесь вместо создания контейнера data-only мы запускаем наше приложение Docker с использованием образа Docker и переопределяем один из его каталогов содержимым каталога на хост-системе.

Обычный сценарий — сохранение файлов логов на хост-машине. Это может понадобиться для того, чтобы мы могли анализировать эти файлы по мере необходимости, не заходя внутрь машины. Для этого сценария предположим, что вы используете Docker Nginx image и хотите хранить его файлы логов на хост-машине. Docker-образ Nginx записывает логи в каталог /var/log/nginx , но это /var/log/nginx внутри Docker-контейнера Nginx. Таким образом, это расположение недоступно для хост-машины.

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

  1. Сначала создайте на хост-машине каталог, в котором вы хотите хранить логи:
    Затем запустите контейнер, выполнив команду ниже:
    Docker run nginx container
  2. Эта команда run принимает несколько аргументов, поэтому давайте разберем ее, чтобы лучше понять:
    • -p 5000:80: Настройка перенаправления портов. Контейнер Nginx по умолчанию слушает порт 80 , и это сопоставляет порт контейнера Nginx 80 с портом 5000 на хост-системе.
    • -d: Отключить процесс и запустить его в фоновом режиме.
    • -v ~/my-nginxlogs:/var/log/nginx: Мы связываем каталог /var/log/nginx изнутри контейнера Nginx с каталогом /my-nginxlogs на хост-машине. Этот символ : разделяет путь хоста и путь контейнера. Путь хоста всегда идет первым.

Теперь, когда наш контейнер Nginx запущен, сначала проверьте, работает ли сервер Nginx на порту 5000 нашей хост-машины, открыв веб-браузер и перейдя по URL-адресу: http://localhost:5000. Как только появится приветственная страница, ваш сервер Nginx готов и создает логи в своей папке /var/log/nginx .

Если вы откроете папку /my-nginxlogs на вашей хост-машине, вы увидите здесь файлы логов из Docker-контейнера Nginx. Если вы внесете изменения в папку /my-nginxlogs на хост-машине во время работы контейнера Nginx, изменения также отразятся в папке контейнера /var/log/nginx также.

Заключение

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

Для дальнейшего изучения Docker ознакомьтесь со следующими руководствами в нашем блоге:

Приятной работы!

author

Pranay Kapgate

Автор · CloudSigma

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

Комментарии

Комментариев пока нет. Будьте первым.