¿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 debe 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. Ahorra 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
[sudo] contraseña para geekflare:
% Total % Recibido % Xferd Velocidad media Tiempo Tiempo Actual
Dload Upload Total Gastado Velocidad Izquierda
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 Especificar un archivo de composición alternativo
(por defecto: docker-compose.yml)
-p, --project-name NAME Especificar un nombre de proyecto alternativo
(por defecto: nombre del directorio)
--verbose Mostrar más salida
--log-level NIVEL Establece el nivel de registro (DEBUG, INFO, ADVERTENCIA, ERROR, CRÍTICO)
--no-ansi No imprimir caracteres de control ANSI
-v, --version Imprimir la versión y salir
-H, --host Socket del demonio HOST al que conectarse
--tls Utilizar TLS; implícito por -tlsverify
--tlscacert CA_PATH Confiar en certificados firmados sólo por esta CA
--tlscert CLIENT_CERT_PATH Ruta al archivo de certificado TLS
--tlskey TLS_KEY_PATH Ruta al archivo de claves TLS
--tlsverify Utilizar TLS y verificar el remoto
--skip-hostname-check No cotejar el nombre de host del demonio con el archivo
nombre especificado en el certificado del cliente
--project-directory PATH Especificar un directorio de trabajo alternativo
(por defecto: la ruta del archivo Compose)
--compatibilidad Si se establece, Compose intentará convertir el despliegue
en 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
eventos 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 puntual
scale Fijar el número de contenedores de un servicio
start Iniciar servicios
stop Detener servicios
top Mostrar los procesos en ejecución
unpause Desactivar servicios
arriba 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.
versión: '3
servicios:
web:
construir: .
puertos:
- "5000:5000"
redis:
imagen: "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.
- Cree un archivo dockerfile de cada servicio
- Cree un archivo docker-compose.yml para conectar todos los dockerfiles
- 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 del servicio web y Redis y el archivo YAML de docker-compose. Dockerfile del servicio Web está presente en un 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 MongoDB, Express, 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)
Este es el aspecto que tendrá mi archivo docker-compose.yml para ejecutar estos tres contenedores:
versión: '3
servicios:
angular:
build: angular-client
ports:
- "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 media
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
[sudo] contraseña para geekflare:
Leyendo lista 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.
Se necesitan 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]
Obtenido 10,5 MB en 1min 34s (112 kB/s)
Extrayendo plantillas de los paquetes: 100%
Seleccionando paquete gyp previamente no seleccionado.
(Leyendo base de datos ... 180130 archivos y directorios instalados actualmente)
Preparando para desempaquetar .../000-gyp_0.1 20180428git4d467626-1_all.deb ...
Desempaquetando gyp (0.1 20180428git4d467626-1) ...
Seleccionando paquete javascript-common previamente no seleccionado.
Preparando para desempaquetar .../001-javascript-common_11_all.deb ...
Desempaquetando javascript-common (11) ...
Seleccionando paquete no seleccionado previamente libhttp-parser2.8:amd64.
Preparándose para desempaquetar .../002-libhttp-parser2.8_2.8.1-1_amd64.deb ...
Configurando node-fstream-ignore (0.0.6-2) ...
Instalando node-gyp (3.6.2-2) ...
Instalando node-yargs (10.0.3-2) ...
Instalando 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
Descarga del binario desde https://github.com/sass/node-sass/releases/download/v4.7.2/linux-x64-57_binding.node
Descarga completa ] - :
Binario guardado en /home/geekflare/mean/angular-client/node_modules/node-sass/vendor/linux-x64-57/binding.node
Binario guardado 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 encontrado en /home/geekflare/mean/angular-client/node_modules/node-sass/vendor/linux-x64-57/binding.node
Binario de prueba
El binario está bien
añadido 1457 paquetes de 1250 contribuidores en 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
Creación de la red "mean_default" con el controlador por defecto
Construyendo angular
Paso 1/8 : DESDE nodo:8
8: Extracción desde biblioteca/nodo
a4d8138d0f6b: Pull completo
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: Descargada imagen más reciente para nodo:8
--->
8e45c884a32e
Paso 2/8 : EJECUTE mkdir -p /var/www/app
--->
Ejecutar en c70a0cab7994
Eliminando el contenedor intermedio c70a0cab7994
--->
001c5e840b24
Paso 3/8 : WORKDIR /var/www/app
--->
Ejecutando en 622ebdc41b2f
Eliminando el contenedor intermedio 622ebdc41b2f
--->
baa2e2347259
Paso 4/8 : COPIAR package.json /var/www/app
--->
5b97543befab
Paso 5/8 : EJECUTE npm install
--->
Ejecutando 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
Descarga del binario desde 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
Binario guardado 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 el apoyo de 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
Binario de prueba
El binario está bien
añadido 1606 paquetes de 1329 contribuidores y auditado 15092 paquetes en 112.427s
Eliminado el contenedor intermedio 73e3d8b7a701
--->
55790d2fae93
Paso 6/8 : COPIAR . /var/www/app
--->
61537aa487f4
Paso 7/8 : EXPONGA 4200
--->
Ejecutando en 632eedc35a45
Eliminación del contenedor intermedio 632eedc35a45
--->
51e75b0e2ebe
Paso 8/8 : CMD ["npm", "start"]
--->
Ejecutando en 36bbb12a0d38
Eliminando el 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: Pull completo
ad9c569a8d98: Pull completo
293b44f45162: Pull completo
0c175077525d: Pull completo
4e73525b52ba: Pull completo
a22695a3f5e9: Pull completo
c5175bcf2977: Pull completo
3e320da07793: Pull completo
01c6db6b2b5a: Pull completo
3bd6e9d03e78: Pull completo
e03dcf51513f: Pull completo
c1956a9e136a: Pull completo
4c35cf22b1d5: Pull completo
Construcción exprés
Paso 1/9 : DESDE nodo:8
--->
8e45c884a32e
Paso 2/9 : EJECUTE mkdir -p /var/www/app
--->
Usar caché
--->
001c5e840b24
Paso 3/9 : WORKDIR /var/www/app
--->
Usar caché
--->
baa2e2347259
Paso 4/9 : COPIAR package.json /var/www/app
--->
0232ad53c679
Paso 5/9 : EJECUTE npm install
--->
Ejecutando 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 : EJECUTE 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 : EXPONGA 3000
--->
Ejecutando en bea389ab3ef1
Eliminando el contenedor intermedio bea389ab3ef1
--->
684bbfb31371
Paso 9/9 : CMD ["npm", "start"]
--->
Ejecutando en 9aa1b72e4a4e
Eliminando el 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
Creación de 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] Deshabilitación automática de TLS 1.0, para forzar la habilitación de TLS 1.0 especifique --sslDisabledProtocols 'none'
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] MongoDB iniciando : pid=1 port=27017 dbpath=/data/db 64-bit host=f74b56905249
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] db version v4.0.10
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] versión git: c389e7f69f637f7a1ac3cc9fae843b635f20b766
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] Versión de OpenSSL: OpenSSL 1.0.2g 1 Mar 2016
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] asignador: tcmalloc
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] módulos: ninguno
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] entorno de compilación:
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] distmod: ubuntu1604
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] distarch: x86_64
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] target_arch: x86_64
database_1_ccc5c677e00b | 2019-07-20T22:33:25.937 0000 I CONTROL [initandlisten] 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 | > nodemon ./bin/www
express_1_574f07b045fc | [nodemon] 1.19.1
express_1_574f07b045fc | [nodemon] para reiniciar en cualquier momento, introduzca `rs`
express_1_574f07b045fc | [nodemon] viendo: *.*
express_1_574f07b045fc | [nodemon] 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 abierta ahora)
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 - Tiempo: 336ms
angular_1_f257e2233ef1 | 4 chunks sin cambios
angular_1_f257e2233ef1 | chunk {main} main.bundle.js (main) 19.8 kB [inicial] [renderizado]
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 [inicial] [renderizado]
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.
Vaya a https://localhost:3000
para comprobar si se está ejecutando un servidor express.
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 ETIQUETA IMAGEN ID CREADO TAMAÑO
mean_express latest 35dcb3df9806 hace 14 horas 923MB
mean_angular latest 9f8d61db600c hace 14 horas 1.29GB
node 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
CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS 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.