Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En DevOps Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

¿Se pregunta qué es Docker Compose?

Docker es la herramienta de contenedorización más popular en el mundo DevOps. Pero, ¿Qué es Docker Compose?

Docker Compose se utiliza para ejecutar aplicaciones que tienen múltiples contenedores utilizando un archivo YAML

Puede haber varios casos en los que la aplicación Docker deba ejecutar múltiples contenedores para diferentes pilas de tecnología. Ahora construir, ejecutar y conectar dockerfiles separados para cada contenedor puede ser una tarea difícil; aquí es donde docker-compose le ayuda

Utilizando un único y sencillo archivo docker-compose.yml, puede construir, conectar y lanzar todos los contenedores ejecutando un único comando. Esto es muy útil para aplicaciones empresariales en producción, donde varias aplicaciones se ejecutan dentro de contenedores. Ahorre mucho tiempo al ejecutar 100s de aplicaciones dentro de contenedores docker con facilidad

Instalación de Docker Compose

Docker ya debe estar instalado en su sistema antes de instalar compose

Ejecute el siguiente comando para instalar docker-compose

geekflare@geekflare:/home/geekflare$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

<x>[sudo]</x> password for geekflare:

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 617 0 617 0 0 1209 0 --:--:--:--:--:--:--:1209

100 11.1M 100 11.1M 0 0 348k 0 0

:

00:32

0

:00:32 --:--:-- 476k

Ejecute el siguiente comando para establecer los permisos de los archivos

geekflare@geekflare:/home/geekflare$ sudo chmod x /usr/local/bin/docker-compose

Compruebe si se ha instalado correctamente, debería devolver la versión de docker-compose

geekflare@geekflare:/home/geekflare$ docker-compose --version

docker-compose versión 1.23.1, build b02f1306

A continuación se muestra la lista de comandos que puede utilizar con docker-compose

geekflare@geekflare:/home/geekflare$ docker-compose

Defina y ejecute aplicaciones multicontenedor con Docker.

Uso:

docker-compose [-f <arg>...] [opciones] [COMANDO] [ARGS...]

docker-compose -h|--help

Opciones:

-f, --file FILE Especifique un archivo de composición alternativo

(por defecto: docker-compose.yml)

-p, --project-name NAME Especifique un nombre de proyecto alternativo

(por defecto: nombre del directorio)

--verbose Mostrar más salida

--log-level NIVEL Establecer el nivel de registro (DEBUG, INFO, ADVERTENCIA, ERROR, CRÍTICO)

--no-ansi No imprimir caracteres de control ANSI

-v, --version Imprimir versión y salir

-H, --host HOST Enchufe demonio al que conectarse


--tls Utilizar TLS; implícito por -tlsverify

--tlscacert CA_PATH Confíe en los certificados firmados sólo por esta CA

--tlscert CLIENT_CERT_PATH Ruta al archivo de certificados TLS

--tlskey TLS_KEY_PATH Ruta al archivo de claves TLS

--tlsverify Utilizar TLS y verificar el remoto

--skip-hostname-check No comprobar el nombre de host del demonio con el nombre

especificado en el certificado del cliente

--project-directory PATH Especificar un directorio de trabajo alternativo

(por defecto: la ruta del archivo Compose)

--compatibility Si se establece, Compose intentará convertir las claves de despliegue

de los archivos v3 a su equivalente no-Swarm

Comandos:

build Construir o reconstruir servicios

bundle Generar un bundle Docker a partir del archivo Compose

config Validar y visualizar el archivo Compose

create Crear servicios

down Detener y eliminar contenedores, redes, imágenes, y volúmenes

events Recibir eventos en tiempo real de los contenedores

exec Ejecutar un comando en un contenedor en ejecución

help Obtener ayuda sobre un comando

images Listar imágenes

kill Matar contenedores

logs Ver la salida de los contenedores

pause Pausar servicios

port Imprimir el puerto público de un enlace de puerto

