Cómo iniciar contenedores con Docker Compose

Cómo iniciar contenedores con Docker Compose

Este artículo presentará Docker Compose y mostrará cómo ponerlo a funcionar para sus necesidades. Lo instalaremos, escribiremos un archivo de composición simple y iniciaremos el contenedor.

Luego veremos cómo iniciar múltiples contenedores. Luego veremos cómo crear imágenes y últimamente cómo usar múltiples archivos de composición para iniciar contenedores en diferentes entornos, como el desarrollo y la producción, por ejemplo.

En este tutorial aprenderás:

  • Cómo instalar Docker Compose
  • Cómo escribir un archivo de composición simple
  • Cómo ejecutar los comandos Docker-Compose para iniciar y detener contenedores
  • Cómo iniciar múltiples contenedores
  • Cómo construir imágenes con Docker Compose
  • Cómo anular el uso de múltiples archivos de composición de Docker
Phpmyadmin.

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Ubuntu 18.04
Software Docker componer
Otro Acceso privilegiado a su sistema Linux como root o a través del sudo dominio.
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un 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

Introducción



Hasta ahora hemos visto cómo Docker es ideal para administrar imágenes y iniciar contenedores. Pero con frecuencia las aplicaciones requieren que diferentes contenedores estén activos y se comuniquen entre sí. Conectarlos a través de la red, haciéndolos compartir volúmenes de disco, y las variables de entorno de aprobación pueden convertirse fácilmente en una secuencia de comandos que son difíciles de documentar y mantener con el tiempo. Entre Docker Compose. Comencemos a instalarlo y luego escribamos el archivo de composición.

Instalación de Docker Compose

En Ubuntu 18.04 La instalación del compositor de Docker es sencillo:

# APT Instalar Docker-Compose 

Para probarlo está instalado, puede verificar su versión:

$ Docker-compose -V Docker-Compose Versión 1.17.1, construye desconocido 

Las versiones de Docker Engine y Docker Compose son importantes ya que sus lanzamientos son frecuentes y las características se agregan y eliminan. La versión que se muestra arriba (1.17.1) fue lanzado en noviembre de 2017. Si necesita una versión más nueva, puede habilitar el repositorio de universo de Ubuntu y obtener un paquete más nuevo, o incluso descargar e instalar la última versión directamente desde el sitio web de Docker Compose:

# curl -l "https: // github.com/docker/compose/comunes/descargar/1.23.2/Docker-Compose-$ (uname -s)-$ (uname -m) "-o/usr/local/bin/docker-composa # sudo chmod +x/usr/local/bin/docker-composo 


El archivo de composición de Docker

Docker Compose lee un archivo YAML, que generalmente se nombra compuesto de acopolador.YML.

Versión: "3" Servicios: Apache: Imagen: Php: 7.3 -apache contenedor_name: puertos 'apache': - "80:80" Volúmenes: - ./www:/var/www/html 
Copiar

Al principio, la versión de sintaxis se informa como 3. A continuación, en la sección Servicios, solo se especifica un contenedor (Apache) y las etiquetas imagen, contenedor_name, puerto, y volúmenes se usan para describir cómo se ejecutará.

Ahora crea un directorio nombrado www y dejar esto índice.html Archivo en el interior.

  Hola   

A continuación, para probar el PHP está funcionando, simplemente suelte este archivo dentro www.

 


Docker Compose Commands

El arriba El comando se encargará de todo: descargue las imágenes de Docker Hub si aún no existen en el caché local, cree imágenes personalizadas (que no es el caso; cubriremos esa sección en la próxima) e iniciaremos los contenedores.

$ Docker -Compose Up -d 

El -d Switch instruye a Docker Compose para ejecutar contenedores en segundo plano. En caso de que se use otro nombre de archivo, en lugar de compuesto de acopolador.YML, se puede informar con -F.

Observe que el comando de lanzamiento es mucho más simple de lo que es estibador correr contraparte. Tiene dos ventajas más: no cambia independientemente del contenido del archivo de composición, y si el archivo de composición especifica más de un contenedor, todos se iniciarán. Solo para comparación, el comando Docker Run sería:

$ docker run -d --name = 'apache -alone' -p 80:80 -v $ pwd/www:/var/www/html php: 7.3-apache 

Debido a que la sintaxis del archivo de composición es YAML, la sangría es importante. Si recibe errores de sintaxis, verifique la sintaxis Yaml con un analizador en línea, como este.

Puede verificar que el contenedor se esté ejecutando.

$ Docker PS PS Comando de imagen de ID de contenedor Nombres de puertos de estado creados 3937D997E029 Php: 7.3-apache "Docker-php-entrypoi ..." Hace 8 minutos hasta 8 minutos 0.0.0.0: 80-> 80/TCP Apache 

Ahora acceso http: // localhost en tu navegador preferido y luego http: // localhost/phpinfo.php.



Lanzamiento de múltiples contenedores

Veamos ahora un archivo de composición más complejo. Imaginemos que vamos a configurar un entorno local para desarrollar una aplicación de lámpara. Necesitamos un contenedor con Apache y PHP, otro contenedor con MySQL, y posiblemente un contenedor de PhpMyadmin para interactuar con MySQL. El compuesto de acopolador.YML será:

