Giter Club home page Giter Club logo

symfony-docker's Introduction

Docker images for Symfony framework development

(PHP7-FPM - NGINX - MySQL - ELK - PHPMYADMIN - MAILCATCHER - REDIS)

Build Status

Docker-symfony gives you everything you need for developing Symfony application. This complete stack run with docker and docker-compose (1.7 or higher).

Installation

  1. Create a .env from the .env.dist file. Adapt it according to your symfony application

    cp .env.dist .env
  2. Build/run containers with (with and without detached mode)

    $ docker-compose build
    $ docker-compose up -d
    $ docker-compose up -d --build
  3. Update your system host file (add symfony.dev)

    # UNIX only: get containers IP address and update host (replace IP according to your configuration)
    $ docker network inspect bridge | grep Gateway
    
    # unix only (on Windows, edit C:\Windows\System32\drivers\etc\hosts)
    $ sudo echo "171.17.0.1 symfony.dev" >> /etc/hosts
    
    OR
    
    $ sudo echo "127.0.0.1  symfony.dev" >> /etc/hosts 

    Note: For OS X, please take a look here and for Windows read this (4th step).

  4. Prepare Symfony app

    1. Update app/config/parameters.yml

      # path/to/your/symfony-project/app/config/parameters.yml
      parameters:
          database_host: db
    2. Composer install & create database

      $ docker-compose exec php bash
      $ composer install
      # Symfony2
      $ sf doctrine:database:create
      $ sf doctrine:schema:update --force
      $ sf doctrine:fixtures:load --no-interaction
      # Symfony3
      $ sf3 doctrine:database:create
      $ sf3 doctrine:schema:update --force
      $ sf3 doctrine:fixtures:load --no-interaction
  5. Enjoy :-)

Usage

Just run docker-compose up -d, then:

## Customize

If you want to add optionnals containers like Redis, PHPMyAdmin... take a look on doc/custom.md.

How it works?

Have a look at the docker-compose.yml file, here are the docker-compose built images:

  • db: This is the MySQL database container,
  • php: This is the PHP-FPM container in which the application volume is mounted,
  • nginx: This is the Nginx webserver container in which application volume is mounted too,
  • elk: This is a ELK stack container which uses Logstash to collect logs, send them into Elasticsearch and visualize them with Kibana.

This results in the following running containers:

$ docker ps -a
 OR
$ docker-compose ps
            Name                          Command               State                       Ports
 ---------------------------------------------------------------------------------------------------------------------
 dockersymfony_db_1            docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp
 dockersymfony_elk_1           /usr/bin/supervisord -n -c ...   Up      0.0.0.0:81->80/tcp
 dockersymfony_mailcatcher_1   /run.sh                          Up      0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp
 dockersymfony_nginx_1         nginx                            Up      443/tcp, 0.0.0.0:80->80/tcp
 dockersymfony_php_1           docker-php-entrypoint php-fpm    Up      0.0.0.0:9000->9000/tcp
 dockersymfony_phpmyadmin_1    /run.sh phpmyadmin               Up      0.0.0.0:8080->80/tcp

Useful commands

# bash commands
$ docker-compose exec php bash

# Composer (e.g. composer update)
$ docker-compose exec php composer update

# SF commands (Tips: there is an alias inside php container)
$ docker-compose exec php php /var/www/symfony/app/console cache:clear # Symfony2
$ docker-compose exec php php /var/www/symfony/bin/console cache:clear # Symfony3
# Same command by using alias
$ docker-compose exec php bash
$ sf cache:clear

# Retrieve an IP Address (here for the nginx container)
$ docker inspect --format '{{ .NetworkSettings.Networks.dockersymfony_default.IPAddress }}' $(docker ps -f name=nginx -q)

172.18.0.4

$ docker inspect $(docker ps -f name=nginx -q) | grep IPAddress

# MySQL commands
$ docker-compose exec db mysql -uroot -p"root"

# F***ing cache/logs folder
$ sudo chmod -R 777 app/cache app/logs # Symfony2
$ sudo chmod -R 777 var/cache var/logs # Symfony3

# Check CPU consumption
$ docker stats $(docker inspect -f "{{ .Name }}" $(docker ps -q))

# Delete all containers
$ docker rm -f $(docker ps -aq)

# Delete all images
$ docker rmi $(docker images -q)

# Restarting all running docker containers
$ docker restart $(docker ps -aq)

# docker restart
$ docker-compose restart

OR
 
# Recreating docker
$ docker-compose up -d 


# stop docker
$ docker-compose stop
 
$ docker stop $(docker ps -a -q)

# remove all of Docker containers
$ docker rm $(docker ps -a -q)


# docker usage
$ docker ps -s

Mailcatcher

php -r 'mail("[email protected]", "test1", "test1");';

FAQ

  • Got this error: ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running? If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable. ?
    Run docker-compose up -d instead.

  • Permission problem? See this doc (Setting up Permission)

  • How to config Xdebug? Xdebug is configured out of the box! Just config your IDE to connect port 9001 and id key PHPSTORM

Contributing

First of all, thank you for contributing ♥

symfony-docker's People

Contributors

prakasha4devops avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.