ps Listar contenedores

pull Extraer imágenes de servicio

push Empujar imágenes de servicio

restart Reiniciar servicios

rm Eliminar contenedores parados

run Ejecutar un comando one-off command

scale Establecer el número de contenedores para un servicio

start Iniciar servicios

stop Detener servicios

top Mostrar los procesos en ejecución

unpause Desactivar servicios

up Crear e iniciar contenedores

version Mostrar la información de la versión de Docker-Compose

Archivo Docker Compose

Aquí tiene un archivo docker-compose de ejemplo que hace toda la magia

version: '3'

services:

web:

build: .

ports:

- "5000:5000"

redis:

image:

"redis

:alpine


La primera línea de este archivo especifica la versión que se está utilizando. Este número depende del motor Docker instalado en su sistema. Yo tengo instalado Docker 18.09.6 que pertenece a la versión 3 de docker-compose. Consulte más detalles sobre las versiones aquí - https://docs.docker.com/compose/compose-file/compose-versioning/

Este archivo docker está ejecutando dos servicios/aplicaciones, web y Redis. El servicio web se construye a través de un dockerfile y se ejecuta en el puerto por defecto del webserver de flask - 5000. El servicio Redis se ejecuta tirando de la imagen Redis del registro docker hub

Para ejecutar el archivo docker-compose.yml, necesita ejecutar un comando muy simple: docker-compose up

Flujo de trabajo de Docker Compose

A continuación se detallan los tres pasos para utilizar docker-compose

  1. Cree un archivo dockerfile de cada servicio
  2. Cree un archivo docker-compose.yml para conectar todos los dockerfiles
  3. Ejecute el comando docker-compose up para iniciar el sistema

Permítame tomar un ejemplo del archivo docker-compose de muestra que vimos anteriormente y mostrarle cómo se creará la estructura del proyecto
mi-app



|-----web


|---------Dockerfile


|-----redis


|docker-compose
.yml

my-app es el directorio principal de mi proyecto. Este directorio tiene los directorios de los servicios web y Redis y el archivo YAML de docker-compose. El archivo Dockerfile del servicio web está presente en el directorio web. Dado que el servicio Redis se está extrayendo del docker hub directamente, no se requiere ningún dockerfile en el directorio Redis. Así es como se ve el flujo de trabajo docker-compose

Conteniendo una aplicación MEAN Stack usando Docker Compose

Ahora que ha entendido los conceptos fundamentales. Permítanme mostrar una demostración de cómo contenerizar una aplicación de pila MEAN utilizando docker-compose

MEAN son las siglas de MongoDBExpress, Angular y Node.js. Las aplicaciones que utilizan estos servicios juntos también se llama una aplicación MEAN/Full-stack

Para esta demo, ejecutaremos tres contenedores docker

  • Contenedor 1 - Angular
  • Contenedor 2 - NodeJS y ExpressJS
  • Contenedor 3 - MongoDB

Descargue la aplicación completa aquí: http://bit.ly/2St7r3A (no probada para producción)

Así es como se ve mi archivo docker-compose.yml para ejecutar estos tres contenedores

versión: '3'

servicios:

angular:

build: angular-client

puertos:

- "4200:4200"

volúmenes:

- ./angular-client/:/var/www/app

express:

build: express-server

puertos:

- "3000:3000"

volúmenes:

- ./express-server/:/var/www/app

enlaces:

- base de datos

base de datos:

imagen: mongo

puertos:

- "27017:27017

  • La primera línea especifica la versión de docker-compose que se está utilizando
  • Estamos ejecutando tres servicios - angular, express y base de datos
  • El servicio angular se construirá utilizando un dockerfile. Se ejecutará en el puerto 4200, y el volumen de la aplicación es /var/www/app
  • El servicio express se construirá utilizando un dockerfile. El servidor express se ejecutará en el puerto 3000, y el volumen es /var/www/app
  • El servicio de base de datos extraerá la imagen MongoDB de dockerhub y la iniciará en el puesto 27017

Extraiga el proyecto en el directorio home y vaya al directorio angular-client

geekflare@geekflare:~$ cd mean

geekflare@geekflare:~/mean$ cd angular-client 

Ejecute el siguiente comando si no tiene instalado el gestor de paquetes node (npm) en su sistema (ignórelo si está instalado)

geekflare@geekflare:~/mean/angular-client$ sudo apt install npm

<x>[sudo]</x> contraseña para geekflare:

Leyendo listas de paquetes... Hecho

Construyendo árbol de dependencias

Leyendo información de estado... Hecho

Se instalarán los siguientes paquetes adicionales:

gyp javascript-common libc-ares2 libhttp-parser2.8 libjs-async libjs-inherits libjs-is-typedarray

libjs-jquery libjs-node-uuid libjs-underscore libssl1.0-dev libuv1 libuv1-dev node-abbrev node-ajv

node-ansi node-ansi-color-table node-ansi-regex node-ansi-styles node-ansistyles node-aproba node-archy

node-are-we-there-yet node-async node-aws-sign2 node-balanced-match node-block-stream node-bluebird

node-boom node-brace-expansion node-builtin-modules node-camelcase node-caseless node-chalk node-cliui

node-clone node-co node-color-convert node-color-name node-combined-stream node-concat-map

node-config-chain node-console-control-strings node-cookie-jar node-copy-concurrently node-core-util-is

node-yallist node-yargs node-yargs-parser nodejs nodejs-dev nodejs-doc

Paquetes sugeridos:

apache2 | lighttpd | httpd node-aws-sign node-oauth-sign node-http-signature debhelper

Se instalarán los siguientes paquetes NUEVOS:

gyp javascript-common libc-ares2 libhttp-parser2.8 libjs-async libjs-inherits libjs-is-typedarray

libjs-jquery libjs-node-uuid libjs-underscore libssl1.0-dev libuv1 libuv1-dev node-abbrev node-ajv

node-ansi node-ansi-color-table node-ansi-regex node-ansi-styles node-ansistyles node-aproba node-archy

node-are-we-there-yet node-async node-aws-sign2 node-balanced-match node-block-stream node-bluebird

0 actualizados, 212 recién instalados, 0 para eliminar y 233 no actualizados.

Necesita obtener 10,5 MB de archivos.

Tras esta operación, se utilizarán 53,6 MB de espacio adicional en disco.

¿Desea continuar? [S/n] S

Get:1 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 gyp all 0.1 20180428git4d467626-1 [237 kB]

Get:2 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 javascript-common all 11 [6,066 B]

Get:3 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 libhttp-parser2.8 amd64 2.8.1-1 [20.8 kB]

Get:4 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libjs-async all 0.8.0-3 [25.4 kB]

Get:5 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libjs-is-typedarray all 1.0.0-2 [2.934 B]

Get:6 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 libjs-jquery all 3.2.1-1 [152 kB]

Get:7 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libjs-node-uuid all 1.4.7-5 [11.5 kB]

Get:8 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 libjs-underscore all 1.8.3~dfsg-1 [59.9 kB]

Get:9 http://us.archive.ubuntu.com/ubuntu cosmic-updates/main amd64 libssl1.0-dev amd64 1.0.2n-1ubuntu6.2 [1.366 kB]

Fetched 10.5 MB in 1min 34s (112 kB/s)

Extrayendo plantillas de paquetes: 100%

Seleccionando paquete gyp previamente no seleccionado.

(Leyendo base de datos ... 180130 archivos y directorios actualmente instalados.)

Preparando para desempaquetar .../000-gyp_0.1 20180428git4d467626-1_all.deb ...

Desempaquetando gyp (0.1 20180428git4d467626-1) ...

Seleccionando el paquete javascript-common previamente no seleccionado.

Preparando el desempaquetado de .../001-javascript-common_11_all.deb ...

Desempaquetando javascript-common (11) ...

