Creando un entorno de desarrollo con Docker

carlos compains
Oct 23, 2018 · 7 min read

Usando docker-compose

#docker-compose -f docker/dev/docker-compose.yml up
version: '3'
services:
blog:
build: .
ports:
- 81:80
volumes:
- ../../:/var/www
- ../uploads:/media/uploads
command: /usr/sbin/apache2ctl -D FOREGROUND
environment:
- "DATABASE_PASSWORD=12345"
- “DATABASE_USER=mysql_user"
- "DATABASE_HOST=mysql"
- "DATABASE_DB_NAME=site"
mysql:
image: mysql
ports:
- 6603:3306
environment:
MYSQL_ROOT_PASSWORD: "12345"
volumes:
- ../data:/var/lib/mysql

Persistencia de ficheros, los volúmenes

Ejecutar comandos en Docker

Definiendo el entorno

La base de datos

Lanzando el entorno de desarrollo

docker-compose up
docker-compose -f /ruta/a/docker-compose.yml up
docker-compose -f /ruta/a/docker-compose.yml logs
docker-compose -f /ruta/a/docker-compose.yml logs -f
docker-compose -f /ruta/a/docker-compose.yml stop
docker-compose -f /ruta/a/docker-compose.yml down
docker ps
69b34ec43ed1 mysql “docker-entrypoint.s…" 2 seconds ago Up 3 seconds 0.0.0.0:6603->3306/tcp mysql-container
ee022eb58b03 dev_blog “/usr/sbin/apache2ct…" 2 seconds ago Up 2 seconds 0.0.0.0:81->80/tcp blog_app
docker exec -ti ee022eb58b03 bas

El fichero Dockerfile, las dependencias de nuestra aplicación a nivel sistema operativo

FROM ubuntu:xenialENV DEBIAN_FRONTEND noninteractive# Repositorio para poder instalar php7.1
RUN apt-get update -y && apt-get install -y software-properties-common python3-software-properties && \
LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php && \
apt-get update -y
#Fijamos la zona horaria a nivel contendor.
ENV TZ=Europe/Madrid
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Actualización de sistema e instalación de paquetes
RUN apt-get install -y \
git \
imagemagick \
apache2 \
jpegoptim \
php7.1 \
acl \
libapache2-mod-php7.1 \
php7.1-curl \
php7.1-xml \
php7.1-mbstring \
nodejs \
unzip \
npm \
php7.1-gd \
php7.1-intl \
php7.1-xsl \
php7.1-mysql
# Copia de los ficheros de configuración de apache y php
COPY apache/site.conf /etc/apache2/sites-available/site.conf
COPY php/php.ini /etc/php/7.1/apache2/php.ini
# Habilitar el sitio en apache y deshabilitar el que viene por defecto
RUN a2ensite site.conf && \
a2dissite 000-default.conf
# Habilitar los modulos de apache necesarios
RUN a2enmod php7.1 && \
a2enmod rewrite && \
a2enmod actions && \
a2enmod deflate && \
a2enmod expires && \
a2enmod headers && \
a2enmod actions && \
a2enmod proxy
# Instalar los paquete npm necesarios para la aplicación
RUN npm install -g less && \
npm install uglify-js -g && \
npm install uglifycss -g
# Creación de los directorios necesarios para symfony
RUN mkdir -p /var/www/app/cache && \
mkdir -p /var/www/app/logs && \
mkdir -p /media/tmp && \
mkdir -p /media/uploads
# Enlace simbolico de nodejs para Symfony
RUN ln -s /usr/bin/nodejs /usr/bin/node
# Permisos en los directorios
RUN chmod -R 777 /media/tmp && \
chmod -R 777 /media/uploads
RUN chown -R www-data:www-data /media/tmp && \
chown -R www-data:www-data /media/uploads

Conclusiones

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade