diff --git a/README.md b/README.md index c442a0f8..842039b2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LaraDock -[![forthebadge](http://forthebadge.com/images/badges/built-with-love.svg)](http://www.zalt.me) +[![forthebadge](http://forthebadge.com/images/badges/built-by-developers.svg)](http://zalt.me) LaraDock helps you run your **Laravel** App on **Docker** real quick. @@ -15,6 +15,11 @@ It's like Laravel Homestead but for Docker instead of Vagrant. - [Intro](#Intro) + - [Features](#features) + - [What is Docker](#what-is-docker) + - [What is Laravel](#what-is-laravel) + - [Why Docker not Vagrant](#why-docker-not-vagrant) + - [LaraDock VS Homestead](#laradock-vs-homestead) - [Supported Containers](#Supported-Containers) - [Requirements](#Requirements) - [Installation](#Installation) @@ -47,37 +52,86 @@ 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. + +### Features +- 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: PHP - NGINX - MySQL - ... +- Every software runs on a separate container: PHP - 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. And very easy to update. +- Using of a Data container, to keep the Data safe and accessible at anytime. +- Easy to apply configurations inside containers. +- Clean and well structured Dockerfiles (`dockerfile`). +- Latest version of the Docker Compose file (`docker-compose`). +- Everything is visible and editable. +- Best practices everywhere. + + + ### What is Docker? [Docker](https://www.docker.com) is an open-source project that automates the deployment of applications inside software containers, by providing an additional layer of abstraction and automation of [operating-system-level virtualization](https://en.wikipedia.org/wiki/Operating-system-level_virtualization) on Linux, Mac OS and Windows. + ### What is Laravel? Seriously!!! + + ### Why Docker not Vagrant!? -[Vagrant](https://www.vagrantup.com) gives you Virtual Machines in minutes while Docker gives you Virtual Containers in seconds. + +[Vagrant](https://www.vagrantup.com) creates Virtual Machines in minutes while Docker creates Virtual Containers in seconds. Instead of providing a full Virtual Machines, like you get with Vagrant, Docker provides you **lightweight** Virtual Containers, that share the same kernel and allow to safely execute independent processes. +In addition to the speed, Docker gives tens of features that cannot be achieved with Vagrant. + +Most importantly Docker can run on Development and on Production (same environment everywhere). While Vagrant is designed for Development only, (so you have to re-provision your server on Production every time). + + + +### LaraDock VS Homestead + +LaraDock and [Homestead](https://laravel.com/docs/master/homestead) both gives you a complete virtual development environments. (Without the need to install and configure every single software on your own Operating System). + +- Homestead is a tool that controls Vagrant for you (using Homestead special commands). And Vagrant manages your Virtual Machine. + +- LaraDock is a tool that controls Docker for you (using Docker Compose official commands). And Docker manages you Virtual Containers. + +Running a virtual Container is much faster than running a full virtual Machine. +
Thus **LaraDock is much faster than Homestead**. ## Supported Containers -- PHP +- PHP (7.0 - 5.6 - 5.5) - NGINX +- Redis - MySQL - PostgreSQL -- Redis +- MariaDB +- Beanstalkd +- Beanstalkd Console - Data Volume +Cannot find your container! we would love to have it as well. Consider contributing your container and adding it to this list. + + + ## Requirements -- Laravel ([Download](https://laravel.com/docs/master/installation)) -- Docker Toolbox ([Download](https://www.docker.com/toolbox)) -- Git ([Download](https://git-scm.com/downloads)) -- Composer ([Download](https://getcomposer.org/download/)) + +| Linux | Windows & MAC | +|-----------------------------------------------------------------------------------------|---------------------------------------------------------| +| [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 Compose](https://docs.docker.com/compose/install) | | + ## Installation @@ -88,7 +142,7 @@ Instead of providing a full Virtual Machines, like you get with Vagrant, Docker git clone https://github.com/LaraDock/laradock.git docker ``` -Instead of `git clone` you can use `git submodule add` in case you are already using Git for your Laravel project *(Recommended)*: +You can use `git submodule add` instead of `git clone` if you are already using Git for your Laravel project *(Recommended)*: ```bash git submodule add https://github.com/LaraDock/laradock.git docker @@ -97,12 +151,15 @@ git submodule add https://github.com/LaraDock/laradock.git docker >These commands should create a `docker` folder, on the root directory of your Laravel project. + + ## Usage ->**(Windows & MAC users)** Make sure you have a running Docker Virtual Host on your machine first. ->
->[How to run a Docker Virtual Host?](#Run-Docker-Virtual-Host) +0 - 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)
@@ -121,7 +178,7 @@ DB_HOST=xxx.xxx.xxx.xxx > Running PHP, NGINX and MySQL: ```bash -docker-compose up -d php nginx mysql +docker-compose up -d php nginx mysql redis ``` Note: you can choose your own combination of software's (containers), another example: @@ -129,10 +186,10 @@ Note: you can choose your own combination of software's (containers), another ex > Running PHP, NGINX, Postgres and Redis: ```bash -docker-compose up -d php nginx postgres redis +docker-compose up -d php nginx beanstalkd postgres ``` -Supported Containers: `php`, `nginx`, `mysql`, `postgres`, `redis`, `data`. +Supported Containers: `nginx`, `mysql`, `redis`, `postgres`, `mariadb`, `beanstalkd`, `beanstalkd-console`, `data`, `php`.
3 - Open your browser and visit your `{Docker-IP}` address (`http://xxx.xxx.xxx.xxx`). @@ -172,10 +229,12 @@ docker-compose stop To stop single container do: -```php +```bash docker-compose stop {container-name} ``` + +
#### Delete all existing Containers @@ -197,10 +256,10 @@ If you do any change to any `dockerfile` make sure you run this command, for the ```bash docker-compose build ``` -Optionally you can specify which container to rebuild (instead of rebuilding all the containers), example rebuilding `PHP`: +Optionally you can specify which container to rebuild (instead of rebuilding all the containers): ```bash -docker-compose build php +docker-compose build {container-name} ``` @@ -273,7 +332,11 @@ Supported Versions: For more details visit the [official PHP docker images](https://hub.docker.com/_/php/). +3 - Finally rebuild the container +```bash +docker-compose build php +```
@@ -346,26 +409,20 @@ server_name laravel.dev; The Log files are stored in the `docker/logs` directory. + +
#### Enter a Container (SSH into a running Container) 1 - first list the current running containers with `docker ps` -2 - enter any container with: - -Example: enter the `php` container +2 - enter any container using: ```bash -docker exec -it php bash +docker exec -it {container-name-or-id} bash ``` - -Example: enter the `nginx` container - -```bash -docker exec -it nginx bash -``` - +3 - to exit a container, type `exit`.
@@ -375,6 +432,7 @@ To prevent a container (software) from running, open the `docker-compose.yml` fi +
#### Edit a Docker Image diff --git a/beanstalkd-console/Dockerfile b/beanstalkd-console/Dockerfile new file mode 100644 index 00000000..f42178dd --- /dev/null +++ b/beanstalkd-console/Dockerfile @@ -0,0 +1,15 @@ +FROM php:latest + +MAINTAINER Mahmoud Zalt + +RUN apt-get update && apt-get install -y curl + +RUN curl -sL https://github.com/ptrofimov/beanstalk_console/archive/master.tar.gz | tar xvz -C /tmp +RUN mv /tmp/beanstalk_console-master /source + +RUN apt-get remove --purge -y curl && apt-get autoclean && apt-get clean +RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +EXPOSE 2080 + +CMD bash -c 'BEANSTALK_SERVERS=$BEANSTALKD_PORT_11300_TCP_ADDR:11300 php -S 0.0.0.0:2080 -t /source/public' \ No newline at end of file diff --git a/beanstalkd/Dockerfile b/beanstalkd/Dockerfile new file mode 100644 index 00000000..ea1f87a8 --- /dev/null +++ b/beanstalkd/Dockerfile @@ -0,0 +1,16 @@ +FROM phusion/baseimage:latest + +MAINTAINER Mahmoud Zalt + +ENV DEBIAN_FRONTEND noninteractive +ENV PATH /usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +RUN apt-get update +RUN apt-get install -y beanstalkd +RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +VOLUME /var/lib/beanstalkd/data + +EXPOSE 11300 + +CMD ["/usr/bin/beanstalkd"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index e2eb14e2..0946d8ca 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,11 +1,11 @@ version: '2' + services: ### Nginx Server Container ################################## nginx: build: ./nginx - container_name: nginx volumes_from: - php volumes: @@ -19,7 +19,6 @@ services: php: build: ./php - container_name: php volumes: - ../:/var/www/laravel - ./logs/php/:/usr/local/var/log @@ -30,17 +29,16 @@ services: data: build: ./data - container_name: data volumes: - /var/lib/mysql - - /var/lib/postgresql/data + - /var/lib/postgres + - /var/lib/mariadb - /var/lib/redis ### MySQL Container ######################################### mysql: build: ./mysql - container_name: mysql volumes_from: - data ports: @@ -57,7 +55,6 @@ services: postgres: build: ./postgres - container_name: postgres volumes_from: - data ports: @@ -69,14 +66,46 @@ services: links: - php +### MariaDB Container ####################################### + + mariadb: + build: ./mariadb + volumes_from: + - data + ports: + - "3306:3306" + environment: + MYSQL_DATABASE: homestead + MYSQL_USER: homestead + MYSQL_PASSWORD: secret + MYSQL_ROOT_PASSWORD: root + links: + - php + ### Redis Container ######################################### redis: build: ./redis - container_name: redis volumes_from: - data ports: - "6379:6379" +### Beanstalkd Container #################################### + + beanstalkd: + build: ./beanstalkd + ports: + - "11300:11300" + privileged: true + +### Beanstalkd-Console Container ############################ + + beanstalkd-console: + build: ./beanstalkd-console + ports: + - "2080:2080" + links: + - beanstalkd + ### Add more Containers below ############################### diff --git a/mariadb/Dockerfile b/mariadb/Dockerfile new file mode 100644 index 00000000..d798d26c --- /dev/null +++ b/mariadb/Dockerfile @@ -0,0 +1,9 @@ +FROM mariadb:latest + +MAINTAINER Mahmoud Zalt + +VOLUME /var/lib/mariadb + +CMD ["mysqld"] + +EXPOSE 3306 diff --git a/postgres/Dockerfile b/postgres/Dockerfile index 295b63c1..87d80cc9 100644 --- a/postgres/Dockerfile +++ b/postgres/Dockerfile @@ -2,7 +2,7 @@ FROM postgres:latest MAINTAINER Ben M -VOLUME /var/lib/postgresql/data +VOLUME /var/lib/postgres CMD ["postgres"]