YardalGedal
@YardalGedal
yeah boy

Как эффективно использовать Docker + Docker-compose при разработке?

С докером никогда плотно не работал и сейчас в этом появилась необходимость, так как в будущем приложение нужно будет развернуть на удаленном сервере.
Накидал небольшой docker-compose основываясь на знаних с прочитанной информации
docker-compose.yaml
version: '3'

services:
  parser:
    build: ./parser
    restart: always
    container_name: JaScrapy01
    depends_on:
      - postgres
      - redis
    volumes:
      - ./parser:/JaScrapy
    networks:
      - net
    env_file:
      - .env
  postgres:
    image: postgres:11.3-alpine
    restart: always
    container_name: postgres01
    networks:
      - net
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
    env_file:
      - .env
  redis:
    image: redis:5.0.5-alpine
    restart: always
    container_name: redis01
    networks:
      - net
    volumes:
      - ./redis/data:/data
    env_file:
      - .env

networks:
  net:


Но ведь это оказывается очень неудобно! Да, поднимаются сами контейнеры с postgresql и redis, это удобно, но к ним нельзя подключиться извне (из-за использования networks, а как открыть нетворк - догадаться нужно самому), допустим для просмотра информации через GUI. При внесении каких-то изменений в основное приложение -- можно лишь надеяться что они когда-то появятся в контейнере. Можно пять раз удалить контейнер с приложением, потом десять раз удалить образ -- никакие изменения никуда не попадут. Использовать при этом виртуальное окружение на локальной машине, запуская приложение через него - нельзя, потому что нетворк баз данных где-то там локальный. Pycharm может использовать интерпретатор, работающий внутри контейнера - но это сконнектилось когда давно один единственный раз и после этого выдаются только java-ошибки PyCharm'а.

Собственно, вопрос, как эффективно и удобно работать с этим?
  • Вопрос задан
  • 1176 просмотров
Решения вопроса 3
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
но к ним нельзя подключиться извне (из-за использования networks, а как открыть нетворк -
догадаться нужно самому)

А через директивы ports - разве не прокидываются нужные порты из контейнеров наружу?

При внесении каких-то изменений в основное приложение
можно лишь надеяться что они когда-то появятся в контейнере

Если вы вносите изменения в проект который примаплен через volume - то контейнер их тут же видит.
Умеет ли ваше приложение видеть что локальные файлы изменились, и применять их - это уже другой вопрос.
Но даже если не умеет - нет никаких проблем перестартануть нужный контейнер после внесения каких-либо изменений.

Можно пять раз удалить контейнер с приложением, потом десять раз удалить образ
никакие изменения никуда не попадут.

Не знаю как у вас построено - но приведу насчет примеров с проектами на python.
В Python создается папка с виртуальным окружением, куда устанавливаются все необходимые библиотеки для работы. Эта папка мапится вместе с проектом в контейнер. При этом используется контейнер python из стандартного образа на все проекты, а виртуальное окружение - из примапленной директории. Нет необходимости ничего дополнительно устанавливать в контейнеры. Поэтому что вы там пытаетесь делать с образами - непонятно...

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

Ну тут определиться - используете докер для этого, или виртуальное окружение на своей машине.
Если хотите одновременно использовать и то и другое - прокидывайте порты.
Ответ написан
@Sha644
Вы попали в типичную проблему.
Забудьте про docker-compose на ближайший месяц, полтора. Имхо, про его вообще нельзя рассказывать и показывать тем, кто только начинает разбираться с докером. Это наносит вред.
Используйте docker cli. Вы довольно быстро проникнитесь и всё поймёте. Да, вам придётся запускать по 1 контейнеру за раз или писать небольшие скрипты. Но в разработке вам эта гибкость, что даёт docker cli и тот опыт, что вы приобретёте будет отличным подспорьем.
Ответ написан
@de1m
Как-то вы не очень разобрались.
Выкиньте "networks:". В вашем случае он не нужен.
Добавте "ports", там где вы хотите пользоваться пользоваться сервисом. К примеру в postgresql контейнере.
Вот этот файл ".env" выкиньте его тоже, если у вас не много переменных впишите их так.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 2 500 до 4 000 $
RYDLAB Екатеринбург
от 100 000 ₽
RYDLAB Екатеринбург
от 100 000 ₽
29 нояб. 2020, в 19:24
95000 руб./за проект
29 нояб. 2020, в 18:43
10000 руб./за проект
29 нояб. 2020, в 16:24
30000 руб./за проект