Versión: "3" Servicios: Apache: Imagen: Php: 7.3 -apache Container_name: 'Apache' reiniciar: 'siempre' puertos: - "80:80" - "443: 443" Volúmenes: - ./www:/var/www/html - ./PHP/PHP.ini:/usr/local/etc/php/php.ini - ./sitios-habilitado:/etc/apache2/sites-habilitado-apache-logs:/var/log/apache2 mysql: imagen: mariadb: 10.4 Container_name: 'mySQL' reiniciar: 'siempre' volúmenes: - mysql-data:/var/lib/mysql entorno: mysql_root_password: somepassword mysql_database: db_site mysql_user: user mysql_password: contraseña phpmyadmin: image: phpmyadmin/phpmin.8 Container_name: 'PhpMyadmin' Environment: PMA_HOST: MySQL PMA_PORT: 3306 Puertos:-'8080: 80' Volúmenes: Apache-Logs: MySQL-Data: 
Copiar

Este archivo de composición está lanzando tres contenedores, cada uno tiene una sección en Servicios. Observe que estamos definiendo algunas variables de entorno bajo ambiente. El reiniciar: siempre La definición es instruir a Docker que inicie los contenedores automáticamente cuando se inicia el servicio Docker (en caso de un reinicio, por ejemplo).

El comando para iniciar los tres contenedores es el mismo que en el ejemplo simple anterior. Fácil de recordar, correcto?

$ Docker -Compose Up -d 

Verifique que se creen los contenedores.



$ Docker PS Comando de imagen de ID de contenedor creado Puertos de estado Nombres F76ECE3508FE PHPMYAdmin/PhPMyAdmin: 4.8 "/correr.SH Supervisord ... "Hace 20 segundos más arriba 4 segundos 9000/TCP, 0.0.0.0: 8080-> 80/tcp phpmyadmin 69b1b5054f3d mariadb: 10.4 "Docker-EntryPoint.S ... "Hace 20 segundos hasta 6 segundos 3306/TCP MySQL 6747D7580DAC PHP: 7.3-apache "Docker-php-entrypoi ..." Hace 2 días hasta 14 segundos 0.0.0.0: 80-> 80/tcp, 0.0.0.0: 443-> 443/TCP Apache 
Copiar

Es interesante notar que los contenedores pueden comunicarse a través de sus nombres y acceder a los puertos del otro sin la necesidad de exponer sus puertos al anfitrión. Por ejemplo, no exponemos el puerto 3306 del servicio MySQL (como se puede ver en la salida anterior), pero PhpMyadmin puede acceder a este puerto. Para acceder a phpmyadmin, vaya a http: // localhost: 8080 e inicie sesión con el usuario y la contraseña definidos en el servicio MySQL (usuario / contraseña).

Construir imágenes con Docker Compose

Si necesita construir una imagen, en lugar de usar una existente, simplemente agregue un construir etiqueta. En el ejemplo a continuación, le estamos diciendo a Docker componiendo que busque el directorio actual para un Dockerfile. La etiqueta de la imagen se usará para nombrar la nueva imagen.

Versión: "3" Servicios: Apache: Build: . Imagen: My-Image-Name Container_name: 'Apache' reiniciar: 'siempre' puertos:-"80:80" 
Copiar

Anular el uso de múltiples archivos de composición de Docker

Docker Compose facilita la personalización del lanzamiento de contenedores para diferentes entornos. Solo necesita crear los archivos de anulación llamados y iniciar los contenedores que especifican. Sobrescribirán definiciones anteriores hechas en el archivo de composición base.

Por ejemplo, creemos un archivo de anulación llamado perseguidor.YML y defina una contraseña diferente para mysql.

Versión: "3" Servicios: MySQL: Environment: MySQL_ROOT_PASSWORD: SomePassword_other MySQL_DATABASE: DB_SITE_OTHER MYSQL_USER: user_other mysql_password: contraseña_other 
Copiar

Puedes usar otro host para iniciar los contenedores. Si está utilizando el mismo host, es necesario eliminar el contenedor MySQL y su volumen asociado. De lo contrario, se utilizará el contenedor existente con las credenciales antiguas.

$ Docker Stop MySQL $ Docker RM MySQL $ Docker Volumen LS $ Docker Volumen RM Directory_Mysql-Data 

Y luego puede ejecutar el comando a continuación. Es importante mantener el orden de los archivos. Se pueden usar varios archivos. En nuestro ejemplo, solo el ambiente Sección de mysql El servicio será anulado.

$ Docker-compose -f Docker-Compose.YML -F Docker-Compose-Prod.yml up -d 

Después de verificar que los contenedores se ejecutan, intente acceder a phpmyadmin utilizando las nuevas credenciales.

Conclusión

Este artículo presentó Docker Compose, una herramienta útil para orquestar el lanzamiento de múltiples contenedores en el mismo host. Hay muchas posibilidades y leer el manual de Docker Compose es muy recomendable. En los próximos artículos, vamos a explorar formas de orquestar contenedores Docker entre múltiples anfitriones.

Más en esta serie de artículos de Docker

  • Una introducción práctica a los contenedores Docker
  • Cómo interactuar con los contenedores Docker
  • Cómo personalizar las imágenes de Docker con DockerFiles

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cómo crear una pila de lámparas basada en Docker usando Docker en ..
  • Mastering Bash Script Loops
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cosas para instalar en Ubuntu 22.04
  • Cómo instalar Debian en un contenedor de Luks existente
  • Cómo instalar y configurar Ghost CMS en Ubuntu
  • Tutorial de depuración de GDB para principiantes