Разработка с докером (3 части серии)
Docker — отличный инструмент, который помогает разработчикам построить, развертывать и запускать приложения более эффективно в стандартизированном виде. Для приложений Frontend нам нужен только изображение Docker для локального развития, потому что мы развертываем его к поставщику статического хостинга. В этом случае мы можем жить без пользовательского образа докера? Можем ли мы иметь тот же опыт развития, который у нас был без Docker? Да, это проще, чем вы думаете.
Требования
Предположим приложение, в котором нам нужно только нажать начало, и все работает. Эта настройка может быть любое приложение, создаваемое реакцией, Vue, Angular CLI. Для демонстрационных целей я буду использовать мой Vue ToDo приложение Отказ
Во время разработки мы будем выполнять следующие шаги:
- Установка зависимостей с
Установка NPM
- Начните приложение с
NPM Начните
- Измените файл и проверьте изменения в браузере
- Используйте код-завершение модулей в редакторе
- Добавьте новую зависимость от
package.json
и установить его
Custom Docker File.
Если вы ищете в Интернете для разработки Frontend с Docker, вы можете найти много статей, использующих пользовательский образ докера. Давайте посмотрим и посмотрим, как это работает.
Docker File Начинается с определения базового изображения (Node.js 12.x) на то, что мы будем строить ( от
) и установив рабочий каталог на /приложение
Папка ( Workdir
). Каждая команда начинается с Беги
или CMD
будет иметь эту папку как рабочий каталог по умолчанию.
Следующим шагом является скопирование исходных файлов ( Копировать
) и установить зависимости. Мы копируем package.json
отдельно от остальных файлов. Почему? Потому что Docker кэширует каждый шаг докера при создании изображения несколько раз. Когда не изменяйте ничего, и постройте изображение снова, он ничего не сделает, поскольку шаги кэшируются. Если мы изменим файл JavaScript, Docker запускает команды Копировать./приложение
Отказ Когда мы изменим package.json
Файл, Докер будет перезапущен команды от Копировать Package.json/приложение
.
По умолчанию приложения, работающие внутри контейнера на конкретном порту, не доступны на хостом. Мы должны сделать порта доступным ( разоблачить
). Только после этого мы можем ввести URL в нашем браузере ( http://localhost: 8900 ) и посмотрите результат.
Чтобы запустить это изображение, мы должны построить его и запустить созданный контейнер.
# Build the image: docker build -tdocker build -t client . # Run the image: docker container run -p docker container run -p 8900:8900 client
Недостатки
Вышеуказанное изображение Docker работает, но имеет несколько недостатков:
Файлы, сгенерированные внутри контейнера, не видны из хост-машина, только внутри контейнера. Это означает, что мы не увидим
Node_Modules
Папка на нашем хозяином машине и из-за этого мы теряем кодовое завершение в редакторе. Мы не можем совершить сгенерированныеPackage.lock.json
Для контроля источника, потому что он также не доступен на хост-машине.Мы должны остановить, построить и перезапустить контейнер в зависимости и изменения файла. Мы теряем способность Live-Reled.
Познакомьтесь с составным докером
Docker может создавать одноизонные изображения и запускать встроенные контейнеры. Docker Составьте шаги немного дальше, так как он может создавать и запускать несколько изображений одновременно. В этом руководстве мы не будем использовать многочисленные возможности сборки; Мы будем использовать его только для преодоления недостатков предыдущего примера.
Хотя мы можем использовать предыдущие Dockerfile
Чтобы бежать с Docker Compose, мы будем использовать его таким образом, чтобы пропустить запись пользовательского изображения.
Вместо того, чтобы определять изображение с последовательностью команд, Docker Compose использует Формат файла Config yaml Отказ Под Услуги
Ключ, изображение для приложения Vue называется клиент
. Это эквивалентно названию в Docker Build -T
команда. Описание начинается так же: Определение базового изображения ( Image
) и установка рабочего каталога ( Whience_dir
).
Ключевая разница исходит из Объемы
имущество. Используя его, локальная папка синхронизируется с контейнером. Если мы выполним NPM установить
Команда в контейнере, Node_Modules
Папка появится на хостом также: мы получаем завершение кода и файл блокировки.
Приложение начинается в контейнере также ( Команда: SH -C «NPM install install instate && npm запуск"
), выставляя порт на хост-машина, необходим для доступа к браузеру ( порты
).
Чтобы запустить эту настройку, мы должны построить его и запустить встроенный контейнер.
# Build the image and start the container docker-compose up
Если вы посмотрите на два решения, они почти идентичны. Существует большая корреляция между командами в Dockerfile
и поля конфигурации в Docker-Compose.yml
Конфигурация файла. Единственное отличие состоит в том, как они обрабатывают монтируемые файлы, и это решает нашу проблему синхронизации.
Резюме
При выполнении местного развития важно иметь быструю петлю обратной связи и завершение кода. Если мы пойдем с чистым решением докера, мы теряем обоих. Мы должны задать помощь Docker Big Brother Docker Compose, чтобы помочь нам с синхронизацией папки. Перемирив нашу настройку в Docker Compose, мы вернемся на скорость и завершение кода. Я надеюсь, что этот трюк поможет вам и экономит тонну времени развития.
Особая благодарность Ибен за помощь мне с настройкой.
Разработка с докером (3 части серии)
Оригинал: «https://dev.to/emarsys/frontend-development-with-docker-simplified-254i»