Cómo implementar una aplicación PHP usando Docker-compose

Docker es un programa de software que se utiliza para la virtualización a nivel del sistema operativo. También se llama contenedorización. Las aplicaciones PHP están compuestas principalmente por un servidor web, un intérprete de idiomas y un DBMS (base de datos). En este tutorial usaremos una pila PHP completa usando Docker. Orquestaremos contenedores para Nginx (el servidor web), MySQL (sistema de base de datos) y el propio lenguaje PHP.


Para este tutorial crearemos una aplicación simple que toma una lista de ciudades de la base de datos y la muestra en la página web. Esto ayudará a comprender y demostrar el funcionamiento completo.

Prerrequisitos

  • Docker CE instalado
  • Mínimo conocimiento práctico de Docker
  • Conocimiento sobre contenedorización

Paso 1: configurar el entorno de trabajo

Una aplicación básica basada en docker está compuesta por múltiples contenedores. Es difícil administrar todo esto manualmente. Para resolver este problema, usamos docker-compose, ayuda a administrar múltiples contenedores usando un archivo de configuración.

Use los siguientes comandos para instalar docker-compose

$ curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- componer
chmod + x / usr / local / bin / docker-compose

Crearemos una carpeta para guardar todos los archivos aquí. Luego cd en él y será utilizado como nuestro directorio de trabajo.

$ Mkdir ~ / docker
$ Cd ~ / docker

Cree más carpetas con este comando

Aplicación $ mkdir php nginx

En la carpeta php tendremos nuestra imagen php personalizada, ngnix tendrá una imagen ngix personalizada y la carpeta de la aplicación tendrá código fuente y archivos de configuración.

Paso 2: configurar el contenedor PHP

Usaremos php-fpm para conectarnos al servidor web Nginx. Dentro de la carpeta php, cree un archivo llamado Dockerfile y coloque los siguientes contenidos en él.

DESDE php: 7.1-fpm-alpine3.4
Ejecutar actualización de apk – sin caché
&& apk add – sin caché $ PHPIZE_DEPS
&& apk add – no-cache mysql-dev
&& docker-php-ext-install pdo pdo_mysql

Estamos usando la versión Alpine aquí. Alpine es una pequeña distribución que se dirige a los contenedores..

$ Docker build -t nombre-php php /

Como se mencionó anteriormente sobre el archivo de configuración yml docker-compose, creemos el archivo

$ Touch app / docker-compose.yml

Ponga las siguientes configuraciones en el archivo

versión 2′
servicios:
php:
imagen: vultr-php
volúmenes:
-./: / app
working_dir: / app

Version es la versión de docker-compose.yml que se usa aquí. Tenga en cuenta que cada servicio tiene una clave específica dentro del bloque de servicios. El nombre especificado aquí se utilizará para hacer referencia a este contenedor específico más adelante. También definimos un mapeo de volumen.

volúmenes:
– ./: / app

Esto le dice a docker-compose que asigne el directorio actual (./) al directorio / app dentro del contenedor. La última línea se asegurará de que los comandos se ejecutarán desde esta carpeta, es decir ./app

Orquesta los contenedores con los siguientes comandos

$ Cd ~ / docker / app
$ Docker-compose up -d

Para comprobar que el contenedor php se ejecutó. Use el siguiente comando:

$ Docker ps

Paso 3: ejecutar comandos dentro del contenedor

Usa el siguiente comando docker-compose, asegúrate de que todavía estás dentro de la carpeta de la aplicación.

$ Docker-compose exec [servicio] [comando]

El marcador de posición de servicio se refiere a la clave de servicio.

Ejecute el siguiente comando en docker-compose para verificar la versión de php.

$ Docker-compose exec php php -v

Verá el siguiente mensaje:

PHP 7.1.14 (cli) (construido: 7 de febrero de 2018 00:40:45) (NTS)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

Paso 4: configurar el contenedor Nginx

Como antes, crearemos una imagen personalizada para Nginx. Usa los siguientes comandos para hacerlo.

$ Cd ~ / docker
$ Touch nginx / Dockerfile

Ponga las siguientes configuraciones en el Dockerfile

DESDE nginx: 1.13.8-alpino
COPY ./default.conf /etc/nginx/conf.d/default.conf

En este archivo Docker simplemente copiamos un archivo de configuración en la configuración de nuestra aplicación.

$ touch nginx / default.conf

Ahora agregue las siguientes configuraciones al archivo

servidor {
listen80 default_server;
escuchar [::]: 80 default_server ipv6only = on;

raíz / aplicación;
index index.php;

#server_name server_domain_or_IP;

ubicación / {
try_files $ uri $ uri / /index.php?$query_string;
}

ubicación ~ .php $ {
try_files $ uri /index.php = 404;
fastcgi_split_path_info ^ (. +. php) (/.+) $;
fastcgi_pass php: 9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
incluir fastcgi_params;
}
}

