Докеры и менеджеры пакетов в производстве

Я занимаюсь разработкой PHP-приложения, которое я хочу запускать с использованием Docker-контейнеров. Я использую композитор менеджер пакетов, который вытягивает все зависимости. Весь код хранится в репозитории git, кроме зависимостей.

Чтобы все работало на моей локальной машине, я использую docker-compose (рис.). Я монтирую код своего приложения (включая папку vendor) на том в моих контейнерах. Вот мой файл docker-compose.yml.

nginx:
image: nginx:1.9
links:
- php
volumes:
- conf/nginx/default.conf:/etc/nginx/conf.d/default.conf
- src:/var/www/html
ports:
- "80:80"php:
image: php:5.6.9-fpm
links:
- memcached
volumes:
- conf/php/php.ini /usr/local/etc/php/php.ini
- src:/var/www/html
volumes_from:
- nginx

На самом деле я не понимаю, как бы я продвинул это в производственную или промежуточную среду. Из того, что я понимаю, лучше всего отправлять все в контейнере без запуска менеджера пакетов, потому что это может привести к сбою или пакеты могут не совпадать с пакетами на моей локальной машине. Поэтому я создал следующий файл docker-compose.yml:

webapp:
image : quay.io/myusername/myrepo
php:
image: php:5.6.9-fpm
volumes:
- config/php/php.ini /usr/local/etc/php/php.ini
volumes_from:
- webapp
nginx:
image: nginx:1.9
links:
- php
volumes:
- config/nginx/default.conf:/etc/nginx/conf.d/default.conf
volumes_from:
- webapp
ports:
- "80:80"

Контейнер webapp создается из следующего dockerfile и размещается в некотором репозитории.

FROM busybox

VOLUME /var/www/html
ADD src /var/www/html

У меня есть git hook, который запустит сборку этого dockerfile на quay.io и добавит мой исходный код к изображению.

Вот проблема: файлы / зависимости производителя не контролируются версиями, поэтому они не будут добавлены.

Я вижу два решения, которые я не нахожу идеальными.

  1. Добавьте зависимости к управлению версиями.
  2. Команда запуска composer install втянуть все файлы. Не предпочтительно, как указано выше.

Я все еще очень плохо знаком с докером, так что, может быть, я все неправильно понял. Хотелось бы получить ответ, как это сделать правильно.

1

Решение

Ваш Dockerfile должен создать образ контейнера, как если бы не было подключенных томов. Клонируйте или скопируйте свой код в контейнер, запустите composer для установки зависимостей. Запуск контейнера без каких-либо объемов должен работать.

Тома в производственных средах предназначены главным образом для хранения данных и журналов. Ваш код не должен быть в подключенном томе.

В целях разработки вы можете смонтировать том в расположение кода, и ваш контейнер все равно будет работать.

Чтобы ускорить процесс сборки, скопируйте composer.json а также composer.lock сначала файлы и установите зависимости в место за пределами вашего исходного дерева. Это обеспечит обновление зависимостей только при изменении файла json, а не при каждом изменении кода, что значительно ускоряет процесс.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector