#docker #backend #вебинар
Привет! Это запись моего вебинара, в рамках курса по бэкенд-разработке в ИТМО. В этом видео разбираем docker, docker-compose, говорим про swarm mode.
▶️ Смотреть на Дзен | Смотреть на YouTube
Плейлист на Дзен | Плейлист на YouTube
📖 Полезные ссылки:
Статья на хабре про docker swarm: https://habr.com/ru/post/659813/
Раздел документации про swarm mode: https://docs.docker.com/engine/swarm/
Статья про docker-compose: https://habr.com/ru/company/ruvds/blog/450312/
Раздел документации про docker-compose: https://docs.docker.com/compose/
Репозиторий Swirl: https://github.com/cuigh/swirl
Пример настройки приложения с docker swarm: https://www.youtube.com/watch?v=NZRfJORJACQ
Презентация: https://docs.google.com/presentation/d/1QhqPb2nmiwmzZ_e6pcAHAGHRHlep1i04OEmE8PsKRxA/edit?usp=sharing
Репозиторий этого курса: https://github.com/kantegory/ITMO-ICT-Backend-2023
Ютуб: https://youtube.com/@dobryakov
Блог: https://blog.kantegory.me
Дзен: https://dzen.ru/dobryakov
Бусти: https://boosty.to/dobryakov
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2❤1👌1
#docker #python
Именно такую фразу мне сказал старший товарищ при одной из бесед, но тогда я его не понял. Был ли он прав? Разбираемся с примерами.
Спустя несколько лет работы с docker, я пришёл к выводу, что не имеет смысла выбирать между pipenv, poetry или conda, поскольку их использование внутри docker является затруднительным и требует плодить костыли, вместо того чтобы просто установить зависимости через pip.
Основная проблема заключается в том, что внутри контейнера вам никакое виртуальное окружение не нужно, а значит - мы затягиваем лишнюю зависимость, которая увеличит время сборки, зато локальная разработка без докера становится удобнее и приятнее. Только я, хоть убей, не пойму - какой смысл разрабатывать локально приложения на python без докера. Пожалуй, есть только один небольшой минус - нужно вписать новую зависимость в requirements.txt вручную. Но и этого можно избежать, если вы просто зайдёте в терминал контейнера, установите зависимость там и сделаете pip freeze в нужный файлик (разумеется, при условии, что зависимости попадают в volume с приложением).
Полная версия у меня в блоге.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2❤🔥1
#docker #backend
В прошлом году столкнулся с задачей по настройке VPN-подключения внутри docker для обеспечения доступа к API, находящемуся во внутренней сети предприятия. Недавно с подобной проблемой столкнулся и мой друг, но ситуации у нас несколько разные: я настраивал связку для
openfortivpn
, а ему нужно было настроить для openvpn
.Основная проблема, которая возникает при настройке VPN-соединения для нескольких контейнеров заключается в необходимости настройки сетевых параметров и особенностях работы docker. Без контейнеризации всё было бы намного проще: вы запускаете VPN-подключение и все ваши запросы к соответствующим хостам внутри VPN-сети проходят через это подключение.
Как работает сеть в docker и docker-compose
По умолчанию, все наши сервисы объединяются в рамках сети
default
. При необходимости мы можем выделять отдельные сети для разных сервисов, чтобы изолировать их друг от друга. Кроме прочего, мы можем использовать внешнюю docker-сеть, чтобы объединить сервисы из разных приложений (отделённых своими compose-файлами) между собой.Нетрудно догадаться, что для обеспечения VPN-подключения внутри docker-сети, нам потребуется уметь чуть больше, чем просто создание docker-сети. Тут на помощь приходят сетевые драйверы и
network_mode
.Сетевые драйверы
В официальной документации описано целых 7 различных сетевых драйверов. Начнём с того, что сам по себе сетевой драйвер нужен для расширения возможностей сети. Рассмотрим какие сетевые драйверы существуют (адаптированная информация из документации):
- bridge — драйвер по умолчанию, необходим для того, чтобы сервисы могли общаться друг с другом внутри docker-сети;
- host — драйвер, который позволяет использовать сеть хоста напрямую, убирая изоляцию контейнера от хоста;
- overlay — драйвер, позволяющий соединить несколько хостов, где находятся docker-контейнеры вместе, чтобы обеспечить взаимодействие между ними (такой вариант отлично подходит для обеспечения коммуникации между нодами в swarm mode);
- ipvlan — драйвер, предоставляющий полный контроль над адресацией IPv4 и IPv6;
- macvlan — драйвер, позволяющий назначить MAC-адрес для контейнера, делая его доступным в виде физического устройства внутри вашей сети;
- none — драйвер, позволяющий изолировать сеть контейнера от хостовой сети и сети других контейнеров;
- network plugins — возможность использования в качестве сетевого драйвера любого внешнего решения.
network_mode
network_mode
это атрибут сервиса внутри конфигурации docker-compose, необходимый для более тонкой настройки. Существует несколько значений у атрибута newtork_mode
:-
bridge
— дефолтный способ для связи между контейнерами, работает по умолчанию;-
host
— использование единого сетевого пространства между выбранным сервисом и хостом;-
none
— отсутствие сетевого взаимодействия для выбранного сервиса;-
service:[service_name]
— использование сетевого пространства выбранного сервиса;-
container:[container_name/id]
— использование сетевого пространства выбранного контейнера (отличается от прошлого необходимость указания именно container_name/container_id, а не service_name).К сожалению, в официальной документации compose, подробно ничего не сказано об этом атрибуте, кроме ссылки на то, что значения могут быть те же самые, что и у парамерта
--network
, но также добавляется специальная форма service:[service name]
. Возможно, это сделано так именно потому, что все значения по смыслу похожи.Пример compose-файла
Разницы для конфигурации между
openfortivpn
и openvpn
особо нет, поэтому рассмотрим на примере openfortivpn
:version: '3'
services:
vpn:
container_name: openfortivpn
restart: unless-stopped
build: .
privileged: true
volumes:
- ./config:/etc/openfortivpn/config.conf
command: ["openfortivpn", "--config=/etc/openfortivpn/config.conf"]
some-service:
image: your-container-image
network_mode: service:vpn
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳6👍2
Установка YAML-файла docker-compose по умолчанию
#советы #docker
Можно вот такой
Тогда команда
Может быть полезно, когда разные композы используются для локальной разработки, дева, разных стендов.
#советы #docker
Можно вот такой
.env
создать в корне проекта (или в том месте, где лежат композы, или в том месте, где вы обычно выполняете команду docker compose
):COMPOSE_FILE=docker-compose.dev.yml
Тогда команда
docker compose
будет по умолчанию брать тот файл, который таким образом указан и можно не писать docker compose -f docker-compose.dev.yml up
, а ограничиться обычным docker compose up
. Может быть полезно, когда разные композы используются для локальной разработки, дева, разных стендов.
👍12❤🔥4