Seleccionando el paquete no seleccionado previamente libhttp-parser2.8:amd64.

Preparando para desempaquetar .../002-libhttp-parser2.8_2.8.1-1_amd64.deb ...


Configurando
node-fstream-ignore (0.0.6-2) ...

Configurando node-gyp (3.6.2-2) ...

Configurando node-yargs (10.0.3-2) ...

Configurando npm (5.8.0 ds-2) ...

Procesando triggers para libc-bin (2.28-0ubuntu1) .

.


En el directorio angular-client y ejecute npm install

geekflare@geekflare:~/mean/angular-client$ npm install

> uws@0.14.5 install /home/geekflare/mean/angular-client/node_modules/uws

> node-gyp rebuild > build_log.txt 2>&1 || exit 0

> node-sass@4.7.2 install /home/geekflare/mean/angular-client/node_modules/node-sass

> node scripts/install.js

Descargando binario de https://github.com/sass/node-sass/releases/download/v4.7.2/linux-x64-57_binding.node

Descarga completada ] - :

Binario guardado en /home/geekflare/mean/angular-client/node_modules/node-sass/vendor/linux-x64-57/binding.node

Almacenando binario en /home/geekflare/.npm/node-sass/4.7.2/linux-x64-57_binding.node

> uglifyjs-webpack-plugin@0.4.6 postinstall /home/geekflare/mean/angular-client/node_modules/webpack/node_modules/uglifyjs-webpack-plugin

> node lib/post_install.js

> node-sass@4.7.2 postinstall /home/geekflare/mean/angular-client/node_modules/node-sass

> node scripts/build.js

Binario

found at /home/geekflare/mean/angular-client/node_modules/node-sass/vendor/linux-x64-57/binding.node

Testing binary

Binario

is fine

added 1457 packages from 1250 contributors in 80.009s

Ahora vaya al directorio express y ejecute npm install
geekflare@geekflare:

~/mean/angular-client$ cd ..

geekflare@geekflare:~/mean$ cd express-server/

geekflare@geekflare:~/mean/express-server$ npm install

Ahora que todo está listo, es hora de ejecutar el archivo docker-compose.yml que va a lanzar todos los contenedores docker y ejecutar la aplicación de pila MEAN

geekflare@geekflare:~/mean/express-server$ cd ..

geekflare@geekflare:~/mean$ docker-compose up

Creando la red "mean_default" con el driver por defecto

Construyendo angular

Paso 1/8 : FROM node:8

8: Pulling from library/node

a4d8138d0f6b: Pull complete

dbdc36973392: Pull completo

f59d6d019dd5: Pull completo

aaef3e026258: Pull completo

6e454d3b6c28: Pull completo

c717a7c205aa: Pull completo

37add8e5ac11: Pull completo

0314ab675d31: Pull completo

012886364728: Pull completo

Digest: sha256:310db2abcff097ef44af205d81833282a6d5471002a1b59d7b7459a74152c856

Estado: Downloaded newer image for node:8

--->
 8e45c884a32e

Paso 2/8 : RUN mkdir -p /var/www/app

--->
 Ejecutándose en c70a0cab7994

Eliminando el contenedor intermedio c70a0cab7994

--->
 001c5e840b24

Paso 3/8 : WORKDIR /var/www/app

--->
 Ejecutando en 622ebdc41b2f

Eliminando contenedor intermedio 622ebdc41b2f

--->
 baa2e2347259

Paso 4/8 : COPIAR package.json /var/www/app

--->
 5b97543befab

Paso 5/8 : EJECUTAR npm install

--->
 Ejecutándose en 73e3d8b7a701

> uws@9.14.0 install /var/www/app/node_modules/uws

> node-gyp rebuild > build_log.txt 2>&1 || exit 0

> node-sass@4.12.0 install /var/www/app/node_modules/node-sass

> node scripts/install.js

Descargando binario de https://github.com/sass/node-sass/releases/download/v4.12.0/linux-x64-57_binding.node

Descarga completa

Binario guardado en /var/www/app/node_modules/node-sass/vendor/linux-x64-57/binding.node

Almacenando binario en /root/.npm/node-sass/4.12.0/linux-x64-57_binding.node

> core-js@2.6.9 postinstall /var/www/app/node_modules/core-js

> node scripts/postinstall || echo "ignore"

¡El proyecto necesita su ayuda! Por favor considere apoyar a core-js en Open Collective o Patreon:

> https://opencollective.com/core-js

> https://www.patreon.com/zloirock

> uglifyjs-webpack-plugin@0.4.6 postinstall /var/www/app/node_modules/webpack/node_modules/uglifyjs-webpack-plugin

> node lib/post_install.js

> node-sass@4.12.0 postinstall /var/www/app/node_modules/node-sass

> node scripts/build.js

Binario encontrado en /var/www/app/node_modules/node-sass/vendor/linux-x64-57/binding.node

Probando el binario

El binario está bien

añadido 1606 paquetes de 1329 contribuidores y auditado 15092 paquetes en 112.427s

Eliminando el contenedor intermedio 73e3d8b7a701

--->
 55790d2fae93

Paso 6/8 : COPIAR . /var/www/app

--->
 61537aa487f4

Paso 7/8 : EXPOSE 4200

--->
 Ejecutándose en 632eedc35a45

Eliminando el contenedor intermedio 632eedc35a45

--->
 51e75b0e2ebe

Paso 8/8 : CMD ["npm", "start"]

--->
 Ejecutándose en 36bbb12a0d38

Eliminando contenedor intermedio 36bbb12a0d38

--->
 9f8d61db600c

Construido con éxito 9f8d61db600c

Etiquetado con éxito mean_angular:latest

Extrayendo base de datos (mongo:)...

latest: Extrayendo de library/mongo

35b42117c431: Extracción completada

ad9c569a8d98: Pull completo

293b44f45162: Pull completo

0c175077525d: Pull completo

4e73525b52ba: Pull complete

a22695a3f5e9: Pull complete

c5175bcf2977: Pull completo

3e320da07793: Pull complete

01c6db6b2b5a: Pull complete

3bd6e9d03e78: Pull complete

e03dcf51513f: Pull complete

c1956a9e136a: Pull completo

4c35cf22b1d5: Pull completo

Building express

Paso 1/9 : FROM nodo:8

--->
 8e45c884a32e

Paso 2/9 : EJECUTE mkdir -p /var/www/app

--->
 Usando caché

--->
 001c5e840b24

Paso 3/9 : WORKDIR /var/www/app

--->
 Usando cache

--->
 baa2e2347259

Paso 4/9 : COPIAR package.json /var/www/app

--->
 0232ad53c679

Paso 5/9 : EJECUTE npm install

--->
 Ejecutándose en c309bf6f218e

añadido 128 paquetes de 151 contribuidores y auditado 233 paquetes en 9.055s

Eliminando el contenedor intermedio c309bf6f218e

--->
 49e652884562

Paso 6/9 : EJECUTAR npm install -g nodemon

--->
 Ejecutando en 0ed5d7f3642b

/usr/local/bin/nodemon -> /usr/local/lib/node_modules/nodemon/bin/nodemon.js

> nodemon@1.19.1 postinstall /usr/local/lib/node_modules/nodemon

> node bin/postinstall || exit 0

¿Le gusta nodemon? Ahora puede apoyar el proyecto a través del colectivo abierto:

> https://opencollective.com/nodemon/donate

 nodemon@1.19.1

añadido 221 paquetes de 128 contribuidores en 18.856s

Eliminando el contenedor intermedio 0ed5d7f3642b

--->
 32c55606f35e

Paso 7/9 : COPIAR . /var/www/app

--->
 a618b38a2812

Paso 8/9 : EXPOSE 3000

--->
 Ejecutándose en bea389ab3ef1