Internamente, docker-compose crea una red y asigna el nombre del servicio como nombre de host a cada uno de los servicios definidos. Construye la imagen Nginx.

$ Docker build -t nombre-nginx nginx /

Ahora el archivo docker-compose.yml con las siguientes configuraciones:

versión 2′
servicios:
php:
imagen: vultr-php
volúmenes:
-./: / app
working_dir: / app
web:
imagen: vultr-nginx
volúmenes:
-./: / app
depende de:
-php
puertos:
-80:80

Cree un archivo llamado index.php usando el siguiente comando

PS <?php phpinfo ();

Antes de ejecutar estos comandos a continuación, asegúrese de que el puerto 80 esté activo y funcionando

$ Cd ~ / docker / app
$ Docker-compose up -d

Paso 5: Configuración del contenedor MySQL

Actualice el archivo ~ / docker / app / docker-compose.yml usando las siguientes configuraciones

versión 2′
servicios:
php:
imagen: nombre-php
volúmenes:
-./: / app
working_dir: / app
web:
imagen: nombre-nginx
volúmenes:
-./: / app
depende de:
-php
puertos:
-80:80
mysql:
imagen: mysql: 5.7.21
volúmenes:
-./: / app
– dbdata: / var / lib / mysql
medio ambiente:
-MYSQL_DATABASE = mundo
-MYSQL_ROOT_PASSWORD = root
working_dir: / app
volúmenes:
dbdata:

Ahora descarguemos la base de datos MySQL de muestra usando el siguiente comando dentro de la carpeta de la aplicación

$ Curl -L http://downloads.mysql.com/docs/world.sql.gz -o world.sql.gz
$ Gunzip world.sql.gz

Ahora orquesta el contenedor con el siguiente comando

$ Docker-compose up -d

Ahora complete la base de datos mundial

$ Docker-compose exec -T mysql mysql -uroot -proot world < world.sql

Ahora, verifiquemos que los datos se hayan completado correctamente en la base de datos. Para eso acceda al indicador de MySQL en el contenedor. Usa el siguiente comando.

$ Docker-compose exec mysql mysql -uroot -proot world

Dentro del indicador, ejecute la siguiente consulta

seleccione * desde el límite de la ciudad10;

Se mostrará una lista de datos dentro de la base de datos, en este caso ciudades. Salga de la solicitud con el siguiente comando.

mysql> salida

Paso 6: construir una aplicación PHP

Los contenedores se están ejecutando, ahora vamos a crear la aplicación PHP. Vaya al archivo app / index.php y pegue el siguiente código en él.

<?php

$ pdo = nuevo PDO (‘mysql: host = mysql; dbname = world; charset = utf8’, ‘root’, ‘root’);

$ stmt = $ pdo->preparar("
seleccione city.Name, city.District, country.Name como Country, city.Population
De ciudad
izquierda unirse al país en city.CountryCode = country.Code
ordenar por desc desc.
límite 10
");
$ stmt->ejecutar();
$ ciudades = $ stmt->fetchAll (PDO :: FETCH_ASSOC);

?>

Rocas Vultr!

Ciudades más pobladas del mundo

Nombre
País
Distrito
Población

<?phpforeach ($ ciudades como $ ciudad): ?>

<?phpendforeach?>

<?= $ ciudad [‘Nombre’]?><?= $ ciudad [‘País’]?><?= $ ciudad [‘Distrito’]?><?= número_formato ($ ciudad [‘Población’], 0)?>

Ahora, si accede a la dirección IP en su navegador, verá la lista de ciudades más populares. Felicitaciones, ha implementado con éxito una aplicación PHP con Docker.

Echa un vistazo a estos 3 principales servicios de alojamiento en la nube:

FastComet

Precio inicial:
$ 59.95


Fiabilidad
9,7


Precios
9.5


Fácil de usar
9,7


Apoyo
9,7


Caracteristicas
9.6

Leer comentarios

Visita FastComet

Cloudways

Precio inicial:
$ 10.00


Fiabilidad
9.4


Precios
9.2


Fácil de usar
9.2


Apoyo
9.3


Caracteristicas
9.3

Leer comentarios

Visita Cloudways

Hostinger

Precio inicial:
$ 7.45


Fiabilidad
9.3


Precios
9.3


Fácil de usar
9.4


Apoyo
9.4


Caracteristicas
9.2

Leer comentarios

Visita Hostinger

Artículos de procedimientos relacionados

  • Cómo agregar código de seguimiento de Google usando PHP en cPanel
    experto
  • Cómo instalar la pila LEMP (Linux, Nginx, MySQL, PHP) en un Ubuntu 18.04 VPS o servidor dedicado
    intermedio
  • Cómo instalar MediaWiki con PHP 7 en un Ubuntu 18.04 VPS o servidor dedicado
    intermedio
  • Cómo depurar y registrar errores en el sitio de WordPress
    intermedio
  • Cómo cambiar entre versiones de PHP en un Ubuntu 18.04 VPS o servidor dedicado
    intermedio
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me