Cómo crear una pila de lámparas basada en Docker utilizando Docker-Compose en Ubuntu 18.04 Bionic Beaver Linux

Cómo crear una pila de lámparas basada en Docker utilizando Docker-Compose en Ubuntu 18.04 Bionic Beaver Linux

Objetivo

Después de este tutorial, podrá crear un entorno de lámpara utilizando la tecnología Docker.

Requisitos

  • Permisos de raíz
  • Conocimiento básico de Docker

Convenciones

  • # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz
    directamente como usuario raíz o mediante el uso de sudo dominio
  • ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Otras versiones de este tutorial

Ubuntu 20.04 (fosa focal)

Introducción


Docker es un proyecto de código abierto destinado a proporcionar software en el interior contenedores. Puede pensar en un contenedor como una especie de "paquete", un entorno aislado que comparte el núcleo con la máquina host y contiene todo lo que la aplicación necesita. Todos los contenedores se construyen usando imágenes (El repositorio de imágenes centrales para ellos es Dockerhub).

En este tutorial, veremos cómo crear una pila de lámparas basada en componentes dockerizados: siguiendo la filosofía de "un servicio por contenedor", ensamblaremos el entorno utilizando compuesto de acopolador, Una herramienta para orquestar composiciones de contenedores.

Un servicio versus servicio múltiple para contenedor

Hay varias ventajas en el uso de un servicio por contenedor, en lugar de ejecutar múltiples servicios en el mismo. Modularidad, por ejemplo, (podemos reutilizar un contenedor para diferentes propósitos), o una mejor capacidad de mantenimiento: es más fácil centrarse en una pieza específica de un entorno en lugar de considerarlos a todos a la vez. Si queremos respetar esta filosofía, debemos crear un contenedor para cada componente de nuestra pila de lámparas: uno para Apache-PHP y otro para la base de datos. Los diferentes contenedores deben poder hablar entre sí: para orquestar fácilmente los contenedores vinculados usaremos compuesto de acopolador.

Pasos preliminares

Antes de continuar necesitamos instalar estibador y compuesto de acopolador En nuestro sistema:

# apt-get install Docker Docker-Compose

Los paquetes se instalarán en unos segundos y el estibador El servicio se iniciará automáticamente. Ahora podemos proceder a crear un directorio para nuestro proyecto y dentro de él, otro para sostener las páginas que serán atendidas por Apache. DocumentRoot sería un nombre significativo para ello; En este caso, la única página que se servirá es índice.php:

$ mkdir -p dockerized-lamp/documentroot $ echo ""> Dockerized-Lamp/DocumentRoot/Index.php 
Copiar

Aquí nuestro código consiste simplemente en el phpinfo Función: su salida (una página que muestra información sobre PHP, en caso de que no lo sepa) será lo que nuestro servidor mostrará de forma predeterminada. Ahora usemos nuestro editor favorito para crear el compuesto de acopolador.YML Archivo para nuestro proyecto.



Php-apache

Ahora podemos comenzar a proporcionar instrucciones sobre la construcción y la conexión de nuestros contenedores en el archivo Docker-Compose. Este es un archivo que usa el yaml sintaxis. Todas las definiciones deben proporcionarse en el servicios sección.

Versión: '3' Servicios: PHP-Apache: Imagen: Php: 7.2.Puertos de 1 -apache: - 80:80 volúmenes: - ./Documentroot:/var/www/html enlaces: - 'mariadb' 
Copiar

Echemos un vistazo a lo que acabamos de hacer aquí. La primera línea que insertamos en el archivo, versión, Especifica qué versión de sintaxis de Docker-Compose que vamos a usar, en este caso la versión 3, la última versión principal disponible. Dentro de servicios Sección, comenzamos a describir nuestro servicio especificando su nombre, php-apache (un nombre arbitrario, puede usar lo que desee), luego las instrucciones para construirlo.

El imagen Palabra clave le permite a Docker saber qué imagen queremos usar para construir nuestro contenedor: en este caso utilicé 7.2.1-apache que nos proporcionará PHP 7.2.1 junto con el servidor web Apache. Necesito otra versión de PHP? Solo necesita elegir entre los muchos proporcionados en la página de la imagen en Dockerhub.

