docker_build | ||
.gitignore | ||
docker-compose.yml | ||
README.md |
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
- Docker compose v1.12 or higher. See 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
whereCOMMAND
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
- or if user is not postgres:
- Shell into the PHP container,
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
- 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/.* . && rm -Rf 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
- Install Symfony:
- 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
- Test psql connection:
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
- Create entity: