Docker и gitlab-ci: стратегия?

Есть несколько приложений-микросервисов.
Примерный 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 - не собирать никакие образы на продакшоне, а запускать готовые.

Вопросы:
  1. Контейнеры servComposer, servNginx, servMariadb, servMemcached по сути не являются частью основного сервиса - при создании нового тега обновляется только код приложения, а не вышеописанные контейнеры. Т.е. нет смысла пушить их каждый раз при новом билде CI? Вынести создание таких контейнеров в отдельный репозиторий? Тогда как тестировать приложение без, например, контейнера БД?

  2. Если я понял, в docker registry надо пушить один образ - готовый билд приложения. Но если сервис многоконтейнерный, с настройками в docoker-compose.yml - как правильно должен выглядеть билд такого приложения?

  • Вопрос задан
  • 1940 просмотров
Пригласить эксперта
Ответы на вопрос 1
blasterdick
@blasterdick
Доброго времени суток, товарищ.
Подскажите, удалось Вам ответить на поставленные перед собой вопросы?
Как в итоге получилось (если получилось) реализовать желаемое?

Имею похожую ситуацию, контейнеры в kubernetes на Google Container Engine, там же и docker registry.

Заранее спасибо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы