Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Asociar un Docker file para tener una imagen personalizada (Apache + PHP + Python) dentro de Docker Compose

Tiempo de lectura: 3 minutos

Continuando con el Post de Desplegar servidor web Apache con PHP utilizando Docker Compose vamos a aprender cómo asociar un Docker File a un contenedor definido en un Docker Compose.

Un Docker File, permite tener una imagen personalizada, incluyendo comandos dentro de una imagen Docker. Esto permite por ejemplo instalar varios entornos en una sola imagen o simplemente configurar nuestra imagen Docker de la forma que queramos.

Vamos a coger el archivo del Post anterior:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
version: "3"
#Indicamos la version docker compose que utilizamos
#Y luego los servicios que vamos a implementar
services:
#Aquí indicamos el nombre que queramos
mi_servicio_apache:
#Imagen de APACHE con PHP
image: php:7.0-apache
container_name: apache-container
volumes:
#Carpeta donde guardaremos los archivos web : carpeta interna de Docker
- ./www/:/var/www/html
expose:
#Puerto que queremos exponer a para poder compartirlo con otros contenedores
- 80
ports:
# Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL)
- 80:80
version: "3" #Indicamos la version docker compose que utilizamos #Y luego los servicios que vamos a implementar services: #Aquí indicamos el nombre que queramos mi_servicio_apache: #Imagen de APACHE con PHP image: php:7.0-apache container_name: apache-container volumes: #Carpeta donde guardaremos los archivos web : carpeta interna de Docker - ./www/:/var/www/html expose: #Puerto que queremos exponer a para poder compartirlo con otros contenedores - 80 ports: # Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL) - 80:80
version: "3"
#Indicamos la version docker compose que utilizamos

#Y luego los servicios que vamos a implementar
services:

#Aquí indicamos el nombre que queramos
  mi_servicio_apache:
    #Imagen de APACHE con PHP
    image: php:7.0-apache
    container_name: apache-container
    volumes:
      #Carpeta donde guardaremos los archivos web : carpeta interna de Docker
      - ./www/:/var/www/html
    expose:
      #Puerto que queremos exponer a para poder compartirlo con otros contenedores
      - 80
    ports:
      # Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL)
      - 80:80

Vamos a instalar MySQLi para poder utilizarlo dentro de PHP y activar distintos módulos de PHP.

Para ello vamos a crear una nueva carpeta dentro del proyecto, la llamaremos Dockerfile. Dentro de Dockerfile/ vamos a crear el archivo apache_file de forma que quede Dockerfile/apache_file, no hace falta poner extensión a este archivo.

Ahora añadimos lo siguiente en el archivo apache_file

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# syntax=docker/dockerfile:1
FROM php:7.0-apache
# syntax=docker/dockerfile:1 FROM php:7.0-apache
# syntax=docker/dockerfile:1
FROM php:7.0-apache

Comenzamos incluyendo la configuración de sintaxis utilizada. Después añadimos la imagen Docker sobre la que queremos instalar nuestro entorno, en este caso utilizamos el que habíamos indicado en nuestro Docker Compose image: php:7.0-apache y lo añadimos de esta forma

FROM php:7.0-apache
FROM php:7.0-apache.

Ahora continuamos indicando que queremos instalar MySQLi y activar los módulos de PHP header y rewrite para poder utilizar .htaccess.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# syntax=docker/dockerfile:1
FROM php:7.0-apache
#Instala mysqli
RUN docker-php-ext-install mysqli
#Activar modulos de apache:
RUN a2enmod headers
RUN a2enmod rewrite
#Reiniciar Apache
RUN /etc/init.d/apache2 restart
# syntax=docker/dockerfile:1 FROM php:7.0-apache #Instala mysqli RUN docker-php-ext-install mysqli #Activar modulos de apache: RUN a2enmod headers RUN a2enmod rewrite #Reiniciar Apache RUN /etc/init.d/apache2 restart
# syntax=docker/dockerfile:1
FROM php:7.0-apache

#Instala mysqli
RUN docker-php-ext-install mysqli

#Activar modulos de apache:
RUN a2enmod headers
RUN a2enmod rewrite

#Reiniciar Apache
RUN /etc/init.d/apache2 restart

Como puedes observar, si queremos ejecutar un comando Bash dentro del Docker File tenemos que poner RUN seguido del comando que queremos ejecutar.

Y ahora, por ejemplo, podemos instalar también Python en nuestra imagen Docker

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# syntax=docker/dockerfile:1
FROM php:7.0-apache
#Instala mysqli
RUN docker-php-ext-install mysqli
#Activar modulos de apache:
RUN a2enmod headers
RUN a2enmod rewrite
#Reiniciar Apache
RUN /etc/init.d/apache2 restart
#INSTALAR PYTHON:
RUN apt update
RUN apt install -y python-pip
# syntax=docker/dockerfile:1 FROM php:7.0-apache #Instala mysqli RUN docker-php-ext-install mysqli #Activar modulos de apache: RUN a2enmod headers RUN a2enmod rewrite #Reiniciar Apache RUN /etc/init.d/apache2 restart #INSTALAR PYTHON: RUN apt update RUN apt install -y python-pip
# syntax=docker/dockerfile:1
FROM php:7.0-apache

#Instala mysqli
RUN docker-php-ext-install mysqli

#Activar modulos de apache:
RUN a2enmod headers
RUN a2enmod rewrite

#Reiniciar Apache
RUN /etc/init.d/apache2 restart

#INSTALAR PYTHON:
RUN apt update
RUN apt install -y python-pip

Como veis es sencillo añadir nuevos entornos o configuraciones a una imagen Docker.

Ahora ya solo nos queda asociar este archivo al Docker Compose. Para ello vamos a modificar algunas cosas hasta dejar el archivo docker-compose.yml de la siguiente manera

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
version: "3"
#Indicamos la version docker compose que utilizamos
#Y luego los servicios que vamos a implementar
services:
#Aquí indicamos el nombre que queramos
mi_servicio_apache:
#Indicamos la carpeta donde guardamos el Docker File
build:
context: ./Dockerfile
#Indicamos el archivo dockerfile de este contenedor
dockerfile: apache_file
#Eliminamos esta línea que se sustituye por el dockerfile
#image: php:7.0-apache
container_name: apache-container
volumes:
#Carpeta donde guardaremos los archivos web : carpeta interna de Docker
- ./www/:/var/www/html
expose:
#Puerto que queremos exponer a para poder compartirlo con otros contenedores
- 80
ports:
# Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL)
- 80:80
version: "3" #Indicamos la version docker compose que utilizamos #Y luego los servicios que vamos a implementar services: #Aquí indicamos el nombre que queramos mi_servicio_apache: #Indicamos la carpeta donde guardamos el Docker File build: context: ./Dockerfile #Indicamos el archivo dockerfile de este contenedor dockerfile: apache_file #Eliminamos esta línea que se sustituye por el dockerfile #image: php:7.0-apache container_name: apache-container volumes: #Carpeta donde guardaremos los archivos web : carpeta interna de Docker - ./www/:/var/www/html expose: #Puerto que queremos exponer a para poder compartirlo con otros contenedores - 80 ports: # Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL) - 80:80
version: "3"
#Indicamos la version docker compose que utilizamos

#Y luego los servicios que vamos a implementar
services:

#Aquí indicamos el nombre que queramos
  mi_servicio_apache:
    #Indicamos la carpeta donde guardamos el Docker File
    build: 
      context: ./Dockerfile
      #Indicamos el archivo dockerfile de este contenedor
      dockerfile: apache_file
    #Eliminamos esta línea que se sustituye por el dockerfile
    #image: php:7.0-apache
    container_name: apache-container
    volumes:
      #Carpeta donde guardaremos los archivos web : carpeta interna de Docker
      - ./www/:/var/www/html
    expose:
      #Puerto que queremos exponer a para poder compartirlo con otros contenedores
      - 80
    ports:
      # Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL)
      - 80:80

En este caso eliminamos la línea #image: php:7.0-apache qué definía nuestra imagen y asociamos el archivo Dockerfile añadiendo el build.

De esta manera primero va a crear la imagen y ejecutar los comandos.

Aquí os dejo el código para poder descargarlo desde GitHub

0

4 comentarios en «Asociar un Docker file para tener una imagen personalizada (Apache + PHP + Python) dentro de Docker Compose»

Deja un comentario