Использование подключения BIND

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

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

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

Быстрые сравнения типов томов

Подключения BIND и именованные тома — это два основных типа томов, входящих в подсистему Docker. При этом доступны дополнительные драйверы томов для поддержки других вариантов использования (SFTP, Ceph, NetApp, S3 и др.).

Свойство Именованные тома Привязки подключений
Расположение узла Выбирает Docker Указываете вы
Пример подключения (с использованием -v) my-volume:/usr/local/data /path/to/data:/usr/local/data
Заполняет новый том содержимым контейнера Да Нет
Поддерживает драйверы томов Да Нет

Запуск контейнера режима разработки

Чтобы запустить контейнер для поддержки рабочего процесса разработки, выполните следующие действия:

  • Подключите исходный код к контейнеру
  • Установите все зависимости, включая зависимости "dev"
  • Запустите nodemon для отслеживания изменений в файловой системе
  1. Убедитесь, что предыдущие контейнеры getting-started не выполняются.

  2. Выполните в папке getting-started следующую команду (в Windows PowerShell замените символы \ на `). Вы узнаете, что будет дальше:

    docker run -dp 3000:3000 -w /app -v ${PWD}:/app node:12-alpine sh -c "yarn install && yarn run dev"
    
    • -dp 3000:3000 — то же, что и раньше. Выполните команду в отключенном (фоновом) режиме и создайте сопоставление портов
    • -w /app — определяет "рабочий каталог" или текущий каталог, из которого будет выполняться команда
    • -v ${PWD}:/app" — BIND подключает текущий каталог из узла в контейнере к каталогу /app
    • node:12-alpine — используемый образ. Обратите внимание на то, что это базовый образ для вашего приложения из Dockerfile
    • sh -c "yarn install && yarn run dev" — команда. Запустите оболочку с помощью sh (alpine не имеет bash) и выполните yarn install, чтобы установить все зависимости, а затем запустите yarn run dev. Если вы посмотрите на package.json, то увидите, что сценарий dev запускает nodemon.
  3. Для просмотра журналов можно использовать docker logs -f <container-id>. Вы будете готовы к работе, когда увидите следующее:

    docker logs -f <container-id>
    $ nodemon src/index.js
    [nodemon] 1.19.2
    [nodemon] to restart at any time, enter `rs`
    [nodemon] watching dir(s): *.*
    [nodemon] starting `node src/index.js`
    Using sqlite database at /etc/todos/todo.db
    Listening on port 3000
    

    Завершив просмотр журналов, выйдите, нажав клавиши Ctrl+C.

  4. Теперь внесите в приложение какое-нибудь изменение. В файле src/static/js/app.js измените кнопку Добавить элемент так, чтобы она называлась просто Добавить. Это изменение будет находиться в строке 109.

    -                         {submitting ? 'Adding...' : 'Add Item'}
    +                         {submitting ? 'Adding...' : 'Add'}
    
  5. Просто обновите страницу (или откройте ее), и вы увидите, что изменения появятся в браузере практически сразу. Перезапуск сервера узла может занять несколько секунд, поэтому, если возникнет ошибка, просто обновите страницу через несколько секунд.

    Снимок экрана с обновленной меткой для кнопки "Добавить"

  6. Внесите любые изменения по своему желанию. Когда все будет готово, завершите работу контейнера и создайте новый образ, используя docker build -t getting-started ..

Подключения BIND очень часто применяются для локальных настроек разработки. Преимущество в том, что на компьютере разработки не обязательно должны быть установлены все средства и среды сборки. Одна единственная команда docker run вытягивает среду разработки и делает ее готовой к работе. С Docker Compose вы познакомитесь в следующем шаге, так как это поможет вам упростить команды (у вас и так уже много флажков).

Резюме

Итак, вы научились сохранить базу данных и быстро реагировать на нужды и пожелания инвесторов и учредителей. Поздравляем! Но знаете что? Вас ждут отличные новости!

Ваш проект был выбран для дальнейшей разработки!

Чтобы подготовиться к работе, вам нужно перенести базу данных из рабочей среды в SQLite в другое место, которое позволит увеличить масштаб. Для простоты вы будете и дальше использовать реляционную базу данных и переключите приложение на использование MySQL. Но как запустить MySQL? Как обеспечить взаимодействие между контейнерами? Об этом вы узнаете в следующих разделах!

Дальнейшие действия

Продолжайте изучать учебник.