Docker environment for a Symfony5 project ================================== # 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: * Docker engine v1.13 or higher. Your OS provided package might be a little old, if you encounter problems, do upgrade. See [https://docs.docker.com/engine/installation](https://docs.docker.com/engine/installation) * Docker compose v1.12 or higher. See [docs.docker.com/compose/install](https://docs.docker.com/compose/install/) 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`