La segunda instrucción que proporcionamos es puerto: Le estamos diciendo a Docker que mapee el puerto 80 en nuestro anfitrión, al puerto 80 En el contenedor: de esta manera aparecerá a medida que ejecutamos el servidor web directamente en nuestro sistema.

Luego usamos el volúmenes instrucción para especificar un montar atar. Dado que durante el desarrollo, el código cambia mucho y rápido, no habría sentido colocar el código directamente dentro de un contenedor: de esta manera debemos reconstruirlo cada vez que hacemos algunas modificaciones. En cambio, lo que vamos a hacer es decirle a Docker que se mete Bind-Mount el Raiz del documento directorio, en /var/www/html Dentro del contenedor. Este directorio representa el apache principal Anfitrión virtual ROOT DEL DOCUMENTO, por lo tanto, el código que ponemos dentro, estará disponible de inmediato.

Finalmente usamos el enlace Palabra clave especificando mariada Como su argumento. Esta palabra clave no es necesario, como puede parecer, crear una conexión entre los dos contenedores: incluso sin especificarla, el mariada El servicio se podía acceder desde el interior del contenedor construido para el apache-php servicio, utilizando su nombre como nombre de host. La palabra clave hace dos cosas: primero vamos opcionalmente especificar un alias Podemos usar para hacer referencia a un servicio además de su nombre. Entonces, por ejemplo, escribiendo:

Enlace: MariadB: Servicio de bases de datos 
Copiar

El servicio también se puede llegar a usar servicio de datos. La segunda cosa enlace lo hace, se especifica una dependencia: en este caso el php-apache el servicio se considerará dependiente del mariada uno, por lo que este último se iniciará antes del primero al construir o comenzar el medio ambiente.



Instalar extensiones PHP

El PHP-Aapache Dockerfile predeterminado no incluye algunas extensiones de PHP, como MySQLI o PDO. Para instalarlos tenemos que construir nuestro propio Dockerfile, según ello. Para hacer eso, creamos un directorio dentro de nuestro proyecto llamado PHP-Apache (este será nuestro Contexto de construcción) y dentro de él, nuestro Dockerfile. Pegue y guarde el código a continuación como PHP-Apache/DockerFile:

 De PHP: 7.2.1-apache mantenedor egidio Docile ejecutar docker-php-extinstall PDO PDO_MYSQL MySQLI 
Copiar

Como puede ver, con el DE Instrucción, especificamos que este DockerFile debe basarse en el predeterminado. Entonces incluimos un CORRER Instrucción: Uso del script proporcionado en la imagen en sí, Docker-Php-Extinstall, Incluimos las extensiones necesarias para usar PDO y MySqli. En este punto, si queremos usar nuestro DockerFile personalizado, tenemos que cambiar ligeramente la sección PHP-A-A-APACHE en nuestro Docker-Compose.yml, de esta manera:

Versión: '3' Servicios: PHP-APACHE: Build: Context: ./Puertos PHP -APACHE: - 80:80 Volúmenes: - ./Documentroot:/var/www/html enlaces: - 'mariadb' 
Copiar

Que ha cambiado? En lugar de especificar directamente la imagen remota para usar, proporcionamos el contexto instrucción, dentro del construir La sección, de modo que el DockerFile contenido en el directorio que creamos y aquí se proporciona como argumento, se usará automáticamente. El directorio de contexto es importado por Docker Daemon al construir la imagen, por lo que si queremos agregar archivos adicionales tenemos que colocarlos allí también allí.

El servicio de la base de datos

Una base de datos en una parte esencial de un entorno de lámpara, se utiliza para la persistencia. En este caso vamos a usar mariada:

mariadb: imagen: mariadb: 10.1 volúmenes: - mariadb:/var/lib/mysql entorno: tz: "europe/rome" mysql_allow_empty_password: "no" mysql_root_password: "rootpwd" mysql_user: 'testUser' mysql_password: 'testpassword' mysql_database: 'testdb' 
Copiar

Ya sabemos lo que el imagen La palabra clave es para. Lo mismo ocurre con el volúmenes instrucción, excepto por el hecho de que esta vez no declaramos un montar atar, En cambio, hicimos referencia a un Volumen llamado, por persistencia. Es importante centrarse en la diferencia entre los dos por un momento.

