diff --git a/README.md b/README.md
index 15f9d5a..da0e9bd 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 0000000..33c1966
--- /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 549458d..bc7ae53 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 eb11493..495382f 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 0000000..ee0605b
--- /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