Работа с Docker в Visual Studio Code

Контейнеры и микросервисы — это два огромных , новые тенденции в разработке программного обеспечения сегодня.

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

Изображение для сообщения

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

Требования к программному обеспечению

  • Операционные системы : macOS (64-разрядная) Sierra
  • .NET Core SDK 2.1
  • Visual Studio Code 1.2x

В Docker уже есть отличная документация о том, как установить Docker на ваш компьютер с MacOS:

  • Зарегистрируйтесь в Docker Магазин для загрузки.
  • Загрузить из Docker Store ➜ Переместить в папку приложений ➜ Двойной щелчок.

Изображение для сообщения

  • Открыть терминал и проверить версии
 docker version 

вы можете запустить свой первый контейнер с команда ниже:

 docker run hello-world 

Изображение для сообщения

Поддержка Docker для VS Code обеспечивается расширением. Чтобы установить расширение Docker, откройте представление «Расширения», нажав ⇧⌘X, и найдите docker , чтобы отфильтровать результаты. Выберите расширение Microsoft Docker.

 Изображение для сообщения

Изображение для сообщения

Выберите «Да», чтобы отобразить предупреждающее сообщение «Необходимые ресурсы для сборки и отладки отсутствуют в DockerApi. Добавить их?»

Изображение для сообщения

На этом этапе мы немного отойдем от кода, чтобы внедрить Docker в наше решение и рабочий процесс.

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

VS Code понимает структуру Dockerfiles, а также доступный набор инструкций, поэтому вы получаете отличный опыт при создании этих файлов.

  1. Создайте новый файл в своей рабочей области с именем Dockerfile

Изображение для публикации

2. Нажмите ⌃Space, чтобы открыть список фрагментов, соответствующих допустимым командам Dockerfile . Нажатие кнопки «i» Подробнее … справа покажет всплывающее окно с подробностями и ссылкой на документацию Docker Online.

Изображение для сообщения

Удалить вновь созданный Dockerfile .

Написание файлов Docker и docker-compose вручную может быть сложным и трудоемким. Чтобы помочь вам, VS Code может сгенерировать необходимые файлы Docker для вашего проекта. В палитре команд (⇧⌘P) запустите команду Docker: Добавить файлы Docker в рабочую область, чтобы сгенерировать Dockerfile , docker-compose.yml и docker-compose.debug.yml файлы для вашего типа рабочей области. NET Core:

 Изображение для сообщения

Изображение для публикации

После добавления файлов Docker в рабочую область с помощью команды в палитре команд (⇧⌘P) для вашего типа рабочей области .NET Core, он создает файл Dockerfile путем извлечения последней версии контейнера Microsoft ASP.NET Core из концентратора Docker.

 FROM microsoft/dotnet:  2.1-sdk AS build-envWORKDIR/app # Скопируйте csproj и восстановите как отдельные слоиCOPY * .csproj ./RUN dotnet restore # Скопируйте все остальное и buildCOPY.  ./RUN dotnet publish -c Release -o out # Сборка среды выполнения imageFROM microsoft/dotnet: 2.1-aspnetcore-runtimeLABEL Имя = dockerapi Version = 0.0.1WORKDIR/appEXPOSE 80COPY --from = build-env/app/out .ENTRYPOINT dotnet DockerApi  .dll 

Имя сборки в ENTRYPOINT чувствительно к регистру. Ваш контейнер — это контейнер Linux, работающий на хосте macOS. Платформа Docker изначально работает в Linux. Linux чувствителен к регистру. Вы должны убедиться, что имя сборки в ENTRYPOINT должно совпадать с именем сборки в папке bin Debug .

Изображение для сообщения

Давайте разберемся, о чем говорит скрипт.

  1. Используйте стандартный Microsoft Контейнер ASP.NET Core из концентратора Docker
  2. Пометить контейнер как dockerapi и версию 0.0.1
  3. Скопируйте наш опубликованный код из папки «/app/out» в корневая папка в нашем контейнере,
  4. Открыть порт 80 для трафика веб-API,
  5. Запустить приложение dotnet из контейнера.

Чтобы сделать контекст сборки как можно меньше, добавьте файл .dockerignore в папку проекта и скопируйте в него следующее.

 bin   
obj
  1. Откройте интегрированный терминал VS Code и перейдите в папку вашего проекта.
  2. Используйте следующую запятую. nds для сборки и запуска образа Docker:

Сначала для сборки контейнера:

 $ docker build -t dockerapi. 

 Изображение для сообщения

Изображение для сообщения

Контейнер работает на порту 80, переданном в команде, и отображается на порт 8080 локально.

  • Перейдите по адресу http://localhost: 8080/api/values, чтобы получить доступ к вашему приложению в веб-браузере.

 Изображение для сообщения

Изображение для публикации

 $ docker logs [идентификатор контейнера]  

Команда docker logs извлекает журналы контейнера, присутствующего во время выполнения ..

Изображение для публикации

 $ docker stop [идентификатор контейнера  ] 

Команда docker stop останавливает один или несколько запущенных контейнеров. Основной процесс внутри контейнера получит SIGTERM , а после льготного периода — SIGKILL .

