Разработка Python приложения в Docker контейнере с помощью VSCode

Предисловие

Я уже довольно давно пользуюсь VSCode и мне очень полюбилась данная IDE за свою скорость и простоту. Однако из коробки данная среда дает лишь базовые возможности и в этой статье я холчу рассказать вам как можно вести полноценную разработку Python приложения в контейнере со всеми взрослыми наворотами.

Судть предлагаемого мной метода заключается в создании виртуального контейнера с полным набором необходимых нам для разработки пакетов Python к которому мы будем подключаться с помощью VSCode. Одной из фитч предлагаемого мной подхода является возможность подключения к контейнеру для разработки на удаленном сервере по ssh.

В конце вступления я хотел бы перечислить преимущества которые дает данный подход:

  • Удобство и скорость развертывания
  • Работает на любой платформе. Абсолютно не важно на какой системе вы планируете вести разработку linux, macos или windows.
  • Одиннаково работает как на локальной машине так и на удаленном сервере.
  • Нет разницы между dev и prod средой.

Настройка окружения

Шаги которые нам необходимо выполнить будут немного отличаться в зависимости от того где мы хотим вести разработку, на локальной машине или удаленном хосте. В этом разделе мы проведем с вами всю работу по настройке нашей IDE. Для развертывания полноценной среды разработки вам понадобиться установить всего три программы, итак поехали!

Подготовка

Для начала работы нам понадобиться установить VSCode, Git и Docker. Думаю с этим не должно возникнуть проблем, однако, если они все таки возникли вы можете задать вопрос в нашем чате в Telegram.

Устанавливаем расширения

Для выполнения поставленной задачи нам понадобится установить 3 расширения для VSCode. Разработчиком данных расширений является Microsoft что вселяет хоть какую-то уверенность в их надежности.

Remote Development

Это расширение на самом деле явлеяется набором содержашим в себе функционал для подключения VSCode к контейнерам Docker, а текже подключению по ssh к удаленному серверу: https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

Python

Нам понадобиться расширение для работы с Python оно будет обеспечивать корректную подсветку кода и подсказки по коду и синтаксису. https://marketplace.visualstudio.com/items?itemName=ms-python.python

Docker

Последнее расширение нужно для работы с Docker. С его помощью можно будет управлять контейнерами прямо из VSCode. Это может быть удобно тем кто не любит или еще не выучил консольные команды. https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker

Создание и запуск Docker контейнера

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

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

К делу. Создадим файл /docker/Dockerfile в котором будет прописана конфигурация нашего образа.

FROM python:3.8.8-buster

ENV PYTHONUNBUFFERED=1 DEBIAN_FRONTEND=noninteractive 

RUN apt-get update && pip install django \
    && apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release \
    && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
    && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
        $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
    && apt-get update \
    && apt-get install -y docker-ce-cli

WORKDIR /code

Кому лень копировать можете просто скачать файл с гитхаба: https://github.com/crankru/docker-django-vscode/blob/main/docker/Dockerfile

Создаем Docker-compose и запускаем контейнер В корне проекта создадим файл docker-compose.yml

version: '3'

services:
 app:
   build: ./docker
   entrypoint: python manage.py
   command: runserver 0.0.0.0:8000
   volumes:
     - ./:/code
     - /var/run/docker.sock:/var/run/docker.sock
   ports:
     - 8000:8000

Скачать с гитхаба https://github.com/crankru/docker-django-vscode/blob/main/docker-compose.yml

Запускаем билд командой docker-compose build app

После успешного завершения билда мы можем запустить наш образ, командой docker-compose run app bash. Наш контейнер для разработки запущен.

Подключаемся

Итак самая сложная работа сделана, теперь давайте посмотрим что нам это дало. Во кладке Docker находим наш запущенный контейнер, кликаем по нему правой кнопкой и выбираем Attach Visual Studio Code.

Теперь наш VSCode подключен к контейнеру и мы можем выполнить настройки нашей среды внутри контейнера.

Устанавливаем расширение внутри контейнера

После подключение VSCode к контейнеру нам нужно установить необходимые плагины для полноценной разработки. Переходим во вкладку Extensions и находим установленные глобально расширения Docker и Python после чего кликаем на установку чтобы развернуть их внутри контейнера.

После установки Python расширения может потребоваться выбрать версию установленную в контейнере, в примере используется Python 3.8.8

Запуск сервера разработки

После того как мы подключились внутрь контейнера нам осталось запустить сервер для разработки Django командой python manage.py runserver 0.0.0.0:8000. После запуска мы можем открыть в браузере страницу http://localhost:8000 и убедится что Django работает.

Пример автодополнения

Теперь сделаем простую вьюху которая будет доступна по адресу test_view/, для этого...

ss

Пример отображения ошибок

Делаем ошибки и показываем как они подсвечиваются...

ss

Результат

В итоге у нас есть git репозиторий который можно развернуть из консоли одной командой https://github.com/crankru/docker-django-vscode

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

Давайте еще раз посмотрим что же мы получили: ...

Работающий пример из статьи вы можете посмотреть и скачать с Github: https://github.com/crankru/docker-django-vscode


Комментарии:

  • pavel.galagan.mail@gmail.com
    Отлично, ждём продолжения!
    12 Янв 2021, 14:47 ответить

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