Обычно не рекомендуется запускать composer install
внутри своего изображения. Я предполагаю, что в конечном итоге вам нужно запустить ваше php-приложение, а не самого композитора, чтобы вы могли избежать его запуска в производство.
Одним из возможных решений является разделение создания образа приложения на 2 шага:
- Установить все вне изображения
- Копирование готовых файлов в изображение
.gillab-ci.yml
stages:
- compose
- build
compose:
stage: compose
image: composer # or you can use your hub.myserver.test/image:latest
script:
- composer install # install packages
artifacts:
paths:
- vendor/ # save them for next job
build:
stage: build
script:
- docker build -t hub.myserver.test/new_image .
- docker push hub.myserver.test/new_image
Таким образом, в Dockerfile вы просто копируете файлы из директории артефактов с первой стадии в рабочую директорию изображений:
# you can build from your own image
FROM php
COPY . /var/www
WORKDIR /var/www
# optional, if you want to replace CMD of base image
CMD [ "php", "./index.php" ]
Еще одним хорошим соображением является то, что вы можете протестировать свой код перед созданием изображения с ним. Просто добавьте test
задание между compose
и build
.
Живой пример @ gitlab.com