Une config docker pour démarrer facilement le développement d'un projet Symfony5.
Go to file
2021-02-18 21:22:24 +01:00
app installing webpack-encore and yarn in node container 2021-02-18 21:22:24 +01:00
docker_build improve initial commit 2021-02-18 18:58:17 +01:00
.gitignore adding symfony project initial files 2021-02-18 20:10:43 +01:00
docker-compose.yml improve initial config 2021-02-18 18:11:04 +01:00
docker-node.sh installing webpack-encore and yarn in node container 2021-02-18 21:22:24 +01:00
README.md installing webpack-encore and yarn in node container 2021-02-18 21:22:24 +01:00

Docker environment for a Symfony5 project

Présentation (français)

Ce repository propose une configuration qui permet de démarrer très simplement un nouveau projet Symfony dans des conteneurs docker. Cette configuration doit encore être améliorée, mais déjà, en suivant pas à pas les instructions à partir du chapitre "My installation", on peut démarrer en quelques minutes un nouveau projet.

Add to your project

Move the docker-compose.yml and the folder named docker_build containing nginx and php-fpm config for it to the root of your Symfony project.

Ensure the webserver config on docker\nginx.conf is correct for your project. For instance, for Symfony 4 or 5 it should look for the public/index.php, instead of the web/app.php from Symfony2 and Symfony3

Note: you may place the files elsewhere in your project. Make sure you modify the locations for the php-fpm dockerfile, the php.ini overrides and nginx config on docker-compose.yml if you do so.

How to run

Dependencies:

Once you're done, simply cd to your project and run docker-compose up -d. This will initialise and start all the containers, then leave them running in the background.

Docker compose cheatsheet

Note: you need to cd first to where your docker-compose.yml file lives.

  • Start containers in the background: docker-compose up -d
  • Start containers on the foreground: docker-compose up. You will see a stream of logs for every container running.
  • Stop containers: docker-compose stop
  • Kill containers: docker-compose kill
  • View container logs: docker-compose logs
  • Execute command inside of container: docker-compose exec SERVICE_NAME COMMAND where COMMAND is whatever you want to run. Examples:
    • Shell into the PHP container, docker-compose exec --user 1000 php bash
    • Run symfony console, docker-compose exec --user 1000 php bin/console
    • Open a postgresql shell, docker-compose exec --user postgres db psql
      • or if user is not postgres: docker-compose exec db psql --user admin postgres

Docker general cheatsheet

Note: these are global commands and you can run them from anywhere.

  • To clear containers: docker rm -f $(docker ps -a -q)
  • To clear images: docker rmi -f $(docker images -a -q)
  • To clear volumes: docker volume rm $(docker volume ls -q)
  • To clear networks: docker network rm $(docker network ls | tail -n+2 | awk '{if($2 !~ /bridge|none|host/){ print $1 }}')

Disclaimer: This project has been generated on phpdocker.io

My installation

  • Build containers: docker-compose build
  • Run containers: docker-compose up -d
  • Manually change owner of app dir (temp): sudo chown 1000:1000 app/
  • Enter in php container docker-compose exec --user 1000 php bash
    • Install Symfony: composer create-project symfony/skeleton symfony
    • Move project in parent (app): mv symfony/* . && mv symfony/.* . ; rmdir symfony
    • Add Symfony requirements:
    composer require annotations
    composer require --dev profiler
    composer require twig
    composer require orm
    composer require form
    composer require form validator
    composer require maker-bundle
    composer require security-csrf
    
  • Stop containers: docker-compose down
  • Adapt querystring in ./app/.env:
    --- DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8"
    +++ DATABASE_URL="postgresql://postgres:secret@db:5432/postgres?serverVersion=12&charset=utf8"
    
  • Run containers: docker-compose up -d
  • Enter in php container docker-compose exec --user 1000 php bash
    • Test psql connection: psql --host db --user postgres --password postgres
    • Create database schema: bin/console doctrine:schema:create

Let's go !

  • Let's create first object:
    • Create entity: bin/console make:entity Beer
    • Create CRUD on entity: bin/console make:crud Beer
    • See sql: bin/console doctrine:schema:update --dump-sql
    • Control migrations: bin/console doctrine:migrations:status
    • Generate migration file: bin/console doctrine:migrations:diff
    • See migration file: cat migrations/Version20210218160541.php
    • Migrate: bin/console doctrine:migrations:migrate
    • Control migrations: bin/console doctrine:migrations:status

Yarn

  • installation de webpack-encore: composer require symfony/webpack-encore-bundle
  • pour finir il faut installer et lancer yarn:
    • un script bash docker-node.sh lancera node dans un conteneur quand on a besoin de yarn:
  • au premier lancement du container node:14, j'initialise la mise en place:
    • npm install yarn
    • npm install --force
  • puis je lance (ce qu'il faudra faire à chaque fois):
    • yarn encore dev-server