sp-containers/docs/starting-with-docker-compos...

115 lines
3.1 KiB
Markdown
Raw Normal View History

2023-06-05 15:24:42 +02:00
# Créer un projet en utilisant docker-compose
> ⚠ La procédure suivante s'applique dans le cadre du développement d'une application
> en utilisant l'image ["standalone"](./docker-usage.md).
## Création du projet symfony
1. **Création du projet**
```shell
symfony new app --webapp [other options...]
# voir https://symfony.com/download pour l'installation de symfony CLI
```
2. **Création du ficher Dockerfile**
A la racine du projet, créer le fichier `Dockerfile` et placer ce contenu:
```dockerfile
ARG ADDITIONAL_PACKAGES="php81-pdo=8.1.14-r0 php81-pdo_pgsql=8.1.14-r0"
FROM reg.cadoles.com/cadoles/symfony:alpine-php-8.1-standalone
```
**Notes**: adapter la liste des paquets additionnels à votre besoin.
3. **Création du fichier docker-compose**
A la racine du projet, créer le fichier (ou remplacer celui existant)`docker-compose.yml`, supprimer le fichier `docker-compose.override.yml` et placer ce contenu:
```yaml
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/app:delegated
environment:
PHP_FPM_MEMORY_LIMIT: 128m
APP_ENV: dev
DATABASE_URL: postgresql://${POSTGRES_PASSWORD:-app}:${POSTGRES_PASSWORD:-app}@db:5432/${POSTGRES_DB:-app}?serverVersion=15&chartset=utf8
ports:
- ${APP_HTTP_PORT:-8080}:8080
db:
image: postgres:${POSTGRES_VERSION:-15}-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-app}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-app}
POSTGRES_USER: ${POSTGRES_USER:-app}
volumes:
- app-db-data:/var/lib/postgresql/data:rw
volumes:
app-db-data:
```
4. Création du fichier `Makefile`
A la racine du projet, créer le fichier `Makefile` et placer ce contenu:
```make
dc := docker-compose
de := $(dc) exec
dr := $(dc) run --rm
app := $(dr) --no-deps app
.DEFAULT_GOAL := help
.PHONY: help
help: ## Affiche cette aide
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
.PHONY: dev
dev: vendor/autoload.php ## Lance le serveur de développement
$(dc) up
# -----------------------------------
# Utilitaires
# -----------------------------------
.PHONY: php
app: ## Se connecte au conteneur PHP
$(app) /bin/sh
# -----------------------------------
# Builds
# -----------------------------------
.PHONY: build
build: ## build application image
docker build \
-t app-standalone:latest \
.
# -----------------------------------
# Dependencies
# -----------------------------------
vendor/autoload.php: composer.lock
$(app) composer install
touch vendor/autoload.php
```
## Démarrer l'environnement
```shell
cd app/
make
# doit afficher la liste des commandes disponible
make dev
# doit démarrer l'environnement docker défini dans votre docker-compose.yml
# l'application doit être disponible à l'adresse http://localhost:8080
```
## Installer des dépendances `composer`
```shell
make app
# dans le conteneur
composer require ....
```