Cómo crear una pila de lámparas basada en Docker utilizando Docker-Compose en Ubuntu 18.04 Bionic Beaver Linux
- 4483
- 182
- Carmen Casillas
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 desudo
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
- « Cómo instalar Discord en Ubuntu 18.04 Bionic Beaver Linux
- Cómo restablecer la contraseña de Root MySQL en Ubuntu 18.04 Bionic Beaver Linux »