LINUX.ORG.RU

Выбор структуры для docker проекта

 


0

2

День добрый! Разрабатываю систему с несколькими микросервисами и использую докер, который подкупил легким развертыванием. Но теперь не понимаю, как реализовать такую структуру:

docker-compose.yml
service1/
  - Dockerfile
service2/
  - Dockerfile
shared_src/
  - library
Хранить весь код в shared_src, в докерфайлах просто запускать разные скрипты через RUN или переносить весь код, относящийся к сервису в его папку?

Плюс, как добавить общий код к каждому контейнеру, ведь:

The <src> path must be inside the context of the build; you cannot COPY ../something /something, because the first step of a docker build is to send the context directory (and subdirectories) to the docker daemon.


Обычно с исходников запускается 1 сервис, например, какой-нибудь Django, т.е. этих service1 и service2 нет, а Dockerfile лежит в корне. В некоторых случаях с одних исходников могут запускаться 2 изолираванных сервиса (например, Django и Celery), но и тут достаточно одного Dockerfile, а различающиеся комманды запуска указывается в docker-compose.yml

Покажу на примере (там же ответ как добавить одни исходники в разные контейнеры)

version: '2'
services:

  ###########
  # DATABASE
  ###########
  db:
    image: postgres
    container_name: postgres
    environment:
      - POSTGRES_PASSWORD=testpasswd
    volumes:
      - /srv/postgresql/data:/var/lib/postgresql/data
    ports:
      - 5432:5432


  #########
  # CELERY
  #########
  celery:
    image: mydjango_app
    container_name: celery
    command: celery -A mydjango --loglevel=INFO -c 1 worker -B -s /tmp/celerybeat-schedule
    working_dir: /app
    user: nobody
    volumes_from:
      - app:rw
    environment:
      - DJANGO_SETTINGS_MODULE=mydjango.settings
      - DATABASE_HOST=db
      - DATABASE_NAME=testdb
      - DATABASE_USER=testuser
      - DATABASE_PASSWORD=testpwd
    links:
      - db

  ######
  # APP
  ######
  app:
    build: .
    container_name: mydjango
    volumes:
      - .:/app:rw
    environment:
      - DJANGO_SETTINGS_MODULE=mydjango.settings
      - DATABASE_HOST=db
      - DATABASE_NAME=testdb
      - DATABASE_USER=testuser
      - DATABASE_PASSWORD=testpwd
    links:
      - db
    ports:
      - 8000:8000
    command: python /app/manage.py runserver 0.0.0.0:8000
BigAlex ★★★
()

Из ОП не ясно, на каком языке идет разработка. Обычно Dockerfile добавляют в проект с кодом сервиса, если это делается тривиально, и в корень проекта. Если у тебя какая-то замысловатая хрень, лучше либо разбить хрень на отдельные сервисы, либо не усложнять свой проект еще и Dockerfile-ами, вынести их отдельно (код отдельно, деплой—отдельно).

staseg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.