DockBox es un entorno de desarrollo PHP con Docker. El objetivo es facilitar el desarrolo de aplicación PHP con la tecnología de Docker.
Contiene las herramientas basicas para que hagas de tus desarrollos lo más comodo sin la necesidad de instalarte software u otras tecnologías en tu maquina.
- Ubuntu 16.04
- Apache 2.4
- NGinx 12
- PHP 5.6
- PHP 7.0
- PHP 7.1
- MySql 5.7
- Mssql 2016
- MongoDB 3.4
- MariaDb 10.0
- Postgres 9.6.1
- Postgis 2.0
- Elasticsearch 5.1.2
- Redis 3.2
- PHPMyAdmin 4.6.6
- PGAdmin 4 v1.1
- Jenkins 2.32
- Jira 7.3.4
- Git
- Docker Engine
- Docker Compose
- Docker Machine (Mac and Windows only)
Ver documentación oficial Docker CE
Pasos que realice Docker
Elije la configuración que más se ajuste a tus necesidades.
Configuración de Proyectos Múltiples::
1 - clonar este repositorio en cualquier lado de tu máquina:
git clone https://github.com/alejandrososa/dockbox.git
Nota: En este caso la estructura de carpetas será así:
- /var/www/html/
- dockbox
- aplicacion1
- aplicacion2
2 - Copia el fichero de configuración de ejemplo .env-example
a .env
para tener toda la configuración de los contenedores.
cp .env-example .env
Puede editar el archivo .env para elegir el software que desea instalar en su entorno. Puedes configurar las versiones de librerías, cuentas de usuario en bases de datos, instalar librerías, cambiar ip del contenedor, verión de php, etc. Siempre puede consultar el archivo docker-compose.yml para ver cómo se han utilizado esas variables.
3 - Copia el fichero de docker-compose docker-compose.yml.SIMPLE
a docker-compose.yml
para tener configurado los
contenedores esenciales preconfigurados.
cp docker-compose.yml.SIMPLE docker-compose.yml
El docker-compose.yml.SIMPLE tiene el mínimo de contenedores para trababar. Si deseas tener todos los contenedores preconfiguraos entonces copia el docker-compose.yml.FULL
4 - Ejecutar el comando docker-compose
para que los cambios tengan efecto.
docker-compose up -d mysql apache2
Nota: Los contenedores servidor y php-fpm se ejecutarán automáticamente en la mayoría de los casos, por lo que no es necesario especificarlos en el comando up. Si no pudiste encontrarlos corriendo entonces necesitas especificarlos como sigue: docker-compose up -d nginx php-fpm mysql servidor.
5 - Se puede acceder a todos los sitios por visitar http://localhost/aplicacion1/public y http://localhost/aplicacion2/public, pero por supuesto que no es muy útil por lo que vamos a php configurar rápidamente.
Haga lo mismo para cada proyecto aplicacion2.conf
, aplicacion3.conf
, ...
6 - Añadir los dominios a tu hosts.
127.0.0.1 aplicacion1.dev
7 - Crear las bases de datos del proyecto. En este momento hay que hacerlo de forma manual mediante la introducción de su contenedor DB.
Si modificas el fichero docker-compose.yml, .env o cualquier Dockerfile, debes hacer un re-build del conentenedor modificado, para ver cambios efectuados.
El primer paso antes de levantar nuestro entorno es crear una key de seguridad con ssh-keygen, no te preocupes, lo explico todo en SSH. Ahora que ya tienes tu key-ssh, continúa las indicaciones.
Ir al raíz de nuestro dockbox una vex descargado y ejecutar
$ docker-compose up -d mysql apache2
Puedes combinar según tu necesidad los siguientes contenedores: apache2
, nginx
, mysql
, mssql
, postgres
,
postgres-postgis
, mariadb
, mongo
, phpmyadmin
, pgadmin
, redis
, elasticsearch
, rabbitmq
, jenkins
,
jira
, php-worker
, beanstalkd
, beanstalkd-console
, kibana
$ docker-compose up -d apache2 postgres redis elasticsearch
Ingresa el contenedor servidor
, para ejecutar comandos como (Symfony, Node, Composer, PHPUnit, Gulp, ...)
docker-compose exec servidor bash
o
ssh [email protected] -p 2222
Nota: Puedes agregar --user=desarrollador para que los archivos se creen como el usuario del host.
Ejemplo:
docker-compose exec --user=desarrollador servidor bash
Puede cambiar las variables PUID (identificador de usuario) y PGID (identificador de grupo) desde el archivo .env)
Ya tenemos nuestro entorno de desarrollo ya está creado y levantado, pero la pregunta es ¿de qué disponemos en los contenedores para desarrollar?.
Servidor
A nivel global en el contenedor encontrarás:
- Php 5.6, 7.0, 7.1
- Php cli
- Composer
- PhpUnit 5.7
- Codecept
- Deployer
- Git
- Symfony
- Laravel
- Yii 2 (debe instalar yiisoft con el token)
- NodeJs
- Less
- Sass
- Webpack
- TypeScript
- V8JS
- XDebug
- Curl
- Json
- Mbstring
- Sqlite3
- Vim
- Yarn
- Nano
- Ruby
- Pear
PHP
- Php 5.6, 7.0, 7.1
- XDebug
- OPCache
- Soap
- Redis
- MongoDb
- Zip
- Bcmath
- Mysqli
- Tokenizer
- GD
- PDO
- PDO Mysql
- PDO Postgres
- Pgsql
- Pear
- Ruby
PHP Compilers
- PHP FPM
- HHVM
PHP Servers
- NGINX
- Apache2
Apche2
NGinx
Mysql
Mongo DB
MARÍA DB
Postgres
Postgis
MSSql Server
Jenkins
Jira
ElasticSearch
Kibana
RabbitMQ
Redis
Memcached
Beanstalkd
Selenium
Ver la documentación e imagenes en el directorio docs
Para hacer la vida más sencilla y no tener que entrar al directorio /var/www/html/dockbox
cada vez que necesites usar los contenedores, he preparado unos alias con los siguientes comandos:
- dockerup = levanta el dockbox con los contenedores
mysql apache2 postgres
por defecto.
Puedes especificar los contenedores ejecutandodockerup mysql redis apache2
- dockerdown = detiene el dockbox y apaga los contenedores.
- dockerrebuild = actualiza el dockbox con la ultima versíon. Elimina contenedores, bases de datos y configuración de proyectos.
Para agregarlos a tus alias ejecuta los siguientes comandos:
Linux
cd /var/www/html/dockbox
touch ~/.aliases_personales && cat server/aliases.sh >> ~/.aliases_personales && source ~/.aliases_personales
touch ~/.aliases_docker && cat docker.sh >> ~/.aliases_docker && source ~/.aliases_docker
echo "source ~/.aliases_personales" >> ~/.bash_aliases
echo "source ~/.aliases_docker" >> ~/.bash_aliases
source ~/.bash_aliases
Mac
cd /var/www/html/dockbox
touch ~/.aliases_personales && cat server/aliases.sh >> ~/.aliases_personales && source ~/.aliases_personales
touch ~/.aliases_docker && cat docker-mac.sh >> ~/.aliases_docker && source ~/.aliases_docker
echo "source ~/.aliases_personales" >> ~/.bash_profile
echo "source ~/.aliases_docker" >> ~/.bash_profile
source ~/.bash_profile
dc
es el alias docker-compose, si realizaste el paso de añadir los alias, entonces puedes ahorrar unos cuantos caracteres. :D
Docker Compose
Comando | Descripción |
---|---|
dc ps | Listar contenedores levantados |
dc stop $(docker ps -q -a) | Detener todos los contenedores activod |
dc rmi -f $(docker images -q) | Eliminar imagenes |
dc rm -f $(docker ps -q -a) | Eliminar contenedores |
Docker
Comando | Descripción |
---|---|
docker ps | Listar contenedores levantados |
docker ps -a | Listar contenedores inactivos |
docker stop $(docker ps -q -a) | Detener todos los contenedores activod |
docker rmi -f $(docker images -q) | Eliminar imagenes |
docker rm -f $(docker ps -q -a) | Eliminar contenedores |
Soluciones a errores comunes SOLUCIÓN DE ERRORES
- 26/10/2017 - Se añade la extensión ZeroMQ a los contenedores Servidor, PHP-FPM.
- 24/08/2017 - Se añade el contenedor Selenium, Beanstalkd, Mencached, Kibana. Actualización de documentación.
- 23/04/2017 - Se añade el contenedor PHP-FPM, PHP-Worker, NGinx, Mssql.
- 13/04/2017 - Se añade el contenedor Jira.
- 15/03/2017 - Se añade el contenedor Rabbitmq.
- 13/03/2017 - Se añade el contenedor Jenkins y documentación.
- 19/02/2017 - Configuración y documentación para realizar backup de Mysql y Postgresql.
- 19/02/2017 - Corrección de persistencia de datos en postgres.
- 11/02/2017 - Corrección de permisos de usuario desarrollador en el contenedor servidor.
- 05/02/2017 - Instalación de librerías Js al contenedor servidor.
Copyright © 2017 Alejandro Sosa. Licencia bajo los terminos MIT license.