Подскажите пожалуйста, у меня имеется один docker-compose файл. В нём есть 2 тестовых сервиса и 2 рабочих. И есть скрипт. Мне надо сделать поочередный вызов: т.е. вначале когда я сделаю docker-compose up должны подняться 2 тестовых сервиса (post-service-test и rabb-service-test), затем должен выполниться скрипт (он делает билд приложения на основе этих запущенных тестовых сервисов), затем мне надо остановить и удалить эти тестовые сервисы и только потом я должен поднять 2 рабочих сервиса (post-service и rabb-service). Подскажите пожалуйста, как мне это сделать, имея вот такой docker-compose файл:
version: '3'
services:
postgres:
container_name: post-service
image: postgres:9-alpine
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ${PWD}/db_migration/cdp_dump.sql:/home/postgres/cdp_dump.sql
ports:
- "5432:5432"
networks:
- work_network
labels:
container_group: work_env
rabbitmq:
container_name: rabb-service
image: rabbitmq:3-management-alpine
environment:
- RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}
- RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}
- RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST}
ports:
- "15672:15672"
- "5672:5672"
depends_on:
- postgres
networks:
- work_network
labels:
container_group: work_env
postgres_test:
container_name: post-service-test
image: postgres:9-alpine
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
networks:
- test_network
labels:
container_group: test_env
rabbitmq_test:
container_name: rabb-service-test
image: rabbitmq:3-management-alpine
environment:
- RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}
- RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}
depends_on:
- postgres_test
networks:
- test_network
labels:
container_group: test_env
networks:
work_network:
test_network:
application:
container_name: build
image: openjdk:8-jdk
environment:
- POSTGRES_HOST=${POSTGRES_HOST}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- RABBITMQ_HOST=${RABBITMQ_HOST}
- RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}
- RABBITMQ_DEFAULT_PASSWORD=${RABBITMQ_DEFAULT_PASS}
volumes:
- ${project_home}:/root
command:
/bin/bash < build_script
Может я неправильно записал скрипт в файле ? сам скрипт выглядит вот так и он рабочий, если запускать его отдельно. Но мне надо добавить его сюда чтобы всё делал docker-compose. Сам скрипт:
docker run --name build -i --net test-network \
-v ${project_home}:/root \
-e POSTGRES_HOST=${POSTGRES_HOST} \
-e POSTGRES_DB=${POSTGRES_DB} \
-e POSTGRES_USER=${POSTGRES_USER} \
-e POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \
-e RABBITMQ_HOST=${RABBITMQ_HOST} \
-e RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER} \
-e RABBITMQ_DEFAULT_PASSWORD=${RABBITMQ_DEFAULT_PASS} \
openjdk:8-jdk /bin/bash < build_script
И ещё вопрос: могу ли я такие команды, как docker stop post-service-test, docker rm post-service-test, docker stop rabb-service-test, docker rm rabb-service-test (остановка и удаление тестовых сервисов) не выполнять отдельно, а также поместить в docker-compose или это невозможно ?
Заранее спасибо !
По поводу 1-го вопроса:
В самом docker-compose
Вы не сможете сделать так как вы задумали. Т.е. сначала создать образы тест, выполнить их, после удалить а потом запускать прод сервисы. Для таких вещей Вам стоит посмотреть в сторону CI/CD
технологий. Такие как Jenkins, Dron.io, Gitlab CI/CD и т.д.
В docker-compose
можно управлять последовательность запусков сервисов сторонними скриптами такие как wait-for-it.sh
По 2-му вопросу:
Да docker-compose
умеет такие вещи. Вы можете почитать об этом в самом мануале.
Надеюсь смог как нибудь ответить на Ваши вопросы.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Делаю Navigation drawer внутри него RecyclerView необходимо по клику по item-y RcyclerView открывать новый фрагмент
Есть часть кода в UserController, которая обрабатывает данные из формы:
Веб-сервис был разработан в среде IntelliJ IDEA на win7Использовался сервер GlassFish 4