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

Да, можем!

Compose — это инструмент для определения и запуска многоконтейнерных приложений Docker. С Compose вы используете файл Compose для настройки служб вашего приложения. Затем с помощью одной команды вы создаете и запускаете все службы из своей конфигурации.

С помощью docker compose мы можем сохранить конфигурацию в файле, а это означает, что все изменения в зависимостях служб, таких как версии базы данных и другие службы, могут быть включены в VCS (систему контроля версий). С помощью VCS мы можем легче отлаживать ошибки в программном обеспечении.
Другой пример — когда один из разработчиков обновляет определенные службы, такие как базы данных. Программное обеспечение может не работать для предыдущей версии базы данных, поэтому может возникнуть ситуация «Почему функция x не работает?», «Но она работает у меня дома».

Давайте перейдем к коду

Примером приложения, которое мы создадим, является сеть с использованием PHP. Сначала создайте каталог для нашего проекта, затем создайте файл composer.json, содержащий зависимость библиотеки php.

  1. Создайте файл index.php, чтобы указать наше программное обеспечение, скрипт будет отображать только сообщение «Hello world».

2. Затем мы создаем файл Dockerfile для создания образа Docker для нашего программного обеспечения.

3. Docker Compose
Запустите Docker Compose

docker-compose up -d

Установите зависимости, выполнив команду composer install в контейнере докеров.

$ docker-compose run --rm web composer install

Подождите, ранее мы запускали установку композитора в контейнере докеров, но в локальном каталоге есть новый каталог `vendor`? Это связано с тем, что локальный каталог монтируется в докер, поэтому все изменения файлов в контейнере также происходят в локальном каталоге, и наоборот.

Чтобы увидеть выданный вывод, выполните команду

docker-compose logs -f

Добавить службу
Далее мы добавим службу Redis для постоянных данных. Добавьте следующий код в блок services в файле docker-compose.yml.

redis:
 image: redis:alpine

Добавить переменную среды для веб-службы в блок «среда»

Перезапустите docker-compose

$ docker-compose up -d

Установите библиотеку Redis внутри контейнера докеров.

$ docker-compose run --rm web composer require predis/predis

Отредактируйте index.php, добавьте следующую строку

Predis\Autoloader::register();$app->get('/count', function($request, $response) use ($redis) { return $response;
$redis = new Predis\Client([
 $redis->incr('counter');
}); 
 $counter = $redis->get('counter');
 $response->getBody()->write($counter); 
 'host' => getenv('REDIS_HOST')
]); $app-run();

Посмотреть Результаты

docker-compose ps

Вот и все….