Рубрики
Uncategorized

Действительно, используя контейнеры разработки кодов Visual Studio Code

Развитие внутри контейнера Docker может быть легким и продуктивным, но как вы делаете его работать для реального проекта с несколькими контейнерами (база данных, веб-сервер и т. Д.)?. Теги с VisualStudioCode, Devcontainer, контейнером, DEVOPS.

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

Контейнеры для развития

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

Прежде чем идти дальше, позвольте мне уточнить: контейнер для развития не просто один контейнер. Вы также можете предоставить Docker Compose File Где вы можете описать все другие контейнеры, ваша необходимость работать над вашим проектом (сервер базы данных, веб-сервер и т. Д.)

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

  • Самый быстрый: они могут щелкнуть ссылку на Github и использовать веб-версию кода и добраться до работы в течение нескольких минут.
  • Быстро: они могут нажать еще одна кнопка Чтобы раскрутить необходимые контейнеры на GitHub, а затем соединиться с собственной, локально установленной и настроенной копией кода.
  • Несколько быстро: они могут клонировать проект и открыть его в своей локальной копии кода, позволяя коду обеспечивать контейнеры на их локальной машине
  • Не быстр вообще: для по-настоящему выковывающими разработчики они могут делать все, что им нравится в свое время, мы уже предоставили три рабочих варианта!

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

Получение его настройки

Если вы на заборе о Visual Studio Code, то просто поставим ваши опасения и доверь мне; это стоит того. Это бесплатно, это популярно, легко установить, и существуют расширения, доступные для почти любой функции, которым ему не хватает. Это может быть не каждому предпочтениям разработчика Но это легко достаточно хорошо, чтобы сделать работу.

Следующая установка (если вы еще не имеете) …

После этого первый шаг состоит в том, чтобы получить настройку контейнера для разработки и работы. Вы можете начать с нуля, создав каталог для вашего образца проекта (может быть, называется «New-Project», избегайте пробелов в имени каталога), а затем каталог внутри этого называется .devcontainer с файлом под названием devcontainer.json внутри этого. Простейший файл будет содержать только указатель на изображение докера. Используя код, создайте и сохранить следующее devcontainer.json файл.

{
  "image": "mcr.microsoft.com/vscode/devcontainers/php:8-bullseye"
}

Это раскрутит контейнер для развития, основанный на изображении Microsoft PHP, который, в свою очередь, построен на Участке Debian Bullseye. Чтобы попробовать, выберите «Палитра команд …» из-под «Меню« Просмотр »и начните« Разработчик »: Reload Window« Чтобы выбрать эту команду.

Код закроется и снова откроет образец проекта И тогда он предложит вам установить рекомендуемые расширения. Нажмите на кнопку «Установить» ».

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

Этот код времени откроет проект, а затем включает новый контейнер Docker, используя изображение, которое мы указали в .devcontainer.json файл. Затем он устанавливает свой собственный набор инструментов внутри этого контейнера, чтобы облегчить редактирование файлов, запустить код и т. Д.

Когда все сделано, вы вернетесь в окно обычного кода, с вашими файлами проекта на левой части. Но если вы выберете «новый терминал …» из под «окном терминала», вы увидите, что терминал открыл сеанс внутри контейнера!

Настроить контейнер для развития

Это самый простой сценарий, в котором мы просто Plop определение контейнера для развития в наш проект и код вращается. Но что, если нам нужно добавить некоторые из наших собственных инструментов? Возможно, наша команда сильно зависит от Flyway Для миграции базы данных и Httpie для тестирования наших спокойных конечных точек. Это может быть легко сделано путем написания нашего собственного определения докера. Сначала снимите атрибут «Image» с вашего devcontainer.json Файл и замените его с помощью атрибута «Dockerfile», который указывает на наш в ближайшее время для создания Dockerfile Отказ

{
    "dockerFile": "Dockerfile"
}

Далее создайте новый Dockerfile Рядом с вашим devcontainer.json Файл и добавьте его следующий рецепт к нему.

FROM mcr.microsoft.com/vscode/devcontainers/php:8-bullseye

# update apt
RUN apt update

# install httpie
RUN apt install -y httpie

# install flyway
WORKDIR /usr/local
RUN wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/8.0.0-beta1/flyway-commandline-8.0.0-beta1-linux-x64.tar.gz \
| tar xvz && sudo ln -s `pwd`/flyway-8.0.0-beta1/flyway /usr/local/bin

Вместо того, чтобы использовать изображение PHP напрямую, мы используем его в качестве отправной точки для нашего собственного изображения контейнера. Мы бежим APT обновление Чтобы снять последний список пакетов для распределения, а затем мы используем APT установить httpie. С этим сделано, мы следуем инструкциям из веб-сайта Flyway, чтобы также установили этот инструмент.

Сохраните файл, а затем перезагрузите окно (выбрав опцию из палитра команды). Код закроется, а затем откройте проект и пригласите вас открыть проект еще раз в контейнере, продолжайте и сделайте это. Хотя это делает, что заметит, что определение контейнера для развития изменилось и спросит вас, если вы хотите восстановить его, сделайте это также.

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

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

Добавьте больше контейнеров в среду разработки

Если у нас есть ничего общего общего, ваша следующая, хотя и что-то вдоль линий «Как мне получить больше контейнеров, для таких вещей, как база данных или веб-сервер? » Точно так же, как мы добавили Dockerfile Мы также можем добавить определение Docker Compose. Когда код запускает проект, он поднимет все контейнеры в определении Compose, а затем подключиться к контейнеру разработки. Давайте добавим сервер базы данных нашего Devcontainer.

Откройте свой devcontainer.js Файл, удалите Dockerfile атрибут и заменить его А DockerComposefile Вход.

{
  "dockerComposeFile": "docker-compose.yml",
  "service": "development",
  "workspaceFolder": "/workspace"
}

Мы указываем на наше определение Devcontainer в нашем Docker Compose File, с Сервис атрибут Мы позволяем кодам знать, какой контейнер мы хотели бы, чтобы подключиться к тому, когда этот стек для проекта воспитывается. Наконец, мы добавляем Рабочая копия Запалы Атрибут и предоставьте полный путь, в котором мы хотим, чтобы наши файлы проекта установлены.

Нам также нужно создать этот составной файл. Создайте новый файл под названием Docker-Compose.yml Прямо рядом с нашим определением Devcontainer и добавьте следующее.

services:
  development:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - ..:/workspace
    stdin_open: true

В STANZA выше мы описываем контейнер, который мы будем использовать для нашей среды развития. Мы указываем на наши существующие Dockerfile И мы отображаем в объеме, который удержит наши файлы проекта (каталог над одним удерживающим определением Devcontainer, установлен на «/WorkingPace»). контекст Атрибут говорит, что составят искать файлы в текущем каталоге, stdin_open Указывает, что мы будем подключаться к интерактивному сеансу.

Это касается нашего контейнера для развития, теперь мы добавим сервер базы данных. Поскольку мы используем PHP для этого проекта, ясно, что база данных должна быть MySQL. Прежде чем добавить службу базы данных в наш файл Compose, давайте настроим учетные данные, которые мы хотели бы использовать. Docker Compose будет читать файл с именем .env.env. Когда он начнет сборки стека, и он сделает переменные в этом файле доступным для нашего сценария. Создать новый файл с именем .env.env. Рядом с вашим Docker-Compose.yml Файл и добавьте текст ниже.

DATABASE_HOST=mysql_db
DATABASE_USER=example_account
DATABASE_PASSWORD=applesauce
DATABASE_DB=example

Учетные данные базы данных теперь будут в переменных среды, которые мы можем использовать в нашем файле Compose. Добавьте следующую услугу, вы свой Docker-Compose.yml Файл, чтобы получить настройку нашей настройки сервера базы данных.

  mysql_db:
    hostname: mysql_db
    image: mysql/mysql-server:latest
    environment:
      - MYSQL_ROOT_PASSWORD=${DATABASE_PASSWORD}
      - MYSQL_DATABASE=${DATABASE_DB}
      - MYSQL_USER=${DATABASE_USER}
      - MYSQL_PASSWORD=${DATABASE_PASSWORD}

Прежде чем мы вращаемся, было бы неплохо иметь удобный способ взаимодействия с нашим сервером базы данных изнутри кода …

Добавить расширения кода Visual Studio

Фактически, это также удобно иметь расширения кода, которые мы согласились использовать в нашем проекте, установленном вместе со всем остальным. Давайте добавим расширение PHP, а затем клиент MySQL. Откройте свой devcontainer.json Файл и добавьте Extensons атрибут перечислен ниже.

{
    "dockerComposeFile": "docker-compose.yml",
    "service": "development",
    "workspaceFolder": "/workspace",
    "extensions": [
        "felixfbecker.php-pack",
        "cweijan.vscode-mysql-client2"
    ]
}

Откройте командный палитра и попросите код перезагрузить папку. Код предложит вам восстановить Devcontainer, поскольку файлы конфигурации изменились; Согласитесь и позволить ему поднять новую среду. Когда вы закончите, вы вернетесь к вашему кодовому окну, новые расширения будут перечислены в панели «Удлинения» в разделе «Контейнер DEV — установлен».

Вы можете нажать на значок для нашей базы данных клиента и введите информацию о соединении (запомните атрибут «HostName» в нашем файле Compose?) Для подключения к нашей новой базе данных MySQL.

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

Эта статья уже становится довольно длинным, мы не будем подробно рассмотреть миграцию или веб-сервер, работающий здесь. Вы можете взять на себя удар по нему самостоятельно или вы Может оформить заказ на полный пример проекта на GitHub Отказ

Гитубное пространство

Последнее, что я хотел упомянуть, так это то, что у нас есть все, что нам нужно для размещения нашей среды развития на Гитубное пространство . Если мы публикуем это на GitHub, наше определение Devcontainer получит забрать и (если он включен для вашей учетной записи) вкладку «Коды» с помощью кнопки «Новое кодовое пространство» появится для всех, кто споткнутся к проекту. Любой, кто хотел бы внести свой вклад, может просто нажать кнопку и начать работу в считанные секунды. Кодовое пространство будет использовать свои учетные данные GitHUB для обработки толкания, тяги и совершения кода.

Резюме

Я рекомендую вам оформить заказ Пример проекта на github , вы должны попробовать его в кодированном пространстве, а также запускать стек в кодированном пространстве, а затем подключаться к вашей местной версии Visual Studio Code. На мой взгляд, этот последний вариант довольно убедительна: вы можете настроить код так, как вам нравится (в том числе расширения, которые You предпочитают), а затем подключиться к набору беговых контейнеров, размещенных в Github.

Это Особенно убедительно Если вы на платформе, что Только Обеспечивает докер через Docker Desktop (MacOS или Windows). В то время как Docker Desktop отлично подходит для небольших проектов, что-либо значительное размера принесет Docker Desktop к его коленям. Реальный болевой момент здесь совмещает файлы из хост-машины на виртуальную машину, которая работает Linux (и Docker), а затем разделить эти файлы еще раз с фактическими контейнерами, работающими в Docker.

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

Кредиты

Изображение баннера есть С этого сайта Отказ

Оригинал: «https://dev.to/cmiles74/really-using-visual-studio-development-containers-561e»