Como se dijo antes, un montar atar es una forma rápida de montar un directorio de host dentro de un contenedor, de modo que los archivos contenidos en dicho directorio sean accesibles desde el interior del entorno restringido: especificar un montaje de enlace, el sintaxis corta es:

:

La ruta del host puede ser un pariente (al archivo Docker-Compose) o una ruta absoluta, mientras que el punto de montaje dentro del contenedor debe especificarse en forma absoluta.

A Volumen llamado es algo diferente: es un apropiado volumen de acopolador Utilizado para la persistencia, y generalmente se debe preferir sobre un montaje de enlace, porque no depende de la estructura del archivo de host (una de las muchas ventajas de los contenedores es su portabilidad). La sintaxis para usar para hacer referencia a un Volumen llamado Dentro de una definición de servicio es:

:

A Volumen llamado El ciclo de vida es independiente del de un contenedor que lo usa, y debe declararse en el volúmenes Sección del archivo Docker-Compose, como veremos en un momento.

Volver a la definición del servicio ahora. La última palabra clave que usamos es ambiente: nos permite establecer algunas variables de entorno que influirán en el comportamiento del servicio. Primero usamos Tz Para especificar nuestra zona horaria de la base de datos: en este caso utilicé "Europa/Roma". Los nombres de las otras variables dicen todo sobre su propósito: al usarlas, establecemos detalles importantes como el nombre de la base de datos predeterminada que se creará (TestDB), el usuario que se creará y su contraseña. También establecemos la contraseña del usuario root y decidimos no permitir contraseñas vacías.



La sección Volúmenes

En esta sección debemos declarar el Volumen llamado Referencia a la referencia del mariada Definición del servidor:

Volúmenes: Mariadb: 
Copiar

Al final, así es como nuestro archivo se verá en su totalidad:

Versión: '3' Servicios: PHP-Apache: Imagen: Php: 7.2.Puertos de 1 -apache: - 80:80 volúmenes: - ./Documentroot:/var/www/html: z enlaces: - 'mariadb' mariadb: imagen: mariadb: 10.1 volumes: - mariadb:/var/lib/mysql environment: TZ: "Europe/Rome" MYSQL_ALLOW_EMPTY_PASSWORD: "no" MYSQL_ROOT_PASSWORD: "rootpwd" MYSQL_USER: 'testuser' MYSQL_PASSWORD: 'testpassword' MYSQL_DATABASE: 'testdb' volumes: mariadb: 
Copiar

Es realmente importante respetar la sangría para que el archivo se interprete correctamente.

Construyamos nuestro entorno

Una vez que especificamos todas las instrucciones para nuestros servicios, podemos usar el Docker-compuesto ordenar para construirlos. El comando debe ejecutarse dentro del mismo directorio donde el compuesto de acopolador.YML Se encuentra el archivo:

# Docker-Compose Up

Pocos minutos y estaremos listos para ir. Al final si todo salió bien, navegando a hostil En nuestro host, veremos la salida del script PHP que colocamos dentro Raiz del documento:

Nuestro entorno de lámpara ahora está listo para ser utilizado.

Pensamientos de cierre

Hemos visto cómo crear un básico LÁMPARA entorno, uso de Docker y Orquestación de contenedores y servicios con compuesto de acopolador. La configuración que utilizamos se centra en el desarrollo, y se puede ampliar y ajustar para que coincida con diferentes necesidades: documentación de Docker Es una fuente muy bien escrita que puede consultar para expandir su conocimiento de Docker. No dude en dejar un comentario para cualquier duda o pregunta que tenga.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cómo crear una pila de lámparas basada en Docker usando Docker en ..
  • Ubuntu 20.04 trucos y cosas que quizás no sepas
  • Ubuntu 20.04 Guía
  • Ubuntu 20.04 Hadoop
  • Los 8 mejores entornos de escritorio de Ubuntu (20.04 fosa focal ..
  • Lista e instalación de clientes FTP en Ubuntu 20.04 Linux ..
  • Cómo conectarse al contenedor Docker a través de SSH
  • Cómo instalar la pila de lámparas en Almalinux