Как правильно настроить простую конфигурацию docker-compose для тестирования? - PullRequest
0 голосов
/ 06 мая 2018

Мой текущий docker-compose.yml файл:

version: '2'
services:
  app:
    restart: always
    build: ./web
    ports:
      - "8000:8000"
    volumes:
      - ./web:/app/web
    command: /usr/local/bin/gunicorn -w 3 -b :8000 project:create_app()
    environment:
      FLASK_APP: project/__init__.py
    depends_on:
      - db
    working_dir: /app/web

  db:
    image: postgres:9.6-alpine
    restart: always
    volumes:
      - dbvolume:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: app

volumes:
  dbvolume:

Я сейчас пытаюсь создать файл docker-compose-test.yml, который переопределяет предыдущий файл для тестирования. Мне пришло в голову использовать это:

version: '2'
services:
  app:
    command: pytest

  db:
    volumes:
      - dbtestvolume:/var/lib/postgresql/data

volumes:
  dbtestvolume:

А затем запустите тесты с помощью команды:

docker-compose -f docker-compose.yml -f docker-compose-test.yml run --rm app

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

Команда успешно переопределена, хотя, к сожалению, объем данных остается прежним, и поэтому данные моего приложения перезаписываются, если я запускаю свои тесты.

Это правильный способ настройки конфигурации докера для тестов? Любое предложение о том, что идет не так?

Если это неправильный способ, как правильно настроить конфигурацию docker-compose для тестирования?

Альтернативный тест

Я попытался изменить свой docker-compose-test.yml файл, чтобы использовать другой сервис (db-test) для тестирования:

version: '2'
services:
  app:
    command: pytest
    depends_on:
      - db-test

  db-test:
    image: postgres:9.6-alpine
    restart: always
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: app

Что происходит сейчас, так это то, что у меня есть данные, которые не перезаписываются (таким образом, это работает, ура!) При запуске моих тестов, но если я пытаюсь выполнить команду:

docker-compose down

Я получаю этот вывод:

Stopping app_app_1 ... done
Stopping app_db_1  ... done
Found orphan containers (app_db-test_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.

, а затем docker-compose down не удается. Так что-то не настроено правильно.

Есть идеи?

1 Ответ

0 голосов
/ 07 мая 2018

Если вы не хотите сохранять данные БД, не используйте тома, поэтому у вас будет новая база данных при каждом запуске контейнера.

Полагаю, вам нужны предварительно заполненные данные в ваших таблицах, поэтому просто создайте новый образ БД, копирующий нужные вам данные. Файл Docker может быть что-то вроде:

FROM postgres:9.6-alpine

COPY db-data/ /var/lib/postgresql/data

Если вам нужно обновить данные, смонтируйте db-data/, используя -v, измените его и перестройте образ.

Кстати, было бы лучше использовать автоматизированный конвейер для тестирования ваших сборок, используя Jenkins, GitLab CI, Travis или любое другое решение, которое вам подходит. В любом случае, вы можете использовать docker-compose в своем конвейере, чтобы поддерживать его в соответствии с локальной средой разработки.

...