Есть несколько приложений-микросервисов.
Примерный docker-compose.yml каждого микросервиса:
version: "2"
services:
memcached:
image: memcached:latest
container_name: servMemcached
restart: always
ports:
- "11211:11211"
mariadb:
image: mariadb:latest
container_name: servMariadb
restart: always
ports:
- "3306:3306"
volumes:
- ./mariadb/data:/var/lib/mysql
env_file: ./mariadb/env
php-fpm:
build: ./php
container_name: servPhp
restart: always
volumes:
- ./www:/var/www/html
links:
- mariadb
- memcached
depends_on:
- mariadb
- memcached
nginx:
image: nginx:latest
container_name: servNginx
restart: always
ports:
- "8080:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
volumes_from:
- php-fpm
links:
- php-fpm
depends_on:
- php-fpm
composer:
build: ./composer
container_name: servComposer
command: install
volumes:
- ./www:/app
- ~/.ssh:/root/.ssh
depends_on:
- php-fpm
Что я хочу:
Когда происходит пуш нового тега в ветку, например, release - запускается gitlab-ci. Он должен собирать сервис в образ, применять необходимые миграции (yii2 приложение), тестировать приложение, и т.п. и пушить в local docker registry. Цель registry - не собирать никакие образы на продакшоне, а запускать готовые.
Вопросы:
- Контейнеры servComposer, servNginx, servMariadb, servMemcached по сути не являются частью основного сервиса - при создании нового тега обновляется только код приложения, а не вышеописанные контейнеры. Т.е. нет смысла пушить их каждый раз при новом билде CI? Вынести создание таких контейнеров в отдельный репозиторий? Тогда как тестировать приложение без, например, контейнера БД?
- Если я понял, в docker registry надо пушить один образ - готовый билд приложения. Но если сервис многоконтейнерный, с настройками в docoker-compose.yml - как правильно должен выглядеть билд такого приложения?