Docker for Symfony application :whale:
Docker for Symfony application, powered by Nginx and php-fpm.
Based on Debian Jessie.
If you are experiencing some issues, take a look at TROUBLESHOOTING
Dockerfile
linksImage tags follows PHP versions
latest
8.1
(8.1/Dockerfile)
8.0
(8.0/Dockerfile)
7
7.4
(7.4/Dockerfile)
7.3
(7.3/Dockerfile)
7.2
(7.2/Dockerfile)
7.1
Not maintained, END OF LIFE
7.0
Not maintained, END OF LIFE
5
, 5.6
Not maintained, END OF LIFE
5.4
Not maintained, END OF LIFE
Symfony | ||||||
---|---|---|---|---|---|---|
Image | 2.x | 3.x | 4.x | 5.x | 6.x | |
8.1 | :x: | :x: | :heavy_check_mark: (not tested) | :heavy_check_mark: (not tested) | :heavy_check_mark: (not tested) | |
8.0 | :x: | :x: | :heavy_check_mark: (not tested) | :heavy_check_mark: (default) | :heavy_check_mark: (not tested) | |
7.4 | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: (default) | :x: | |
7.3 | :heavy_check_mark: (not tested) | :heavy_check_mark: (not tested) | :heavy_check_mark: (default) | :heavy_check_mark: (not tested) | :x: | |
7.2 | :heavy_check_mark: (not tested) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: (not tested) | :x: | |
7.1 | :heavy_check_mark: (not tested) | :heavy_check_mark: | :heavy_check_mark: | :x: | :x: | |
7.0 | :heavy_check_mark: (not tested) | :heavy_check_mark: (not tested) | :x: | :x: | :x: | |
5.6 | :heavy_check_mark: (not tested) | :heavy_check_mark: (not tested) | :x: | :x: | :x: |
Composer versions :
docker pull kibatic/symfony
Then run in your symfony folder
# Image >= 7.3 & Symfony 2.x, 3.x
docker run -e SYMFONY_VERSION=3 -v $(pwd):/var/www -p 8080:80 kibatic/symfony:7.3
# Image >= 7.3 & Symfony 4.x
docker run -v $(pwd):/var/www -p 8080:80 kibatic/symfony:7.3
# Image < 7.3 & Symfony 2.x, 3.x
docker run -v $(pwd):/var/www -p 8080:80 kibatic/symfony:7.2
# Image < 7.3 & Symfony 4.x
docker run -e SYMFONY_VERSION=4 -v $(pwd):/var/www -p 8080:80 kibatic/symfony:7.2
Symfony app will be accessible on http://localhost:8080/
If you want to replace the default nginx settings, overwrite configuration file at /etc/nginx/sites-enabled/default
.
COPY nginx.conf /etc/nginx/sites-enabled/default
You may also want to add only some directives in existing site config.
COPY custom-config.conf /etc/nginx/conf.d/docker/custom-config.conf
For both production and dev environment you should log to stdout / stderr, example below.
# config/packages/monolog.yaml
monolog:
handlers:
stdout:
type: stream
path: 'php://stdout'
level: debug
channels: ['!event']
# (Optional) format logs to json
#formatter: monolog.formatter.json
stderr:
type: stream
path: 'php://stderr'
level: error
# (Optional) format logs to json
#formatter: monolog.formatter.json
A common practice is to log to stdout, but there are major bug in php-fpm wich makes stdout logging not reliable :
This image setup a known workaround (see here) and expose a log stream as env var LOG_STREAM, but you cannot log to stdout For a proper logging you have to configure monolog to log to this stream
# app/config_dev.yml
monolog:
handlers:
main:
type: stream
path: '/tmp/stdout'
level: debug
You can also use symfony %env(LOG_STREAM)%
if your symfony version is compatible with this syntax
We also provide a default dirty solution for standard monolog configuration, this is not recommended in production
tail -q -n 0 -F app/logs/dev.log app/logs/prod.log var/logs/dev.log var/logs/prod.log