diff --git a/README.md b/README.md index 15f9d5ae..da0e9bdb 100644 --- a/README.md +++ b/README.md @@ -52,10 +52,10 @@ LaraDock strives to make the development experience easier. It contains pre-packaged Docker Images that provides you a wonderful development environment without requiring you to install PHP, NGINX, MySQL, REDIS, and any other software on your local machine. -**Usage Overview:** Run `NGINX`, `MySQL` and `Redis`. +**Usage Overview:** Run `NGINX` and `MySQL`. ```shell -docker-compose up nginx mysql redis +docker-compose up nginx mysql ``` @@ -64,7 +64,7 @@ docker-compose up nginx mysql redis - Easy switch between PHP versions: 7.0 - 5.6 - 5.5 ... - Choose your favorite database engine: MySQL - Postgres - Redis ... - Run your own combination of software's: Memcached - MariaDB ... -- Every software runs on a separate container: PHP - NGINX ... +- Every software runs on a separate container: PHP-FPM - NGINX ... - Easy to customize any container, with simple edit to the `dockerfile`. - All Images extends from an official base Image. (Trusted base Images). - Pre-configured Nginx for Laravel. @@ -78,7 +78,7 @@ docker-compose up nginx mysql redis ## Supported Containers -- PHP (7.0 - 5.6 - 5.5) +- PHP-FPM (7.0 - 5.6 - 5.5) - NGINX - MySQL - PostgreSQL @@ -87,7 +87,10 @@ docker-compose up nginx mysql redis - Memcached - Beanstalkd - Beanstalkd Console -- Data Volume +- Workspace (includes: Composer, PHP7-CLI , Laravel Installer, Git, Vim, Nano, cURL) +- Data Volume *(Databases Data Container)* +- Application *(Application Code Container)* + >If you can't find your container, build it yourself and add it to this list. Contributions are welcomed :) @@ -139,26 +142,67 @@ Running a virtual Container is much faster than running a full virtual Machine. |-----------------------------------------------------------------------------------------|---------------------------------------------------------| | [Laravel](https://laravel.com/docs/master/installation) | [Laravel](https://laravel.com/docs/master/installation) | | [Git](https://git-scm.com/downloads) | [Git](https://git-scm.com/downloads) | -| [Docker Engine](https://docs.docker.com/engine/installation/linux/ubuntulinux/#install) | [Docker Toolbox](https://www.docker.com/toolbox) | +| [Docker Engine](https://docs.docker.com/engine/installation/linux/ubuntulinux) | [Docker Toolbox](https://www.docker.com/toolbox) | | [Docker Compose](https://docs.docker.com/compose/install) | | ## Installation -1 - Clone the `LaraDock` repository, in any of your `Laravel` projects: +#### A] In existing Laravel Projects: + +1 - Clone the `LaraDock` repository, inside your `Laravel` project root direcotry: ```bash -git clone https://github.com/LaraDock/laradock.git docker +git submodule add https://github.com/LaraDock/laradock.git ``` -You can use `git submodule add` instead of `git clone` if you are already using Git for your Laravel project *(Recommended)*: +2 - That's it, jump to the Usage section now. + +*If you are not already using Git for your Laravel project, you can use `git clone` instead of `git submodule`.* + + +#### B] Starting from scratch (we will install Laravel): + +*If you don't have any Laravel project yet, and you want to start your Laravel project with Docker.* + +1 - Clone the `LaraDock` repository anywhere on your machine: ```bash -git submodule add https://github.com/LaraDock/laradock.git docker +git clone https://github.com/LaraDock/laradock.git ``` ->These commands should create a `docker` folder, on the root directory of your Laravel project. +2 - Go to the Uage section below and do the steps 1 and 3 then come back here. + +3 - Enter the Workspace container. (assuming you have the Workspace container running): + +```bash +docker exec -it {Workspace-Container-Name} bash +``` +Replace `{Workspace-Container-Name}` with your Workspace container name. To get the name type `docker-compose ps` and copy it. + +4 - Install Laravel anyway you like. + +Example using the Laravel Installer: + +```bash +laravel new my-cool-app +``` +For more about this check out this [link](https://laravel.com/docs/master#installing-laravel). + +5 - Edit `docker-compose.yml` to Map the new application path: + +By default LaraDock assumes the Laravel application is living in the parent directory of the laradock folder. + +Since the new Laravel application is in the `my-cool-app` folder, we should replace `../:/var/www/laravel` with `../my-cool-app/:/var/www/laravel`, as follow: + +```yaml + application: + build: ./application + volumes: + - ../my-cool-app/:/var/www/laravel +``` +6 - Finallt go to the Usage section below again and do steps 2 and 4. @@ -166,14 +210,14 @@ git submodule add https://github.com/LaraDock/laradock.git docker ## Usage -0 - For **Windows & MAC** users only: make sure you have a running Docker Virtual Host on your machine. +1 - For **Windows & MAC** users only: make sure you have a running Docker Virtual Host on your machine. (**Linux** users don't need a Virtual Host, so skip this step).
[How to run a Docker Virtual Host?](#Run-Docker-Virtual-Host)
-1 - Open your Laravel's `.env` file and set the `DB_HOST` to your `{Docker-IP}`: +2 - Open your Laravel's `.env` file and set the `DB_HOST` to your `{Docker-IP}`: ```env DB_HOST=xxx.xxx.xxx.xxx @@ -181,28 +225,22 @@ DB_HOST=xxx.xxx.xxx.xxx [How to find my Docker IP Address?](#Find-Docker-IP-Address)
-2 - Run the Containers, (you can select the software's (containers) that you wish to run) +3 - Run the Containers, (you can select the software's (containers) that you wish to run)
-*Make sure you are in the `docker` folder before running the `docker-compose` command.* +*Make sure you are in the `laradock` folder before running the `docker-compose` command.* -> Running PHP, NGINX, MySQL and Redis: +**Example:** Running NGINX, MySQL, Redis and the Workspace: ```bash -docker-compose up -d php nginx mysql redis +docker-compose up -d nginx mysql redis workspace ``` +*Note: the PHP-FPM, Application and Data Containers will automatically run.* -Note: you can choose your own combination of software's (containers), another example: -> Running PHP, NGINX, Postgres and Memcached: - -```bash -docker-compose up -d php nginx postgres memcached -``` - -Supported Containers: `nginx`, `mysql`, `redis`, `postgres`, `mariadb`, `memcached`, `beanstalkd`, `beanstalkd-console`, `data`, `php`. +Supported Containers: `workspace`, `nginx`, `mysql`, `redis`, `postgres`, `mariadb`, `memcached`, `beanstalkd`, `beanstalkd-console`, `data`, `php-fpm`, `application`.
-3 - Open your browser and visit your `{Docker-IP}` address (`http://xxx.xxx.xxx.xxx`). +4 - Open your browser and visit your `{Docker-IP}` address (`http://xxx.xxx.xxx.xxx`).
@@ -229,6 +267,12 @@ sudo chmod -R 777 storage && sudo chmod -R 777 bootstrap/cache ```bash docker ps ``` +You can also use the this command if you want to see only this project containers: + +```bash +docker-compose ps +``` +
@@ -284,26 +328,26 @@ To change the default PHP version: 1 - Open the `docker-compose.yml`. -2 - Search for `Dockerfile-php-70` in the PHP container section. +2 - Search for `Dockerfile-70` in the PHP container section. 3 - Change the version number.
-Example to select version 5.6 instead of 7.0 you have to replace `Dockerfile-php-70` with `Dockerfile-php-56`. +Example to select version 5.6 instead of 7.0 you have to replace `Dockerfile-70` with `Dockerfile-56`. Sample: ```txt -php: +php-fpm: build: - context: ./php - dockerfile: Dockerfile-php-70 + context: ./php-fpm + dockerfile: Dockerfile-70 ``` Supported Versions: -- For (PHP 7.0.*) use `Dockerfile-php-70` -- For (PHP 5.6.*) use `Dockerfile-php-56` -- For (PHP 5.5.*) use `Dockerfile-php-55` +- For (PHP 7.0.*) use `Dockerfile-70` +- For (PHP 5.6.*) use `Dockerfile-56` +- For (PHP 5.5.*) use `Dockerfile-55` 4 - Finally rebuild the container @@ -312,7 +356,7 @@ Supported Versions: docker-compose build php ``` -For more details visit the [official PHP docker images](https://hub.docker.com/_/php/). +For more details about the PHP base image, visit the [official PHP docker images](https://hub.docker.com/_/php/).
@@ -372,7 +416,7 @@ DB_HOST=xxx.xxx.xxx.xxx Optionally you can define the server name in the nginx config file, like this: -``` +```conf server_name laravel.dev; ``` @@ -382,7 +426,14 @@ server_name laravel.dev;
#### View the Log files -The Log files are stored in the `docker/logs` directory. +The Nginx Log file is stored in the `logs/nginx` directory. + +However to view the logs of all the other containers (MySQL, PHP-FPM,...) you can run this: + +```bash +docker logs {container-name} +``` + @@ -445,7 +496,7 @@ composer require predis/predis:^1.0 2 - enter any container using: ```bash -docker exec -it {container-name-or-id} bash +docker exec -it {container-name} bash ``` 3 - to exit a container, type `exit`. diff --git a/application/Dockerfile b/application/Dockerfile new file mode 100644 index 00000000..33c19660 --- /dev/null +++ b/application/Dockerfile @@ -0,0 +1,7 @@ +FROM debian:jessie + +MAINTAINER Mahmoud Zalt + +WORKDIR /var/www/laravel + +CMD ["true"] diff --git a/docker-compose.yml b/docker-compose.yml index 549458d1..bc7ae53e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,32 +2,25 @@ version: '2' services: -### Nginx Server Container ################################## +### PHP-FPM Container ####################################### - nginx: - build: ./nginx - volumes_from: - - php - volumes: - - ./logs/nginx/:/var/log/nginx - ports: - - "80:80" - links: - - php - -### PHP Container ########################################### - - php: + php-fpm: build: - context: ./php - dockerfile: Dockerfile-php-70 - volumes: - - ../:/var/www/laravel - - ./logs/php/:/usr/local/var/log + context: ./php-fpm + dockerfile: Dockerfile-70 + volumes_from: + - application expose: - "9000" -### DATA Container ########################################## +### Laravel Application Code Container ###################### + + application: + build: ./application + volumes: + - ../:/var/www/laravel + +### Databases Data Container ################################ data: build: ./data @@ -38,6 +31,20 @@ services: - /var/lib/redis - /var/lib/memcached +### Nginx Server Container ################################## + + nginx: + build: ./nginx + volumes_from: + - application + volumes: + - ./logs/nginx/:/var/log/nginx + ports: + - "80:80" + - "443:443" + links: + - php-fpm + ### MySQL Container ######################################### mysql: @@ -52,7 +59,7 @@ services: MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root links: - - php + - php-fpm ### PostgreSQL Container #################################### @@ -67,7 +74,7 @@ services: POSTGRES_USER: homestead POSTGRES_PASSWORD: secret links: - - php + - php-fpm ### MariaDB Container ####################################### @@ -83,7 +90,7 @@ services: MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root links: - - php + - php-fpm ### Redis Container ######################################### @@ -94,7 +101,7 @@ services: ports: - "6379:6379" links: - - php + - php-fpm ### Memcached Container ##################################### @@ -105,7 +112,7 @@ services: ports: - "11211:11211" links: - - php + - php-fpm ### Beanstalkd Container #################################### @@ -115,9 +122,9 @@ services: - "11300:11300" privileged: true links: - - php + - php-fpm -### Beanstalkd-Console Container ############################ +### Beanstalkd Console Container ############################ beanstalkd-console: build: ./beanstalkd-console @@ -126,4 +133,12 @@ services: links: - beanstalkd +### Workspace Utilities Container ########################### + + workspace: + build: ./workspace + volumes_from: + - application + tty: true + ### Add more Containers below ############################### diff --git a/nginx/Dockerfile b/nginx/Dockerfile index eb114931..495382fe 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -5,7 +5,7 @@ MAINTAINER Mahmoud Zalt ADD nginx.conf /etc/nginx/ ADD laravel.conf /etc/nginx/sites-available/ -RUN echo "upstream php-upstream { server php:9000; }" > /etc/nginx/conf.d/upstream.conf +RUN echo "upstream php-upstream { server php-fpm:9000; }" > /etc/nginx/conf.d/upstream.conf RUN usermod -u 1000 www-data diff --git a/php/Dockerfile-php-55 b/php-fpm/Dockerfile-55 similarity index 100% rename from php/Dockerfile-php-55 rename to php-fpm/Dockerfile-55 diff --git a/php/Dockerfile-php-56 b/php-fpm/Dockerfile-56 similarity index 100% rename from php/Dockerfile-php-56 rename to php-fpm/Dockerfile-56 diff --git a/php/Dockerfile-php-70 b/php-fpm/Dockerfile-70 similarity index 100% rename from php/Dockerfile-php-70 rename to php-fpm/Dockerfile-70 diff --git a/php/laravel.ini b/php-fpm/laravel.ini similarity index 100% rename from php/laravel.ini rename to php-fpm/laravel.ini diff --git a/php/laravel.pool.conf b/php-fpm/laravel.pool.conf similarity index 100% rename from php/laravel.pool.conf rename to php-fpm/laravel.pool.conf diff --git a/workspace/Dockerfile b/workspace/Dockerfile new file mode 100644 index 00000000..ee0605b6 --- /dev/null +++ b/workspace/Dockerfile @@ -0,0 +1,55 @@ +FROM phusion/baseimage:latest + +MAINTAINER Mahmoud Zalt + +RUN DEBIAN_FRONTEND=noninteractive +RUN locale-gen en_US.UTF-8 + +ENV LANGUAGE=en_US.UTF-8 +ENV LC_ALL=en_US.UTF-8 +ENV LC_CTYPE=UTF-8 +ENV LANG=en_US.UTF-8 +ENV TERM xterm + +# Install "software-properties-common" (for add-apt-repository) and add the "PHP 7" ppa +RUN apt-get update \ + && apt-get install -y software-properties-common \ + && add-apt-repository -y ppa:ondrej/php + +# Install PHP-CLI 7 and some useful Tools +RUN apt-get update \ + && apt-get install -y \ + php7.0-cli \ + php7.0-common \ + php7.0-curl \ + php7.0-json \ + php7.0-xml \ + php7.0-mbstring \ + php7.0-mcrypt \ + php7.0-mysql \ + php7.0-zip \ + git \ + curl \ + vim \ + nano + +# Install Composer +RUN curl -s http://getcomposer.org/installer | php \ + && mv composer.phar /usr/local/bin/ \ + && echo "alias composer='/usr/local/bin/composer.phar'" >> ~/.bashrc + +# Install the Laravel Installer +RUN composer.phar global require "laravel/installer" \ + && echo "export PATH='~/.composer/vendor/bin:$PATH'" >> ~/.bashrc + +# Add an alias for PHPUnit +RUN echo "alias phpunit='./vendor/bin/phpunit'" >> ~/.bashrc + +# Source the bash +RUN . ~/.bashrc + +# Clean up +RUN apt-get autoclean && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +WORKDIR /var/www/laravel