Изображение для публикации

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

Загрузить материалы

Как всегда, любая обратная связь оценены, поэтому не стесняйтесь комментировать здесь или писать в twitter — и, как всегда,



Код Visual Studio, C ++ и контейнер Docker

Microsoft объявил некоторое время назад, что добавлена ​​поддержка использования. Это означает, что пользовательский интерфейс может работать на вашем локальном компьютере, но вся тяжелая работа может выполняться на удаленном сервере.. В PSPDFKit у нас довольно большая кодовая база C ++, которая может легко пострадать из-за недостаточной мощности компьютера, поэтому мы решили рассмотреть возможность использования новой удаленной поддержки!

Идея

Мы автоматически тестируем наш код C ++ на каждой поддерживаемой нами платформе, но самая простая из имеющихся настроек — это тестирование в Linux с помощью Docker. Имея это в виду, мы начали рассматривать VS Code. Это также имело большой смысл, потому что мы могли использовать тот же компилятор и среду разработки, которые мы используем для наших тестов.

Мы хотели иметь следующее:

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

Локальная настройка

Перед тем, как пытаться сделать все это удаленно, мы попытались настроить полную среду для локальной разработки. Для этого нам нужны были расширения, и, к счастью, в VS Code их масса! Мы не будем вдаваться в подробности их настройки, потому что это выходит за рамки этого сообщения в блоге, но в целом все они в основном просто работали.

Вот что мы решили:

Для CMake мы использовали поддерживаемый Microsoft.

Наш код работает на многих различных компиляторах, но большинство платформ используют. Это побудило нас сначала попробовать расширение clangd , и мы рады сообщить, что оно работает очень и очень хорошо. В macOS нам пришлось добавить - query-driver =/usr/bin/clang ++ в качестве аргумента для правильной работы clangd , но помимо этого , нам больше ничего не нужно было делать.

Мы предпочитаем использовать LLDB в качестве нашего предпочтительного инструмента отладки, в основном потому, что это то, что автоматически доступно при использовании Xcode, и мы написали наш, чтобы сделать вещи Полегче. Мы обнаружили, что расширение VS Code CodeLLDB практически сразу работает.

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

После всего этого мы смогли перейти к тому, чтобы заставить это работать в контейнере Docker!

Настройка Docker

Первое, что нам нужно было сделать, это установить. Это установило три расширения: Remote — SSH, Remote — Containers и Remote — WSL. В этом посте мы будем использовать расширение Remote - Containers . У Microsoft есть документация по установке Docker.

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

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

Dockerfile

Microsoft имеет для использования с VS Code, один из которых мы использовали в качестве основы. Поскольку мы используем Debian, мы использовали mcr.microsoft.com/vscode/devcontainers/base:0-debian-10 .

Вот файл Dockerfile, который мы закончили с помощью:

docker

Скопируйте

 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 
 # --------------------------  --------------------------------------------------  -------------------------------- # Авторские права (c) Microsoft Corporation.  Все права защищены. # Под лицензией MIT.  См. Https://go.microsoft.com/fwlink/?linkid=2090316 для получения информации о лицензии. # ----------------------------  --------------------------------------------------  ------------------------------- # Чтобы полностью настроить содержимое этого образа, используйте следующий Dockerfile в качестве основы и добавьте  оператор RUN из этого файла: # https://github.com/microsoft/vscode-dev-containers/blob/v0.112.0/containers/debian-10-git/.devcontainer/DockerfileFROM mcr.microsoft.com/vscode/ devcontainers/base: 0-debian-10 # Базовый образ этого Dockerfile имеет пользователя без полномочий root с доступом sudo.  Используйте свойство "remoteUser" # в devcontainer.json, чтобы использовать его.  В Linux GID/UID пользователя контейнера # будут обновлены в соответствии с вашим локальным UID/GID (при использовании свойства dockerFile). # См. Https://aka.ms/vscode-remote/containers/non-root-user для  details.ARG USERNAME = vscodeARG USER_UID = 1000ARG USER_GID = $ USER_UID # Избегайте предупреждения, переключаясь на noninteractiveENV DEBIAN_FRONTEND = noninteractiveARG LLVM_VERSION = 10ARG LLVM_GPG_FINGERPRINT = 6084F3CF814B57C1CF12EFD515CF4D18AF4F7421 # Настроить APT и установить packagesRUN APT-получить обновление  # # установить инструменты C ++ && APT-получить -  y install  build-essential  cmake  git  git-lfs  ninja-build  ccache  zsh  # # [Необязательно] Обновите UID/GID, если необходимо && if ["$ USER_GID"! = "1000"] ||  ["$ USER_UID"! = "1000"];  затем  groupmod --gid $ USER_GID $ USERNAME  && usermod --uid $ USER_UID --gid $ USER_GID $ USERNAME  && chown -R $ USER_UID: $ USER_GID/home/$ USERNAME;   fiRUN apt-get update  && wget -O- https://apt.llvm.org/llvm-snapshot.gpg.key |  apt-key add -  && echo "deb http://apt.llvm.org/buster/llvm-toolchain-buster - $ {LLVM_VERSION} main" >>/etc/apt/sources.list  && apt-get update   && apt-get -y install --no-install-рекомендует  llvm - $ {LLVM_VERSION}  clang - $ {LLVM_VERSION}  lldb - $ {LLVM_VERSION}  libc ++ - $ {LLVM_VERSION} -dev  libc ++ abi  - $ {LLVM_VERSION} -dev  clang-tidy - $ {LLVM_VERSION}  clangd - $ {LLVM_VERSION}  && ln -s/usr/bin/clang-tidy - $ {LLVM_VERSION}/usr/bin/clang-tidy   && ln -s/usr/bin/lldb - $ {LLVM_VERSION}/usr/bin/lldb  && ln -sf/usr/bin/lldb-server - $ {LLVM_VERSION}/usr/lib/llvm-10/bin/ lldb-server - $ {LLVM_VERSION} .0. 1  # Исправляет clangd && ln -sf/usr/lib/llvm - $ {LLVM_VERSION}/include/c ++/v1/usr/include/c ++/v1RUN apt-get autoremove -y  && apt-get clean -y # Переключить  вернуться к диалогу для любого специального использования apt-getENV DEBIAN_FRONTEND = dialogENV CC = "/usr/bin/clang - $ {LLVM_VERSION}"  CXX = "/usr/bin/clang ++ - $ {LLVM_VERSION}"  COV =  "/usr/bin/llvm-cov - $ {LLVM_VERSION}"  LLDB = "/usr/bin/lldb - $ {LLVM_VERSION}" 

Он основан на примере файла Dockerfile, созданного VS Code, вместе с дополнениями из нашего собственного файла Dockerfile, который мы используем для компиляции нашего кода на наших серверах сборки.

devcontainer.json

Следующим шагом была настройка devcontainer.json . Вот тот, который мы используем, с дополнительными комментариями:

jsonc

Копировать

 12345678910111213141516171819202122232425262728293031323334353637383940 
//Подробнее о формате см. https://aka.ms/vscode-remote/ devcontainer.json или README этого файла по адресу://https://github.com/microsoft/vscode-dev-containers/tree/v0.112.0/containers/cpp {"name": "Core development",//Указывает, где  найти Dockerfile для использования.  "dockerFile": "Dockerfile",//Добавляем дополнительные разрешения, необходимые для отладки и т. д. "runArgs": ["--cap-add = SYS_PTRACE", "--security-opt", "seccomp = unlimited"  , "--userns = host"],//Устанавливаем * default * специфичные для контейнера значения `settings.json` при создании контейнера.  "settings": {"terminal.integrated.shell.linux": "/bin/zsh", "cmake.environment": {//Мы настраиваем clang-10 в качестве компилятора по умолчанию.  "CC": "/usr/bin/clang-10", "CXX": "/usr/bin/clang ++ - 10"},//Сообщаем расширениям CMake, где найти CMake.  "cmake.cmakePath": "/usr/local/bin/cmake"},//Добавьте идентификаторы расширений, которые вы хотите установить, при создании контейнера.  «extension»: [«ms-vscode.cmake-tools», «llvm-vs-code-extensions.vscode-clangd», «vadimcn.vscode-lldb», «matepek.vscode-catch2-test-adapter»], //Указывает, где можно найти рабочую область в работающем контейнере.  "workspaceFolder": "/workspace/core",//Монтирует рабочее пространство.  Есть несколько вариантов, как это настроить,//но мы решили проверить наш репозиторий в `$ HOME/Work/PSPDFKit`.  "workspaceMount": "source = $ {localEnv: HOME}/Work/PSPDFKit, target =/workspace, type = bind, consistency = cached"} 

С обоими этими файлами мы смогли попробовать запустить это на локальном Docker!

Запуск локально

Мы открыли палитру команд (F1) и выполнили поиск Удаленный контейнер: открыть папку в контейнере ...

вот тут папку просили. Мы перешли в папку, содержащую наш .devcontainer , и открыли ее.

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

Мы могли видеть в какой среде мы работали, посмотрев в левом нижнем углу VS Code:

После того, как мы запустили все локально в Docker, мы смогли перейти к удаленному запуску!

Remote Docker

Нам нужен был SSH-доступ к хосту, на котором был установлен Docker, и мы должны были убедиться, что наш код был извлечен в месте, указанном в devcontainer.json .

В нашу локальную конфигурацию VS Code мы добавили следующее:

jsonc
 123 
 {"docker.host": "ssh://pat @ your-server"}  

И что удивительно! Мы просто снова выбрали Remote-Container: Open Folder in Container ... , и VS Code подключился к нашему настроенному серверу, построил контейнер Docker и подключился к нему.

У Microsoft есть дополнительная информация об этом.

Резюме

Настроить VS Code для удаленной разработки на C ++ оказалось на удивление просто. Это позволяет нам иметь гораздо больше доступной мощности процессора, в которой определенно нуждаются большие проекты на C ++. Кроме того, VS Code — один из самых отзывчивых редакторов, которые я когда-либо использовал.

Оцените статью
clickpad.ru
Добавить комментарий