O Docker Compose sempre foi uma ótima ferramenta nesse cenário em que você tem pequenos microsserviços em vez de um grande aplicativo monolítico despejado em uma única imagem do Docker. Se você não quer ter um grande número de Dockerfile, você sempre pode criar sua própria Docker Image com a embalagem necessária para simplificar.
Exemplo: Em vez de usar o Ubuntu Docker Image oficial, você pode criar sua própria imagem do Docker do Ubuntu com o pacote necessário. Isto irá reduzir a sua confusão em torno de ter um grande número de Dockerfile. Mas esteja ciente de que isso irá sobrecarregar a construção de novas imagens do Docker sempre que você quiser fazer alterações e algo que não seja recomendado para o ambiente de desenvolvimento.
Aqui está o snippet do arquivo docker-compose.yml do este link , que é muito simples para entender, não possui Dockerfile individual e pode ser facilmente customizado com base em sua necessidade:
version: '3'
services:
web:
image: nginx
volumes:
- "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
- "./etc/ssl:/etc/ssl"
- "./web:/var/www/html"
- "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
ports:
- "8000:80"
- "3000:443"
environment:
- NGINX_HOST=${NGINX_HOST}
command: /bin/bash -c "envsubst '$$NGINX_HOST' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
restart: always
depends_on:
- php
- mysqldb
php:
image: nanoninja/php-fpm
restart: always
volumes:
- "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
- "./web:/var/www/html"
composer:
image: "composer"
volumes:
- "./web/app:/app"
command: install
myadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
ports:
- "8080:80"
environment:
- PMA_ARBITRARY=1
- PMA_HOST=${MYSQL_HOST}
restart: always
depends_on:
- mysqldb
mysqldb:
image: mysql
container_name: ${MYSQL_HOST}
restart: always
env_file:
- ".env"
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
ports:
- "8989:3306"
volumes:
- "./data/db/mysql:/var/lib/mysql"