Рекомендуется использовать Multiple Compose files
:
Использование нескольких файлов Compose позволяет настроить приложение Compose для различных сред или различных рабочих процессов.
Далее идетпример:
(ПРИМЕЧАНИЕ: далее опустите некоторые элементы файла составления)
docker-compose.yml:
web:
image: example/my_web_app:latest
docker-compose.dev.yml:
web:
ports:
- 80:80
- Выполнить
docker-compose -f docker-compose.yml -d
не будет иметь карты портов. - Выполнить
docker-compose -f docker-compose.yml -f docker-compose.dev.yml -d
заставит docker-compose.dev.yml
переопределить некоторыезначение docker-compose.yml
, которое определяет ваши цели.
Подробнее см. докерская документация , это официальное предложение для обработки вашего сценария, к вашему сведению.
ОБНОВЛЕНО:
Вы используете build: context: ./mariadb
, поэтому compose всегда может найти Dockerfile
в папке mariadb
для сборки, независимо от того, на локальном сервере dev или prod server.
Чуть выше будет сборка образа на сервере dev
и prod
, это один вариант для вас.
Другой вариант, как вы сказали в comments:
Но на Prod-сервере я могу только вытащить и запустить образ, и образ должен быть заранее создан с помощью файла prod yml
Так что вы можетене хотите снова создать образ на prod
сервере?
Затем следующее обновленное решение, просто пример:
docker-compose.yml:
db:
image: your_maridb_image_name:your_maridb_image_version
networks:
- default
docker-compose.dev.yml:
db:
build:
context: ./mariadb
ports:
- "xxx:xxx"
docker-compose.prod.yml:
db:
otheroptions_special_for_prod_just_a_example: xxx
1) docker-compose -f docker-compose.yml -f docker-compose.dev.yml -d
Это будет объединено следующим образом:
db:
image: your_maridb_image_name:your_maridb_image_version
networks:
- default
build:
context: ./mariadb
ports:
- "xxx:xxx"
В соответствии с синтаксисом docker-compose
, если build:context
был предоставлен, compose не будет извлекать образ Docker из реестра Docker, просто найдите Dockerfile
в context
и, наконец, создайте образ с именем, указанным в image
, здесь это your_maridb_image_name:your_maridb_image_version
.
Затем вам нужно нажать на него dockerhub
, но вам нужно остановить локальный контейнер.
2) docker-compose -f docker-compose.yml -f docker-compose.prod.yml -d
Это будет комбинироваться следующим образом:
db:
image: your_maridb_image_name:your_maridb_image_version
networks:
- default
otheroptions_special_for_prod_just_a_example: xxx
Синтаксис docker-compose
, build:context
не был предоставлен, поэтому compose будет напрямую извлекать образ из удаленного реестра (концентратор докеров), помнитеВы отправили образ в dockerhub после того, как закончили разработку на локальном сервере dev?Поэтому нет необходимости строить изображение заново.