Eliminando el contenedor intermedio bea389ab3ef1

--->
 684bbfb31371

Paso 9/9 : CMD ["npm", "start"]

--->
 Ejecutándose en 9aa1b72e4a4e

Eliminando contenedor intermedio 9aa1b72e4a4e

--->
 35dcb3df9806

Construido con éxito 35dcb3df9806

Etiquetado con éxito mean_express:latest

Creando mean_angular_1_de44b3f5b988 ... hecho

Creando mean_database_1_708f8f9c3c33 .. hecho

Creando mean_express_1_b57a483a72ee ... hecho

Adjuntando a mean_angular_1_f257e2233ef1, mean_database_1_ccc5c677e00b, mean_express_1_574f07b045fc

angular_1_f257e2233ef1 |

angular_1_f257e2233ef1 | > my-app@0.0.0 start /var/www/app

angular_1_f257e2233ef1 | > ng serve -H 0.0.0.0

angular_1_f257e2233ef1 |

database_1_ccc5c677e00b | 2019-07-20T22:33:25.933 0000 I CONTROL [ main] Desactivación automática de TLS 1.0, para forzar la activación de TLS 1.0 especifique --sslDisabledProtocols 'none'

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL <x><x><x><x><x><x><x><x><x><x>[initandlisten]</x></x></x></x></x></x></x></x></x></x> MongoDB iniciándose : pid=1 port=27017 dbpath=/data/db 64-bit host=f74b56905249

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [ <x><x><x><x><x><x><x><x><x><x>initandlisten]</x></x></x></x></x></x></x></x></x></x> db version v4.0.10

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [ <x><x><x><x><x><x><x><x><x><x>initandlisten</x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x> versión git: c389e7f69f637f7a1ac3cc9fae843b635f20b766

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [ <x><x><x><x><x><x><x><x><x><x>initandlisten]</x></x></x></x></x></x></x></x></x></x> versión OpenSSL: OpenSSL 1.0.2g 1 Mar 2016

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL <x><x><x><x><x><x><x><x><x><x>[</x></x></x></x></x></x></x></x></x></x> initandlisten] allocator: tcmalloc

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL <x><x><x><x><x><x><x><x><x><x>[initandlisten</x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x> modules: none

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL <x><x><x><x><x><x><x><x><x><x>[initandlisten]</x></x></x></x></x></x></x></x></x></x> build environment:

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL <x><x><x><x><x><x><x><x><x><x>[initandlisten</x></x></x></x></x></x></x></x></x></x> ] distmod: ubuntu1604

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL <x><x><x><x><x><x><x><x><x><x>[initandlisten</x></x></x></x></x></x></x></x></x></x> ] distarch: x86_64

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL <x><x><x><x><x><x><x><x><x><x>[initandlisten</x></x></x></x></x></x></x></x></x></x> <x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x> target_arch: x86_64

database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL <x><x><x><x><x><x><x><x><x><x>[initandlisten</x></x></x></x></x></x></x></x></x></x> ] options: { net: { bindIpAll: true } }

express_1_574f07b045fc |

express_1_574f07b045fc | > express-server@0.0.0 start /var/www/app

express_1_574f07b045fc | > nodemon ./bin/www

express_1_574f07b045fc |

express_1_574f07b045fc | <x><x><x>[nodemon]</x></x></x> 1.19.1

express_1_574f07b045fc | <x><x><x>[nodemon</x></x></x> ] para reiniciar en cualquier momento, introduzca `rs`

express_1_574f07b045fc | <x><x><x>[nodemon]</x></x></x> watching: *.*

express_1_574f07b045fc | [nodemon <x><x><x>]</x></x></x> iniciando `node ./bin/www`

database_1_ccc5c677e00b | 2019-07-20T22:33:33.543 0000 I RED [listener] conexión aceptada desde 172.19.0.4:38958 #1 (1 conexión ahora abierta)

database_1_ccc5c677e00b | 2019-07-20T22:33:33.560 0000 I RED [ conn1] recibidos metadatos de cliente desde 172.19.0.4:38958 conn1: { controlador: { nombre: "nodejs", versión: "3.0.1" }, os: { tipo: "Linux", nombre: "linux", arquitectura: "x64", versión: "4.18.0-25-generic" }, plataforma: "Node.js v8.16.0, LE, mongodb-core: 3.0.1" }

express_1_574f07b045fc | mongodb: conectado

angular_1_f257e2233ef1 | ** NG Live Development Server está escuchando en 0.0.0.0:4200, abra su navegador en http://localhost:4200/ **

angular_1_f257e2233ef1 | Fecha: 2019-07-21T11:21:03.868Z - Hash: 639d9a968476ed482b5c - Time: 336ms

angular_1_f257e2233ef1 | 4 chunks sin cambios

angular_1_f257e2233ef1 | chunk {main} main.bundle.js (main) 19.8 kB <x>[initial]</x> <x>[rendered]</x>

angular_1_f257e2233ef1 |

angular_1_f257e2233ef1 | webpack: Compilado con éxito.

angular_1_f257e2233ef1 | webpack: Compilando...

angular_1_f257e2233ef1 | Date: 2019-07-21T11:25:15.661Z - Hash: e5a2b1c1afe0deb396c3 - Time: 251ms

angular_1_f257e2233ef1 | 4 chunks sin cambios

angular_1_f257e2233ef1 | chunk {main} main.bundle.js (main) 19.8 kB <x>[initial]</x> <x>[rendered]</x>

angular_1_f257e2233ef1 |

angular_1_f257e2233ef1 | webpack: Compilado con éxito

Vaya a su navegador y compruebe https://localhost:4200, su aplicación estará en funcionamiento

angular - docker compose

Vaya a https://localhost:3000 para comprobar si se está ejecutando un servidor express

express - docker compose

También, puede ejecutar el comando docker images para ver que todas las imágenes están presentes en docker

geekflare@geekflare:~/mean$ docker images

REPOSITORIO TAG IMAGEN ID CREADO TAMAÑO

mean_express latest 35dcb3df9806 hace 14 horas 923MB

mean_angular latest 9f8d61db600c hace 14 horas 1.29GB

nodo

8 8e45c884a32e hace 9 días 895MB

mongo latest 785c65f61380 hace 2 semanas 412MB

Ejecute el siguiente comando para ver los contenedores que se ejecutan dentro de docker

geekflare@geekflare:~/mean$ docker ps

ID DE CONTENEDOR IMAGEN ORDEN CREADO ESTADO PORTO NOMBRES

681c9c34bee2 mean_express "docker-entrypoint.s..." 14 hours ago Up 14 hours 0.0.0.0:3000->3000/tcp mean_express_1_574f07b045fc

f74b56905249 mongo "docker-entrypoint.s..." Hace 14 horas Arriba 14 horas 0.0.0.0:27017->27017/tcp mean_database_1_ccc5c677e00b

260ef1e52dab mean_angular "docker-entrypoint.s..." Hace 14 horas Arriba 14 horas 0.0.0.0:4200->4200/tcp mean_angular_1_f257e2233ef1

Así que ahora, los tres contenedores docker están en marcha y funcionando

Docker-compose se encargó de ejecutar todos los contenedores con facilidad. Este fue un ejemplo simple para ejecutar tres contenedores; se puede imaginar lo útil que será si las aplicaciones tienen que ser lanzadas en 100s de contenedores. Siga adelante y pruebe para ver cómo funciona.

  • Avi
    Autor
    Avi es un entusiasta de la tecnología con experiencia en tecnologías de tendencia como DevOps, Cloud Computing, Big Data y muchas más. Le apasiona aprender tecnologías de vanguardia y compartir sus conocimientos con los demás a través de... Seguir leyendo
Gracias a nuestros patrocinadores
Más lecturas sobre DevOps
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder