0 00:00:00.019 --> 00:00:00.050 ulgadas 1 00:00:00.159 --> 00:00:03.740 n este video, te enseñaré todos los conceptos principales de Docker, 2 00:00:03.750 --> 00:00:07.250 ncluida la experiencia práctica con él. 3 00:00:07.460 --> 00:00:09.819 ntonces, si tienes que usar Docker en el trabajo, 4 00:00:09.829 --> 00:00:14.300 si necesitas aprender Docker para mejorar tus habilidades de ingeniería y necesitas obtener 5 00:00:14.310 --> 00:00:17.250 omencé rápido y entendí todos los conceptos principales y 6 00:00:17.260 --> 00:00:19.659 prenda los conceptos básicos sobre cómo trabajar con Docker, 7 00:00:19.870 --> 00:00:24.459 ste curso intensivo es perfecto para ti. Primero comenzaremos por 8 00:00:24.620 --> 00:00:25.040 qué hacer 9 00:00:25.239 --> 00:00:27.479 s por qué se creó básicamente, 10 00:00:27.489 --> 00:00:30.770 ué problemas resuelve en ingeniería y cómo 11 00:00:30.780 --> 00:00:33.529 yuda en el proceso de desarrollo e implementación de software. 12 00:00:33.650 --> 00:00:35.560 ntonces entenderás exactamente por qué 13 00:00:35.759 --> 00:00:41.689 s tan importante y por eso se ha vuelto tan popular y ampliamente utilizado en proyectos de TI 14 00:00:42.119 --> 00:00:45.479 como parte de una solución de virtualización, doer 15 00:00:45.709 --> 00:00:50.770 s una mejora con respecto a las máquinas virtuales o el siguiente paso de la evolución, 16 00:00:50.779 --> 00:00:54.330 ambién explicaré la diferencia entre una máquina virtual y una más oscura, 17 00:00:54.340 --> 00:00:56.430 cuáles son las ventajas de 18 00:00:56.639 --> 00:00:58.099 acedor en esta comparación. 19 00:00:58.299 --> 00:01:00.810 espués de entender por qué queremos usar do 20 00:01:01.029 --> 00:01:03.209 n primer lugar, instalaremos 21 00:01:03.450 --> 00:01:07.209 azlo y aprende a trabajar realmente con él. Aprenderemos 22 00:01:07.349 --> 00:01:09.589 mágenes de doer, contenedores, más oscuros 23 00:01:09.690 --> 00:01:12.160 egistro, registros públicos y privados, 24 00:01:12.169 --> 00:01:18.580 ejecutaremos contenedores localmente en función de algunas de las imágenes disponibles en Docker 25 00:01:18.790 --> 00:01:21.010 egistro público llamado Docker Hub. 26 00:01:21.260 --> 00:01:24.480 ambién aprenderemos el concepto de crear tus propias imágenes 27 00:01:24.489 --> 00:01:28.430 aprender sobre el plano de imagen de Docker llamado Docker File. 28 00:01:28.589 --> 00:01:29.160 por supuesto, 29 00:01:29.169 --> 00:01:33.540 eremos todo esto en acción y aprenderemos todos los comandos de Docker para extraer imágenes, 30 00:01:33.550 --> 00:01:37.199 jecutar contenedores, crear su propia imagen de Docker, etcétera. 31 00:01:37.440 --> 00:01:42.139 ambién aprenderemos sobre el control de versiones de imágenes con texto de imagen y, finalmente, 32 00:01:42.150 --> 00:01:44.720 espués de aprender a trabajar con Docker, 33 00:01:44.730 --> 00:01:48.580 ambién explicaré con animaciones gráficas cómo 34 00:01:48.790 --> 00:01:53.370 ncaja en el panorama general del proceso de desarrollo e implementación de software. 35 00:01:53.379 --> 00:01:54.910 ntonces, al final de este video, 36 00:01:54.919 --> 00:01:59.250 e sentirá mucho más seguro de su conocimiento y comprensión en 37 00:01:59.449 --> 00:01:59.730 acedor 38 00:01:59.919 --> 00:02:03.209 puede aprovechar fácilmente ese conocimiento básico 39 00:02:03.325 --> 00:02:06.335 ara convertirse en un usuario avanzado de Docker si lo desea. 40 00:02:06.575 --> 00:02:08.015 debajo de la descripción del vídeo, 41 00:02:08.026 --> 00:02:11.595 roporcionaré algunos recursos para aprender aún más sobre Docker 42 00:02:11.766 --> 00:02:15.656 avance más en él. Pero antes de meternos de lleno, 43 00:02:15.886 --> 00:02:18.035 arece que muchos de ustedes están viendo el 44 00:02:18.046 --> 00:02:21.095 os vídeos de nuestro canal aún no están suscritos, 45 00:02:21.106 --> 00:02:23.695 ntonces, si estás sacando algún valor del 46 00:02:23.705 --> 00:02:26.716 utoriales gratuitos que publico regularmente en este canal, 47 00:02:26.725 --> 00:02:31.322 segúrate de suscribirte no a mí, a ningún vídeo o tutorial futuro. 48 00:02:31.332 --> 00:02:35.272 ambién me encantaría conectarme contigo en mis otras cuentas de redes sociales, 49 00:02:35.281 --> 00:02:39.841 onde publico contenido entre bastidores, actualizaciones semanales, etc. 50 00:02:40.011 --> 00:02:42.602 sí que espero conectarme contigo allí también. 51 00:02:42.611 --> 00:02:47.462 ueno, estoy muy emocionada de enseñarte todo esto, así que empecemos. 52 00:02:47.761 --> 00:02:51.022 omencemos con la pregunta más importante. ¿Qué es lo que hay que hacer? 53 00:02:51.261 --> 00:02:54.981 Por qué se creó? ¿Y qué problema resuelve? 54 00:02:58.199 --> 00:03:02.119 n palabras simples, Docker es un software de virtualización 55 00:03:02.229 --> 00:03:05.899 ue facilita mucho el desarrollo y la implementación de aplicaciones, 56 00:03:06.240 --> 00:03:10.669 s mucho más fácil en comparación con cómo se hacía antes de la introducción de Docker. 57 00:03:10.899 --> 00:03:14.460 Docker lo hace empaquetando una aplicación 58 00:03:14.630 --> 00:03:17.660 n algo llamado contenedor que tiene 59 00:03:17.669 --> 00:03:20.169 odo lo que la aplicación necesita para ejecutarse, 60 00:03:20.360 --> 00:03:24.300 omo el código de la aplicación en sí, sus bibliotecas y dependencias, 61 00:03:24.330 --> 00:03:27.820 ino también el tiempo de ejecución y la configuración del entorno. 62 00:03:28.259 --> 00:03:31.210 ntonces, la aplicación y su entorno de ejecución son 63 00:03:31.220 --> 00:03:35.229 mbos empaquetados en un solo paquete de Docker, 64 00:03:35.240 --> 00:03:37.619 ue puede compartir y distribuir fácilmente. 65 00:03:38.029 --> 00:03:40.369 hora, ¿por qué es tan importante? 66 00:03:40.380 --> 00:03:42.570 cómo se desarrollaron realmente las aplicaciones 67 00:03:42.580 --> 00:03:45.750 se implementó antes de la introducción de Docker. 68 00:03:46.100 --> 00:03:50.770 eamos eso para comprender los beneficios de Docker con mayor claridad. 69 00:03:54.429 --> 00:03:57.940 ntonces, ¿cómo desarrollamos aplicaciones antes de los contenedores? 70 00:03:58.320 --> 00:04:01.610 or lo general, cuando tienes un equipo de desarrolladores trabajando en alguna aplicación, 71 00:04:01.649 --> 00:04:04.190 endrían que instalar todos los servicios. 72 00:04:04.199 --> 00:04:05.240 sa aplicación 73 00:04:05.350 --> 00:04:07.929 epende de nuestras necesidades, como los servicios de bases de datos, 74 00:04:07.940 --> 00:04:10.960 tcétera directamente en su sistema operativo. 75 00:04:10.970 --> 00:04:11.419 xacto. 76 00:04:11.550 --> 00:04:15.800 or ejemplo, si está desarrollando una aplicación de JavaScript y necesita una publicación 77 00:04:16.149 --> 00:04:17.369 ase de datos SQL, 78 00:04:17.640 --> 00:04:18.769 al vez necesites 79 00:04:19.070 --> 00:04:24.429 por cobrar a Mosquito por mensajes. Como si tuvieras una 80 00:04:24.910 --> 00:04:28.920 hora necesita todos estos servicios localmente en su entorno de desarrollo 81 00:04:28.929 --> 00:04:32.269 ara que puedas desarrollar y probar la aplicación correctamente, 82 00:04:32.649 --> 00:04:38.420 todos los desarrolladores del equipo tendrían que ir a instalar todos esos servicios, 83 00:04:38.429 --> 00:04:42.890 onfigúrelos y ejecútelos en su entorno de desarrollo local 84 00:04:42.899 --> 00:04:46.160 según el sistema operativo que utilicen, 85 00:04:46.279 --> 00:04:48.640 l proceso de instalación será diferente 86 00:04:48.970 --> 00:04:50.130 orque instalar una publicación 87 00:04:50.470 --> 00:04:51.660 ase de datos SQL en 88 00:04:51.779 --> 00:04:52.079 o 89 00:04:52.339 --> 00:04:56.339 l sistema operativo es diferente de instalarlo en una máquina con Windows. Por ejemplo, 90 00:04:56.619 --> 00:04:59.859 tra cosa con la instalación de servicios directamente en 91 00:04:59.869 --> 00:05:03.049 n sistema operativo que siga alguna guía de instalación 92 00:05:03.149 --> 00:05:07.380 s que generalmente tiene varios pasos de instalación, 93 00:05:07.579 --> 00:05:09.700 , a continuación, la configuración del servicio. 94 00:05:09.730 --> 00:05:13.109 ntonces, con varios comandos que debe ejecutar para instalar, 95 00:05:13.119 --> 00:05:15.010 onfigurar y configurar el servicio, 96 00:05:15.019 --> 00:05:20.429 as posibilidades de que algo salga mal y se produzca un error son bastante altas. 97 00:05:20.440 --> 00:05:21.309 este enfoque, 98 00:05:21.320 --> 00:05:25.535 este proceso de configuración de un entorno de desarrollo para un desarrollador, 99 00:05:25.545 --> 00:05:30.765 n realidad, puede resultar bastante tedioso, según la complejidad de la aplicación. 100 00:05:30.774 --> 00:05:34.695 or ejemplo, si tiene 10 servicios que utiliza su aplicación, 101 00:05:34.954 --> 00:05:41.214 ntonces tendría que hacer esa instalación 10 veces para cada servicio. 102 00:05:41.225 --> 00:05:41.695 de nuevo, 103 00:05:41.704 --> 00:05:44.795 erá diferente dentro del equipo según 104 00:05:44.804 --> 00:05:47.195 ué sistema operativo utiliza cada desarrollador. 105 00:05:47.464 --> 00:05:51.635 hora veamos cómo los contenedores resuelven algunos de estos problemas 106 00:05:51.970 --> 00:05:52.940 on contenedores. 107 00:05:52.950 --> 00:05:55.040 n realidad, no es necesario instalar ninguno 108 00:05:55.049 --> 00:05:57.880 e los servicios directamente en su sistema operativo, 109 00:05:58.019 --> 00:06:04.089 orque con Docker tienes ese servicio empaquetado en un entorno aislado. 110 00:06:04.170 --> 00:06:04.940 ntonces tienes 111 00:06:05.260 --> 00:06:10.170 resenta QL con una versión específica empaquetada con toda su configuración 112 00:06:10.380 --> 00:06:12.000 entro de un contenedor. 113 00:06:12.220 --> 00:06:16.950 ntonces, como desarrollador, no tienes que ir a buscar algunos binarios 114 00:06:17.100 --> 00:06:19.750 ara descargar e instalar en su máquina. 115 00:06:19.869 --> 00:06:22.630 ero más bien continúa e inicia ese servicio 116 00:06:22.640 --> 00:06:27.029 omo contenedor de Docker con un solo comando de Docker, 117 00:06:27.049 --> 00:06:30.559 ue obtiene el paquete contenedor de Internet 118 00:06:30.739 --> 00:06:32.750 lo inicia en su computadora 119 00:06:33.170 --> 00:06:35.299 el comando docker será el mismo 120 00:06:35.309 --> 00:06:38.690 ndependientemente del sistema operativo en el que se encuentre, 121 00:06:38.809 --> 00:06:42.709 también será el mismo independientemente del servicio que esté instalando. 122 00:06:42.720 --> 00:06:46.149 ntonces, si tiene 10 servicios de los que depende su aplicación de JavaScript, 123 00:06:46.230 --> 00:06:52.079 olo tendría que ejecutar 10 comandos de Docker para cada contenedor, y eso será todo. 124 00:06:52.380 --> 00:06:55.239 ntonces, como puede ver, Docker estandariza, 125 00:06:55.250 --> 00:06:58.269 l proceso de ejecutar cualquier servicio en tu desarrollo 126 00:06:58.279 --> 00:07:01.769 ntorno y facilita mucho todo el proceso. 127 00:07:01.790 --> 00:07:05.239 sí que básicamente puedes concentrarte y trabajar más en el desarrollo 128 00:07:05.250 --> 00:07:08.510 e intentar instalar y configurar servicios en su máquina. 129 00:07:09.019 --> 00:07:13.269 esto obviamente hace que la configuración de su entorno de desarrollo local 130 00:07:13.429 --> 00:07:16.070 ucho más rápido y fácil que 131 00:07:16.299 --> 00:07:19.010 a opción sin contenedores. 132 00:07:19.190 --> 00:07:21.089 demás, con el Docker, 133 00:07:21.100 --> 00:07:24.519 uedes incluso tener diferentes versiones de la misma aplicación 134 00:07:24.570 --> 00:07:28.535 jecutándose en su entorno local sin tener ningún conflicto, 135 00:07:28.545 --> 00:07:30.774 o cual es muy difícil de hacer 136 00:07:30.934 --> 00:07:33.904 i está instalando la misma aplicación con 137 00:07:33.915 --> 00:07:36.565 ersiones diferentes directamente en su sistema operativo, 138 00:07:36.855 --> 00:07:41.975 veremos todo esto en acción en la parte de demostración de este vídeo. 139 00:07:42.105 --> 00:07:46.605 hora veamos cómo los contenedores pueden mejorar el proceso de implementación de aplicaciones. 140 00:07:46.924 --> 00:07:50.994 ntes de los contenedores. Un proceso de implementación tradicional tendría este aspecto 141 00:07:51.500 --> 00:07:55.910 l equipo de desarrollo produciría un artefacto de aplicación o un paquete 142 00:07:56.059 --> 00:07:59.410 unto con un conjunto de instrucciones sobre cómo 143 00:07:59.420 --> 00:08:03.380 nstale y configure ese paquete de aplicaciones en el servidor. 144 00:08:03.390 --> 00:08:06.920 ntonces tendrías algo como un archivo jar para el trabajo 145 00:08:06.929 --> 00:08:11.140 plicación o algo similar según el lenguaje de programación utilizado. 146 00:08:11.529 --> 00:08:13.190 además, por supuesto, 147 00:08:13.200 --> 00:08:15.700 endrías algún tipo de servicio de base de datos 148 00:08:15.709 --> 00:08:18.339 algunos otros servicios que su aplicación necesitaba, 149 00:08:18.489 --> 00:08:21.450 ambién con un conjunto de instrucciones sobre cómo configurar 150 00:08:21.600 --> 00:08:26.420 configúrelo en el servidor para que la aplicación pueda conectarse y usarlo. 151 00:08:26.690 --> 00:08:28.920 ntonces, el equipo de desarrollo proporcionaría esa aplicación 152 00:08:28.929 --> 00:08:32.950 rtefacto o paquete al equipo de operaciones, 153 00:08:33.130 --> 00:08:34.489 el equipo de operaciones 154 00:08:34.690 --> 00:08:36.510 e encargaría de la instalación 155 00:08:36.710 --> 00:08:38.510 configurar la aplicación 156 00:08:38.760 --> 00:08:41.659 todos sus servicios de inquilinos, como la base de datos, por ejemplo. 157 00:08:41.669 --> 00:08:44.880 hora, el problema con este tipo de enfoque es que, en primer lugar, 158 00:08:44.890 --> 00:08:47.880 ecesita configurar todo e instalar todo 159 00:08:48.049 --> 00:08:52.109 uevamente directamente en el sistema operativo, que mencioné 160 00:08:52.489 --> 00:08:55.659 n el contexto de desarrollo, que en realidad es muy propenso a errores, 161 00:08:55.669 --> 00:08:59.520 puede tener varios problemas diferentes durante el proceso de configuración. 162 00:08:59.539 --> 00:09:03.330 ambién puede tener conflictos con las versiones de dependencia donde 163 00:09:03.340 --> 00:09:06.000 os servicios dependen de la misma biblioteca, 164 00:09:06.010 --> 00:09:08.070 or ejemplo, pero con diferentes versiones. 165 00:09:08.080 --> 00:09:09.239 cuando eso suceda, 166 00:09:09.250 --> 00:09:12.659 ará que el proceso de configuración sea mucho más difícil y complejo. 167 00:09:12.700 --> 00:09:16.530 ásicamente, muchas cosas que pueden salir mal durante las operaciones 168 00:09:16.539 --> 00:09:21.780 l equipo está instalando y configurando aplicaciones y servicios en un servidor. 169 00:09:22.330 --> 00:09:25.830 tro problema que podría surgir de este tipo de proceso es 170 00:09:25.960 --> 00:09:28.750 uando hay una falta de comunicación entre 171 00:09:28.820 --> 00:09:31.500 l equipo de desarrollo y el equipo de operaciones. 172 00:09:31.880 --> 00:09:35.440 orque como todo está en una guía textual, 173 00:09:35.450 --> 00:09:40.559 omo una lista de instrucciones sobre cómo configurar y ejecutar la aplicación, 174 00:09:40.729 --> 00:09:42.489 tal vez algún tipo de lista de verificación, 175 00:09:42.500 --> 00:09:45.400 odría haber casos en los que los desarrolladores olviden 176 00:09:45.409 --> 00:09:47.989 ara mencionar algún paso importante sobre la configuración. 177 00:09:48.000 --> 00:09:49.880 cuando esa parte falla, 178 00:09:49.890 --> 00:09:55.565 l equipo de operaciones tiene que volver a los desarrolladores y solicitar más detalles y comentarios. 179 00:09:55.684 --> 00:09:58.585 esto podría llevar a una comunicación de ida y vuelta 180 00:09:58.594 --> 00:10:02.025 asta que la aplicación se implemente correctamente en el servidor. 181 00:10:02.034 --> 00:10:05.494 ásicamente, tienes esta sobrecarga de comunicación adicional donde 182 00:10:05.505 --> 00:10:09.094 os desarrolladores tienen que comunicarse en algún tipo de texto 183 00:10:09.275 --> 00:10:11.705 ráfico en cualquier formato, 184 00:10:11.815 --> 00:10:13.744 ómo debe ejecutarse la aplicación, 185 00:10:13.994 --> 00:10:17.275 como mencioné, esto podría provocar problemas y problemas de comunicación 186 00:10:17.469 --> 00:10:21.820 on contenedores. En realidad, este proceso está simplificado porque 187 00:10:22.080 --> 00:10:25.549 hora los desarrolladores crean un paquete de aplicaciones 188 00:10:25.700 --> 00:10:28.309 so no solo incluye el código en sí, 189 00:10:28.320 --> 00:10:33.109 ino también todas las dependencias y la configuración de la aplicación. 190 00:10:33.119 --> 00:10:36.789 ntonces, en lugar de tener que escribir eso en algún formato textual y documento, 191 00:10:37.020 --> 00:10:41.270 ásicamente, simplemente empaquetan todo eso dentro del artefacto de la aplicación. 192 00:10:41.280 --> 00:10:44.409 dado que ya está encapsulado en un entorno, 193 00:10:44.995 --> 00:10:47.645 l personal de operaciones no tiene que configurar ninguna 194 00:10:47.656 --> 00:10:49.755 e estas cosas directamente en el servidor. 195 00:10:49.765 --> 00:10:53.125 or lo tanto, hace que todo el proceso sea mucho más fácil. 196 00:10:53.226 --> 00:10:57.185 hay menos espacio para los problemas que mencioné anteriormente. 197 00:10:57.375 --> 00:11:00.846 ntonces, lo único que debe hacer el equipo de operaciones en este caso 198 00:11:00.856 --> 00:11:06.945 s ejecutar un comando docker que obtenga el paquete contenedor que crearon los desarrolladores 199 00:11:07.096 --> 00:11:08.955 lo ejecuta en el servidor. 200 00:11:09.135 --> 00:11:11.426 e la misma manera que el equipo de operaciones ejecutará un servicio 201 00:11:11.771 --> 00:11:15.471 ue la aplicación también necesita como contenedores Docker, 202 00:11:15.502 --> 00:11:19.901 eso facilita mucho el proceso de implementación desde el punto de vista operativo. 203 00:11:19.911 --> 00:11:20.661 hora, por supuesto, 204 00:11:20.671 --> 00:11:23.651 l equipo de operaciones tendrá que instalar y configurar Docker Run 205 00:11:23.661 --> 00:11:28.012 iempo en el servidor antes de que puedan ejecutar contenedores. 206 00:11:28.091 --> 00:11:32.781 ero eso es solo un esfuerzo de tiempo para un servicio o una tecnología. 207 00:11:32.901 --> 00:11:35.541 una vez que tenga instalado el tiempo de ejecución de Docker, 208 00:11:35.552 --> 00:11:38.382 implemente puede ejecutar contenedores Docker en ese servidor 209 00:11:41.780 --> 00:11:46.770 hora. Al principio, mencioné que Docker es 210 00:11:46.969 --> 00:11:52.109 omo una máquina virtual, y las máquinas virtuales existen desde hace mucho tiempo. 211 00:11:52.289 --> 00:11:55.229 ntonces, ¿por qué se adoptó tanto el color oscuro? 212 00:11:55.239 --> 00:11:58.950 ué ventajas tiene sobre las máquinas virtuales, 213 00:11:58.960 --> 00:12:00.799 y cuál es la diferencia entre los dos? 214 00:12:01.070 --> 00:12:03.739 ara eso, necesitamos ver un poco cómo hacerlo 215 00:12:03.960 --> 00:12:05.890 unciona a nivel técnico. 216 00:12:06.099 --> 00:12:07.809 ambién dije eso con Docker, 217 00:12:07.820 --> 00:12:11.500 o necesita instalar los servicios directamente en el sistema operativo. 218 00:12:11.679 --> 00:12:12.270 ero 219 00:12:12.520 --> 00:12:17.510 n ese caso, ¿cómo ejecuta Docker sus contenedores en un sistema operativo? 220 00:12:17.700 --> 00:12:19.679 hora, para entender todo esto, 221 00:12:19.849 --> 00:12:23.909 eamos primero cómo se compone un sistema operativo. 222 00:12:23.919 --> 00:12:26.130 os sistemas operativos tienen dos capas principales. 223 00:12:26.309 --> 00:12:28.369 ienes el núcleo del sistema operativo 224 00:12:28.559 --> 00:12:31.669 las aplicaciones del sistema operativo. 225 00:12:32.039 --> 00:12:37.989 el kernel es la parte que se comunica con los componentes de hardware, como la CPU, 226 00:12:38.000 --> 00:12:39.969 lmacenamiento de memoria, etcétera. 227 00:12:39.979 --> 00:12:42.289 ntonces, cuando tienes una máquina física 228 00:12:42.409 --> 00:12:45.909 on todos estos recursos e instalas el sistema operativo 229 00:12:46.159 --> 00:12:47.710 n esa máquina física, 230 00:12:47.859 --> 00:12:50.494 l núcleo del sistema operativo en realidad 231 00:12:50.505 --> 00:12:53.244 ea quien hable con los componentes de hardware 232 00:12:53.354 --> 00:12:57.354 ara asignar recursos como el almacenamiento de memoria de la CPU, etcétera, 233 00:12:57.515 --> 00:13:01.255 las aplicaciones y, a continuación, a ejecutarlas en ese sistema operativo. 234 00:13:01.364 --> 00:13:05.005 esas aplicaciones forman parte de la capa de aplicaciones, 235 00:13:05.114 --> 00:13:07.505 se ejecutan en la parte superior de la capa del núcleo. 236 00:13:07.840 --> 00:13:12.049 ntonces, el kernel es una especie de intermediario entre las aplicaciones que ve 237 00:13:12.169 --> 00:13:14.409 uando interactúas con tu computadora 238 00:13:14.520 --> 00:13:17.770 el hardware subyacente de su computadora. 239 00:13:17.950 --> 00:13:23.950 ahora, dado que Docker y Virtual Machine son herramientas de virtualización, 240 00:13:23.960 --> 00:13:25.340 a pregunta es 241 00:13:25.500 --> 00:13:30.549 qué parte del sistema operativo virtualizan realmente? 242 00:13:30.630 --> 00:13:32.289 ahí es donde está la principal diferencia 243 00:13:32.299 --> 00:13:34.765 ntre Docker y máquinas virtuales en realidad como 244 00:13:34.955 --> 00:13:38.005 ara que Docker virtualice la capa de aplicaciones. 245 00:13:38.244 --> 00:13:40.465 sto significa que cuando ejecutas un contenedor Docker, 246 00:13:40.474 --> 00:13:43.934 n realidad contiene la capa de aplicaciones 247 00:13:44.094 --> 00:13:47.515 el sistema operativo y algunas otras aplicaciones 248 00:13:47.525 --> 00:13:49.674 nstalado en la parte superior de esa capa de aplicación. 249 00:13:49.924 --> 00:13:52.815 odría ser un tiempo de ejecución de Java o Python o lo que sea, 250 00:13:53.104 --> 00:13:58.625 usa el núcleo del host porque no tiene su propio núcleo. 251 00:13:58.929 --> 00:14:01.090 a máquina virtual, por otro lado, 252 00:14:01.109 --> 00:14:04.500 iene la capa de aplicaciones y su propio núcleo. 253 00:14:04.510 --> 00:14:07.919 or lo tanto, virtualiza todo el sistema operativo, 254 00:14:07.929 --> 00:14:12.750 o que significa que cuando descargas una imagen de máquina virtual en tu host. 255 00:14:13.010 --> 00:14:17.325 o usa el núcleo de hosts. De hecho, arranca el suyo propio 256 00:14:17.544 --> 00:14:21.715 ntonces, ¿qué significa realmente esta diferencia entre una máquina más oscura y una máquina virtual? 257 00:14:21.724 --> 00:14:26.875 n primer lugar, el tamaño de los paquetes o imágenes más oscuros es mucho más pequeño 258 00:14:27.015 --> 00:14:30.674 orque solo tienen que implementar una capa 259 00:14:30.895 --> 00:14:32.215 el sistema operativo 260 00:14:32.455 --> 00:14:35.224 or lo que las imágenes más oscuras suelen ocupar un par de megabytes. 261 00:14:35.234 --> 00:14:39.974 as imágenes grandes de máquinas virtuales, por otro lado, pueden ocupar un par de gigabytes. 262 00:14:40.294 --> 00:14:44.135 sto significa que cuando se trabaja con Docker, se ahorra mucho espacio en disco. 263 00:14:44.580 --> 00:14:49.729 uede ejecutar e iniciar contenedores Docker mucho más rápido que las máquinas virtuales, 264 00:14:49.739 --> 00:14:53.580 orque la máquina virtual tiene que instalar un núcleo cada vez que se inicia, 265 00:14:53.770 --> 00:14:56.169 ientras que el contenedor Docker simplemente se reutiliza 266 00:14:56.340 --> 00:14:59.669 l núcleo del host y simplemente inicia la capa de aplicación encima de él. 267 00:14:59.679 --> 00:15:02.979 ntonces, aunque la máquina virtual necesita un par de minutos para iniciarse, 268 00:15:02.989 --> 00:15:05.409 os contenedores docker generalmente se inician en un 269 00:15:05.510 --> 00:15:06.510 nos pocos milisegundos. 270 00:15:06.780 --> 00:15:08.960 a tercera diferencia es la compatibilidad, 271 00:15:09.010 --> 00:15:14.599 ara que pueda ejecutar la imagen virtual de cualquier sistema operativo en cualquier otro 272 00:15:14.739 --> 00:15:16.590 ost del sistema operativo. 273 00:15:16.599 --> 00:15:20.729 ntonces, en una máquina Windows, puede ejecutar una máquina virtual Linux, por ejemplo. 274 00:15:21.080 --> 00:15:26.359 ero no puedes hacer eso con Docker, al menos no directamente, entonces, ¿cuál es el problema aquí? 275 00:15:26.650 --> 00:15:30.719 upongamos que tiene un sistema operativo Windows con Windows Kernel 276 00:15:30.869 --> 00:15:34.309 su capa de aplicación, y desea ejecutar un Linux 277 00:15:34.460 --> 00:15:40.169 magen de Docker basada directamente en ese host de Windows. El problema aquí es 278 00:15:40.299 --> 00:15:46.210 a imagen de Docker basada en Docker no puede usar el kernel de Windows. Necesitaría un núcleo de Linux para ejecutarse 279 00:15:46.429 --> 00:15:49.919 orque puede ejecutar una capa de aplicaciones de Linux en un Kern de Windows. 280 00:15:50.481 --> 00:15:52.981 sí que eso es un problema con Docker. 281 00:15:53.171 --> 00:15:54.012 in embargo, 282 00:15:54.252 --> 00:15:56.831 uando desarrolla en Windows o Me 283 00:15:57.021 --> 00:15:57.461 S, 284 00:15:57.752 --> 00:16:03.822 esea ejecutar varios servicios porque la mayoría de los contenedores para los servicios populares 285 00:16:03.952 --> 00:16:05.841 stán en realidad basados en Linux. 286 00:16:05.961 --> 00:16:11.651 ambién es interesante saber que Docker se escribió y creó originalmente para Linux 287 00:16:12.231 --> 00:16:13.142 ero más tarde 288 00:16:13.533 --> 00:16:16.494 e hecho, hice una actualización y desarrollé lo que 289 00:16:16.504 --> 00:16:20.903 lamado Docker desktop para Windows y Mac, 290 00:16:20.914 --> 00:16:23.174 o que lo hizo posible 291 00:16:23.443 --> 00:16:29.294 ara ejecutar contenedores basados en Linux también en ordenadores Windows y Mac. 292 00:16:29.304 --> 00:16:34.304 ntonces, la forma en que funciona es que el escritorio más oscuro usa una capa de hipervisor 293 00:16:34.453 --> 00:16:36.504 on un Linux ligero 294 00:16:36.736 --> 00:16:37.945 istribución además 295 00:16:38.185 --> 00:16:40.875 ara proporcionar el núcleo de Linux necesario 296 00:16:41.185 --> 00:16:43.546 de esta manera ejecutar Linux 297 00:16:43.695 --> 00:16:48.726 s posible usar contenedores basados en los sistemas operativos Windows y Mac. 298 00:16:48.736 --> 00:16:49.486 , por cierto, 299 00:16:49.495 --> 00:16:53.625 i desea obtener más información sobre la virtualización y cómo funcionan las máquinas virtuales. 300 00:16:53.635 --> 00:16:55.835 qué es un hipervisor, por ejemplo. 301 00:16:55.846 --> 00:16:59.616 uedes ver mi otro vídeo, donde explico todo eso en detalle. 302 00:17:00.309 --> 00:17:02.840 sto significa para el desarrollo local. 303 00:17:02.849 --> 00:17:07.430 omo ingeniero, instalaría un escritorio más oscuro en su Windows o Mac 304 00:17:07.680 --> 00:17:08.640 omputadora con sistema operativo 305 00:17:08.819 --> 00:17:09.800 ara ejecutar Linux 306 00:17:09.920 --> 00:17:15.160 mágenes basadas, que, como mencioné en la mayoría de las bases de datos de servicios populares, 307 00:17:15.170 --> 00:17:18.219 tcétera están basados en su mayoría en Linux. 308 00:17:18.229 --> 00:17:19.560 ntonces necesitarías eso, 309 00:17:19.939 --> 00:17:22.050 eso nos lleva a la 310 00:17:22.199 --> 00:17:23.800 nstalación de 311 00:17:24.040 --> 00:17:24.329 acedor. 312 00:17:24.780 --> 00:17:27.680 ara hacer algunas demostraciones y aprender Docker en la práctica, 313 00:17:27.689 --> 00:17:29.119 rimero tendría que instalarlo. 314 00:17:29.560 --> 00:17:30.910 ntonces, para instalar Docker, 315 00:17:30.920 --> 00:17:34.390 implemente vaya a su página oficial para obtener la guía de instalación 316 00:17:34.510 --> 00:17:35.810 siga los pasos. 317 00:17:35.819 --> 00:17:40.650 omo Docker se actualiza todo el tiempo, la instalación cambia. 318 00:17:40.660 --> 00:17:43.050 ntonces, en lugar de simplemente darles algunos comentarios que 319 00:17:43.060 --> 00:17:46.290 uede funcionar ahora, pero se actualizará en el futuro, 320 00:17:46.300 --> 00:17:48.579 iempre debes consultar las últimas 321 00:17:48.589 --> 00:17:52.150 ocumentación para la guía de instalación de cualquier herramienta. 322 00:17:52.619 --> 00:17:55.869 ntonces, si buscamos Docker desktop 323 00:17:56.229 --> 00:17:57.310 nstalación 324 00:17:58.510 --> 00:18:02.859 haga clic en uno de esos enlaces, como instalar en Windows, así que eso es 325 00:18:03.050 --> 00:18:04.489 l escritorio Docker, 326 00:18:04.760 --> 00:18:06.099 a herramienta que mencioné 327 00:18:06.260 --> 00:18:10.219 esolvió este problema de ejecutar imágenes basadas en Linux en un sistema operativo diferente, 328 00:18:10.229 --> 00:18:13.130 ero en realidad incluye muchas otras cosas cuando lo instalas. 329 00:18:13.140 --> 00:18:16.680 ntonces, ¿qué está instalando exactamente con el escritorio Docker? 330 00:18:17.380 --> 00:18:19.689 ves exactamente lo que está incluido allí. 331 00:18:19.880 --> 00:18:23.239 ásicamente, obtenga el servicio Docker en sí. Se llama Docker 332 00:18:23.349 --> 00:18:23.790 otor. 333 00:18:24.069 --> 00:18:29.680 sa es la parte principal del docker que hace posible esta virtualización. 334 00:18:29.689 --> 00:18:32.630 ero cuando tenemos un servicio, necesitamos comunicarnos con él, ¿verdad? 335 00:18:32.640 --> 00:18:33.800 ntonces necesitamos un cliente 336 00:18:33.939 --> 00:18:35.890 ue pueda hablar con ese servicio. 337 00:18:35.900 --> 00:18:40.969 ntonces, Docker Desktop en realidad viene con un cliente de interfaz de línea de comandos, 338 00:18:41.250 --> 00:18:44.959 o que significa que podemos ejecutar comandos más oscuros en una línea de comandos 339 00:18:45.140 --> 00:18:51.239 ara iniciar contenedores para crear contenedores, iniciar, detenerlos, eliminarlos, etcétera, 340 00:18:51.349 --> 00:18:57.760 haz todo tipo de cosas. Y también viene con un cliente de interfaz gráfica de usuario 341 00:18:57.900 --> 00:19:00.640 ntonces, si no se siente cómodo trabajando con la línea de comandos, 342 00:19:00.650 --> 00:19:06.160 ealmente puede usar la interfaz gráfica de usuario donde puede hacer todas estas cosas. 343 00:19:06.189 --> 00:19:08.770 ero en una interfaz de usuario agradable y fácil de usar, 344 00:19:09.130 --> 00:19:11.619 sí que obtienes todas estas cosas cuando instalas Docker Desktop, 345 00:19:11.630 --> 00:19:14.260 ásicamente todo lo que necesita para empezar con Docker 346 00:19:14.630 --> 00:19:17.920 , por supuesto, según el sistema operativo en el que se encuentre, 347 00:19:17.930 --> 00:19:20.489 as a elegir ese Mac Windows o Linux. 348 00:19:20.500 --> 00:19:26.439 sí que hagamos clic en uno de esos y, básicamente, siga las instrucciones. 349 00:19:26.449 --> 00:19:28.800 iene algunos requisitos de sistema. Tienes que comprobar 350 00:19:28.969 --> 00:19:32.119 osas como la versión de tu Mac OS, 351 00:19:32.880 --> 00:19:34.869 uántos recursos vas a necesitar. 352 00:19:35.050 --> 00:19:39.949 también tienes las opciones para Mac con Intel o Mac 353 00:19:39.959 --> 00:19:44.339 on Apple Silicon para que puedas alternar entre ellas y, básicamente, 354 00:19:44.349 --> 00:19:49.449 implemente elija la guía que coincida con las especificaciones de su computadora. 355 00:19:49.500 --> 00:19:52.239 una vez que lo tenga, compruebe los requisitos del sistema, 356 00:19:52.439 --> 00:19:55.334 igue adelante y haz clic en uno de esos. 357 00:19:55.474 --> 00:19:57.324 n mi caso, tengo un Mac con Intel 358 00:19:57.525 --> 00:19:59.555 hip, así que haría clic en este, 359 00:19:59.564 --> 00:20:02.655 ese es en realidad el instalador de escritorio de Docker. 360 00:20:02.714 --> 00:20:05.994 ntonces, si hago clic, se descargará este DMG 361 00:20:06.094 --> 00:20:09.635 magen. Y una vez que se descarga, básicamente solo tienes que seguir 362 00:20:09.785 --> 00:20:11.305 os pasos que se describen aquí, 363 00:20:11.564 --> 00:20:14.204 verdad? Haces doble clic en él y abres la aplicación 364 00:20:14.564 --> 00:20:15.224 así sucesivamente. 365 00:20:16.260 --> 00:20:20.099 lo mismo para Windows. Si es Windows, básicamente haces clic en este 366 00:20:20.250 --> 00:20:22.869 descargue el escritorio Docker para Windows 367 00:20:22.979 --> 00:20:25.880 asegúrese de comprobar los requisitos del sistema 368 00:20:26.040 --> 00:20:28.000 en cierto modo prepara todo 369 00:20:28.300 --> 00:20:30.170 ue necesita para iniciar Docker. 370 00:20:30.459 --> 00:20:35.750 n general, para las últimas versiones de Windows, Mac o cualquier sistema operativo. 371 00:20:35.859 --> 00:20:39.800 ebería ser bastante fácil y sencillo instalar Docker. 372 00:20:40.079 --> 00:20:41.810 sí que adelante, hazlo. 373 00:20:42.030 --> 00:20:43.900 na vez que haya terminado con la instalación, 374 00:20:44.260 --> 00:20:48.180 implemente puede iniciar el servicio buscando en Docker. 375 00:20:48.439 --> 00:20:49.579 si hago clic en él, 376 00:20:49.849 --> 00:20:51.420 o verás aquí 377 00:20:51.660 --> 00:20:53.030 ue en realidad es 378 00:20:53.500 --> 00:20:56.640 uesta en marcha. Servicio Docker para el motor Docker. 379 00:20:58.359 --> 00:20:59.540 ahí lo tienes, 380 00:21:00.020 --> 00:21:00.810 stá funcionando, 381 00:21:01.130 --> 00:21:05.000 esta vista en la que están viendo en esta ventana es 382 00:21:05.010 --> 00:21:08.439 n realidad, la interfaz gráfica de usuario de Docker que mencioné. 383 00:21:08.599 --> 00:21:13.079 se es el cliente que puede usar para interactuar con el motor Docker. 384 00:21:13.199 --> 00:21:17.500 sí que tiene una lista de contenedores en ejecución actualmente, por lo que no hay ninguna lista, 385 00:21:17.770 --> 00:21:21.689 o mismo con las imágenes. Si cambio a imágenes, he limpiado 386 00:21:21.699 --> 00:21:25.270 sí que empiezo con scratch con un estado vacío igual que tú. 387 00:21:25.660 --> 00:21:28.790 sí que estamos listos para empezar a usar el más oscuro. 388 00:21:28.890 --> 00:21:32.229 ero primero te preguntarás qué son las imágenes, 389 00:21:32.239 --> 00:21:34.189 eso es lo que voy a explicar a continuación, 390 00:21:34.199 --> 00:21:36.589 orque es un concepto muy importante en la oscuridad 391 00:21:40.400 --> 00:21:45.640 hora significa que Docker permite empaquetar la aplicación con su entorno 392 00:21:45.650 --> 00:21:50.569 onfiguración en este paquete que puede compartir y distribuir fácilmente. 393 00:21:50.910 --> 00:21:53.050 sí que, al igual que un archivo de artefacto de aplicación, 394 00:21:53.060 --> 00:21:56.790 omo cuando creamos un archivo zip o tar o un archivo jar, 395 00:21:56.800 --> 00:22:00.800 ue puede cargar en un almacenamiento de artefactos y, a continuación 396 00:22:00.810 --> 00:22:03.670 escárguelo en el servidor o localmente cuando lo necesite. 397 00:22:03.859 --> 00:22:09.880 ese paquete o artefacto que producimos con Docker se llama imagen de Docker. 398 00:22:09.890 --> 00:22:12.500 sí que es básicamente un artefacto de aplicación 399 00:22:12.790 --> 00:22:15.439 ero diferente del archivo Jar 400 00:22:15.569 --> 00:22:17.619 de otros artefactos de aplicación. 401 00:22:17.839 --> 00:22:21.390 o solo tiene el código de la aplicación compilado en su interior, 402 00:22:21.469 --> 00:22:24.119 ero además tiene información sobre 403 00:22:24.219 --> 00:22:26.079 a configuración del entorno. 404 00:22:26.270 --> 00:22:29.719 iene la capa de aplicación del sistema operativo, como mencioné, 405 00:22:29.729 --> 00:22:34.900 ás herramientas como el nodo N, PM o el tiempo de ejecución de Java 406 00:22:35.045 --> 00:22:35.625 nstalado en eso, 407 00:22:35.635 --> 00:22:39.135 egún el lenguaje de programación en el que se haya escrito la aplicación. 408 00:22:39.344 --> 00:22:42.364 or ejemplo, si tiene una aplicación de JavaScript, 409 00:22:42.545 --> 00:22:46.935 ecesitaría los nodos Js y N PM para ejecutar su aplicación correctamente, 410 00:22:47.285 --> 00:22:52.625 ntonces, en la imagen más oscura, ya tendrías el nodo y el N PM instalados. 411 00:22:52.824 --> 00:22:57.234 ambién puede agregar las variables de entorno que necesite su aplicación. 412 00:22:57.439 --> 00:22:58.939 uede crear directorios. 413 00:22:58.949 --> 00:23:02.300 uede crear archivos o cualquier otro entorno 414 00:23:02.310 --> 00:23:05.699 onfigure lo que necesite en torno a su aplicación. 415 00:23:05.849 --> 00:23:10.250 ntonces, toda esa información está empaquetada en la imagen de Docker, 416 00:23:10.260 --> 00:23:12.229 unto con el código de la aplicación, 417 00:23:12.550 --> 00:23:15.810 esa es la gran ventaja de Docker de la que hablamos. 418 00:23:15.829 --> 00:23:18.719 como dije, el paquete se llama imagen. 419 00:23:19.219 --> 00:23:22.410 ntonces, si eso es una imagen, ¿qué es un contenedor? 420 00:23:22.670 --> 00:23:26.300 ueno, necesitamos iniciar ese paquete de aplicaciones en alguna parte, ¿verdad? 421 00:23:26.420 --> 00:23:30.329 ntonces, cuando tomamos ese paquete o imagen y lo descargamos 422 00:23:30.339 --> 00:23:34.140 un servidor o a su computadora portátil local, 423 00:23:34.150 --> 00:23:36.089 ueremos ejecutarlo en la computadora. 424 00:23:36.150 --> 00:23:38.050 a aplicación tiene que ejecutarse realmente. 425 00:23:38.619 --> 00:23:41.920 cuando ejecutamos esa imagen en un sistema operativo 426 00:23:42.099 --> 00:23:45.209 la aplicación interna comienza en la versión preliminar 427 00:23:45.219 --> 00:23:48.729 ntorno configurado que nos proporciona un contenedor. 428 00:23:48.959 --> 00:23:53.250 ntonces, una instancia en ejecución de una imagen es un contenedor. 429 00:23:53.260 --> 00:23:58.349 ntonces, un contenedor es básicamente una instancia en ejecución de una imagen y 430 00:23:58.359 --> 00:24:02.969 partir de la misma imagen de una imagen, puede ejecutar varios contenedores, 431 00:24:02.979 --> 00:24:06.030 que es un caso de uso legítimo si necesita ejecutar 432 00:24:06.180 --> 00:24:10.489 arias instancias de la misma aplicación para aumentar el rendimiento, 433 00:24:10.500 --> 00:24:13.415 or ejemplo, y eso es exactamente lo que estábamos viendo aquí. 434 00:24:13.425 --> 00:24:18.135 sí que tenemos las imágenes. Estos son los paquetes de aplicaciones, básicamente 435 00:24:18.275 --> 00:24:20.234 luego a partir de esas imágenes podemos comenzar 436 00:24:20.244 --> 00:24:23.694 ontenedores que veremos en la lista aquí, 437 00:24:23.704 --> 00:24:26.974 ue son instancias en ejecución de esas imágenes. 438 00:24:27.244 --> 00:24:28.645 también dije que 439 00:24:28.834 --> 00:24:31.535 demás de la interfaz gráfica de usuario, 440 00:24:31.545 --> 00:24:35.864 btenemos una interfaz de línea de comandos client do client que puede hablar con do 441 00:24:36.204 --> 00:24:36.444 otor. 442 00:24:36.939 --> 00:24:37.650 443 00:24:37.819 --> 00:24:40.130 esde que instalamos el escritorio Docker, 444 00:24:40.140 --> 00:24:43.670 eberíamos tener esa CLI de Docker también disponible localmente, 445 00:24:43.680 --> 00:24:47.910 o que significa que si abre su terminal, debería poder ejecutar comandos de Docker 446 00:24:48.189 --> 00:24:50.619 documentos. Podemos hacer cualquier cosa 447 00:24:50.630 --> 00:24:54.594 or ejemplo, podemos comprobar qué imágenes tenemos disponibles localmente. 448 00:24:54.604 --> 00:25:00.035 ntonces, si hago imágenes de Docker, me dará una lista de las imágenes que tengo localmente, 449 00:25:00.064 --> 00:25:04.484 , en este caso, no tengo ninguno que hayamos visto en la interfaz gráfica de usuario. 450 00:25:04.494 --> 00:25:08.405 también puedo verificar los contenedores usando un docker de comandos, 451 00:25:09.280 --> 00:25:10.390 S 452 00:25:11.640 --> 00:25:12.250 nuevamente, 453 00:25:12.479 --> 00:25:14.969 odavía no tengo ningún contenedor en ejecución. 454 00:25:15.260 --> 00:25:18.020 hora, antes de continuar, quiero saludar a Net 455 00:25:18.150 --> 00:25:19.000 Hopper. Los más 456 00:25:19.349 --> 00:25:21.109 lataforma en la nube, llamada 457 00:25:21.489 --> 00:25:21.589 n los gobernadores 458 00:25:21.689 --> 00:25:27.890 peraciones de aplicaciones, ofrece una forma sencilla para que los equipos de DevOps entreguen, administren, 459 00:25:27.900 --> 00:25:32.699 ctualice, conecte, proteja y supervise las aplicaciones en uno o más kits 460 00:25:33.030 --> 00:25:33.750 lústeres. 461 00:25:34.160 --> 00:25:38.349 on esta plataforma, básicamente crean esta capa de red virtual 462 00:25:38.459 --> 00:25:40.739 ue conecta varios entornos. 463 00:25:40.839 --> 00:25:44.510 or ejemplo, si tiene varias plataformas en la nube y varias 464 00:25:44.880 --> 00:25:48.170 lústeres, incluso su propio centro de datos local, 465 00:25:48.180 --> 00:25:50.050 onde se implementa su aplicación, 466 00:25:50.239 --> 00:25:55.795 uede conectar todo esto en una red virtual para poder implementarlo y operarlo 467 00:25:55.805 --> 00:25:58.775 as cargas de trabajo de su comunidad como si estuviera en 468 00:25:58.785 --> 00:26:02.584 n clúster o un entorno de infraestructura y ya está 469 00:26:02.704 --> 00:26:06.594 l enfoque centrado en arriba que utilizan ofrece la visibilidad necesaria para saber quién 470 00:26:06.604 --> 00:26:10.375 izo qué y cuándo tanto para su infraestructura como para su aplicación. 471 00:26:10.599 --> 00:26:14.209 ntonces, con Net Hopper, las empresas pueden automatizar sus operaciones. 472 00:26:14.219 --> 00:26:17.010 en lugar de construir una plataforma propia, 473 00:26:17.020 --> 00:26:20.550 os equipos de DevOps pueden centrarse en lo que más importa, 474 00:26:20.560 --> 00:26:24.109 ue está lanzando más funciones de la aplicación más rápido. 475 00:26:24.349 --> 00:26:29.300 sí que échales un vistazo. De hecho, puedes registrarte para obtener una cuenta gratuita y probarla 476 00:26:29.500 --> 00:26:32.569 ara ver si Net Hopper es la solución adecuada para usted. 477 00:26:36.239 --> 00:26:39.729 hora está claro que obtenemos contenedores al ejecutar imágenes, 478 00:26:40.069 --> 00:26:43.709 ero, ¿cómo obtenemos imágenes desde las que ejecutar contenedores? 479 00:26:44.189 --> 00:26:45.489 igamos que queremos correr 480 00:26:46.160 --> 00:26:47.739 n contenedor de base de datos o 481 00:26:47.989 --> 00:26:52.449 algún contenedor de servicio colector de cerraduras. ¿Cómo obtenemos sus imágenes 482 00:26:52.689 --> 00:26:55.829 ueno, ahí es donde entran en juego los registros de Docker. 483 00:26:56.150 --> 00:27:02.949 or lo tanto, hay imágenes de Docker listas para usar disponibles en línea en un almacenamiento o registro de imágenes. 484 00:27:03.000 --> 00:27:09.050 ásicamente, este es un almacenamiento específico para artefactos de imágenes más oscuras, 485 00:27:09.430 --> 00:27:12.209 , por lo general, las empresas que desarrollan esos servicios 486 00:27:12.459 --> 00:27:13.209 omo listo 487 00:27:13.829 --> 00:27:16.349 etcétera, así como Docker. 488 00:27:16.359 --> 00:27:21.939 a propia comunidad creará lo que se denomina imágenes oficiales. 489 00:27:22.319 --> 00:27:24.420 a imagen fue creada realmente por 490 00:27:24.959 --> 00:27:27.060 l mismo o la comunidad de Docker. 491 00:27:27.130 --> 00:27:31.689 sí que ya sabes, es una imagen oficial verificada del propio Docker. 492 00:27:31.699 --> 00:27:36.160 el propio Docker ofrece el registro de Docker más grande 493 00:27:36.270 --> 00:27:37.930 lamado Docker Hub, 494 00:27:37.939 --> 00:27:42.119 onde puedes encontrar cualquiera de estas imágenes oficiales y muchas otras 495 00:27:42.130 --> 00:27:44.849 mágenes de diferentes empresas o individuos 496 00:27:44.859 --> 00:27:48.410 os desarrolladores han creado y subido allí. 497 00:27:48.959 --> 00:27:51.089 ntonces, si buscamos Dark Hub 498 00:27:51.489 --> 00:27:55.930 quí mismo, verá la biblioteca de imágenes de doctor Hub Container. 499 00:27:57.449 --> 00:27:58.089 500 00:27:58.319 --> 00:27:59.530 sí es como se ve. 501 00:27:59.540 --> 00:28:02.189 en realidad no tiene que registrarse o firmar 502 00:28:02.199 --> 00:28:05.239 ube a Dock Hub para encontrar las imágenes oficiales. 503 00:28:05.250 --> 00:28:10.250 sí que cualquiera puede ir a este sitio web y, básicamente, explorar las imágenes del contenedor. 504 00:28:10.290 --> 00:28:12.380 aquí en la barra de búsqueda, 505 00:28:12.500 --> 00:28:16.339 uede escribir cualquier servicio que esté buscando. Por ejemplo, ¿listo 506 00:28:16.569 --> 00:28:17.560 ue mencioné. 507 00:28:17.689 --> 00:28:19.479 si presiono enter, 508 00:28:19.640 --> 00:28:21.180 ásicamente verás un 509 00:28:21.530 --> 00:28:27.430 ista de varias imágenes relacionadas listas, así como el propio servicio de preparación 510 00:28:27.829 --> 00:28:29.520 omo una imagen más oscura. 511 00:28:29.530 --> 00:28:34.359 aquí tienes este lote o etiqueta que dice imagen oficial más oscura, por ejemplo, 512 00:28:34.369 --> 00:28:36.959 ara la imagen más roja que vamos a elegir aquí, 513 00:28:36.969 --> 00:28:40.319 uede ver que en realidad lo mantiene la comunidad de Docker. 514 00:28:40.329 --> 00:28:44.780 a forma en que funciona es que Docker tiene un equipo dedicado que es responsable 515 00:28:44.885 --> 00:28:50.344 ara revisar y publicar todo el contenido en las imágenes oficiales más oscuras. 516 00:28:50.354 --> 00:28:54.704 este equipo trabaja en colaboración con los creadores de la tecnología, 517 00:28:54.714 --> 00:28:57.954 mantenedores, así como expertos en seguridad 518 00:28:58.064 --> 00:29:01.864 ara crear y gestionar esas imágenes oficiales más oscuras. 519 00:29:02.329 --> 00:29:05.890 e esta manera, se garantiza que no solo 520 00:29:05.900 --> 00:29:09.959 os creadores de tecnología participan en la creación oficial de la imagen, 521 00:29:10.000 --> 00:29:14.099 ero también toda la seguridad, las mejores prácticas y la producción más oscuras. 522 00:29:14.109 --> 00:29:17.959 as mejores prácticas también se consideran en la creación de imágenes, 523 00:29:18.189 --> 00:29:22.890 esa es básicamente la página de descripción con todos los 524 00:29:22.900 --> 00:29:25.849 nformación sobre cómo usar esta imagen más oscura, 525 00:29:25.859 --> 00:29:27.500 ué incluye, etcétera 526 00:29:28.199 --> 00:29:32.989 nuevamente, como dije, Docker Hub es el registro de imágenes de Docker más grande, 527 00:29:33.000 --> 00:29:36.319 ara que puedas encontrar imágenes para cualquier servicio que desees 528 00:29:36.459 --> 00:29:38.689 uiero usarlo en Docker Hub. 529 00:29:38.910 --> 00:29:39.859 hora, por supuesto, 530 00:29:39.869 --> 00:29:45.560 a tecnología cambia y hay actualizaciones en las aplicaciones de esas tecnologías. 531 00:29:45.589 --> 00:29:47.910 sí que tienes una nueva versión del rojo 532 00:29:48.040 --> 00:29:49.270 mango a B, 533 00:29:49.660 --> 00:29:51.380 en ese caso un nuevo 534 00:29:51.650 --> 00:29:53.390 e creará la imagen del realizador, 535 00:29:53.760 --> 00:29:56.869 or lo que las imágenes también son versiones, 536 00:29:57.199 --> 00:29:59.640 se denominan etiquetas de imagen. 537 00:29:59.660 --> 00:30:03.709 en la página de cada imagen, en realidad 538 00:30:03.719 --> 00:30:08.069 ienen la lista de versiones o etiquetas de esa imagen 539 00:30:08.250 --> 00:30:09.829 e enumeran aquí. 540 00:30:09.939 --> 00:30:11.000 ntonces esto es para 541 00:30:11.849 --> 00:30:14.079 si busco um Post, 542 00:30:14.430 --> 00:30:15.339 or ejemplo, 543 00:30:19.199 --> 00:30:21.890 erás diferentes etiquetas de imagen para 544 00:30:22.319 --> 00:30:24.089 a imagen res también se muestra aquí. 545 00:30:24.630 --> 00:30:29.430 ntonces, cuando utiliza una tecnología y necesita una versión específica, puede elegir 546 00:30:29.650 --> 00:30:33.189 na imagen más oscura que tiene esa versión de la tecnología. 547 00:30:33.290 --> 00:30:37.660 hay una etiqueta especial que tienen todas las imágenes 548 00:30:37.790 --> 00:30:41.890 lamado último. Así que aquí puedes ver esta última etiqueta 549 00:30:42.280 --> 00:30:44.469 aquí también en el texto reciente. 550 00:30:44.819 --> 00:30:50.750 sí que la última etiqueta es básicamente la última, la última imagen que se creó. 551 00:30:50.760 --> 00:30:54.589 or lo tanto, si no especifica o elige una versión de forma explícita, 552 00:30:54.729 --> 00:30:58.089 ásicamente obtienes la imagen más reciente del centro de Docker. 553 00:30:58.099 --> 00:31:00.719 hora hemos visto qué son las imágenes 554 00:31:00.930 --> 00:31:03.030 dónde puede conseguirlos. 555 00:31:03.050 --> 00:31:04.229 sí que ahora la pregunta es, 556 00:31:04.239 --> 00:31:09.113 cómo obtenemos realmente la imagen de Docker Hub y la descargamos? 557 00:31:09.123 --> 00:31:13.083 ocalmente en nuestra computadora para que podamos iniciar un contenedor a partir de esa imagen. 558 00:31:13.192 --> 00:31:19.912 rimero localizamos la imagen que queremos ejecutar como contenedor local para nuestra demostración. 559 00:31:19.922 --> 00:31:21.213 oy a usar un motor 560 00:31:21.453 --> 00:31:24.253 magen. Así que adelante y busca Engine, 561 00:31:24.883 --> 00:31:28.625 ue es básicamente un servidor web simple y tiene una interfaz de usuario 562 00:31:28.916 --> 00:31:32.635 ntonces podremos acceder a nuestro contenedor desde 563 00:31:32.645 --> 00:31:36.005 l navegador para validar El contenedor se inició correctamente. 564 00:31:36.176 --> 00:31:37.286 or eso elijo el motor, 565 00:31:38.145 --> 00:31:41.145 aquí tienes un montón de etiquetas de imagen 566 00:31:41.735 --> 00:31:42.845 ntre las que puede elegir. 567 00:31:43.095 --> 00:31:48.676 ntonces, el segundo paso después de localizar la imagen es elegir una tecnología de imagen específica 568 00:31:49.270 --> 00:31:51.150 tenga en cuenta que seleccionar 569 00:31:51.420 --> 00:31:56.300 na versión específica de la imagen es la mejor práctica en la mayoría de los casos. 570 00:31:56.359 --> 00:32:00.699 digamos que elegimos la versión 1.23. 571 00:32:00.709 --> 00:32:05.040 sí que vamos a elegir esta etiqueta aquí mismo para descargar una imagen. 572 00:32:05.050 --> 00:32:09.140 olvemos a nuestra terminal y ejecutamos Docker 573 00:32:09.510 --> 00:32:13.819 xtraiga el comando y especificamos el nombre de la imagen, 574 00:32:13.939 --> 00:32:14.920 ue es 575 00:32:15.040 --> 00:32:15.900 otor X. 576 00:32:16.619 --> 00:32:18.900 sí que también tienes todo ese comando aquí, 577 00:32:18.930 --> 00:32:22.229 sí que ese es básicamente el nombre de la imagen que ha escrito aquí. 578 00:32:22.449 --> 00:32:23.910 sí que eso es NGX. 579 00:32:24.310 --> 00:32:25.030 luego 580 00:32:25.170 --> 00:32:30.000 specificamos la etiqueta de la imagen separándola con dos puntos 581 00:32:30.219 --> 00:32:31.439 , a continuación, la versión 582 00:32:31.630 --> 00:32:34.089 1,23. Eso es lo que elegimos 583 00:32:34.530 --> 00:32:38.520 se es todo el comando. Entonces, Docker Client se pondrá en contacto con do 584 00:32:38.699 --> 00:32:41.829 ub y dirán: Quiero agarrar 585 00:32:41.979 --> 00:32:42.670 l motor 586 00:32:42.810 --> 00:32:47.760 magen con esta etiqueta específica y descárguela localmente. 587 00:32:49.869 --> 00:32:53.609 aquí vemos que está extrayendo la imagen de 588 00:32:53.869 --> 00:32:56.500 l centro de Docker del registro de imágenes. 589 00:32:56.750 --> 00:32:59.890 la razón por la que no tenemos que decirle a Docker que 590 00:33:00.010 --> 00:33:04.819 ncontrar esa imagen en Docker Hub se debe a que Docker Hub es en realidad el predeterminado 591 00:33:04.989 --> 00:33:10.300 bicación donde Docker buscará las imágenes que especifiquemos aquí. 592 00:33:10.579 --> 00:33:13.839 or lo tanto, se configura automáticamente como una ubicación para 593 00:33:13.849 --> 00:33:17.579 escargando las imágenes y se produjo la descarga. 594 00:33:17.949 --> 00:33:22.770 ahora, si volvemos a ejecutar el comando docker images, como hicimos aquí, 595 00:33:23.050 --> 00:33:26.890 eberíamos ver una imagen ahora localmente, que es el motor 596 00:33:27.430 --> 00:33:29.060 on una etiqueta de imagen 597 00:33:29.180 --> 00:33:30.760 .23 598 00:33:31.030 --> 00:33:34.089 alguna otra información como el tamaño de la imagen, 599 00:33:34.260 --> 00:33:37.010 ue suele estar en megabytes, 600 00:33:37.119 --> 00:33:38.079 omo mencioné. 601 00:33:38.199 --> 00:33:40.140 sí que ahora tenemos una imagen localmente, 602 00:33:40.489 --> 00:33:45.540 si extraemos una imagen sin ninguna etiqueta específica, 603 00:33:45.900 --> 00:33:49.959 sí que hacemos esto, básicamente, Docker extrae un nombre de la imagen. 604 00:33:49.969 --> 00:33:54.880 si ejecuto esto, verá que extrae la última imagen automáticamente. 605 00:33:55.060 --> 00:33:56.459 ahora, si lo hago 606 00:33:56.660 --> 00:33:57.760 mágenes de nuevo, 607 00:33:58.160 --> 00:34:01.329 amos a ver dos imágenes del motor 608 00:34:02.140 --> 00:34:04.140 on dos textos diferentes, 609 00:34:04.329 --> 00:34:08.438 verdad? Así que estas son en realidad dos imágenes separadas 610 00:34:08.668 --> 00:34:09.120 enial. 611 00:34:09.129 --> 00:34:10.899 hora tenemos imágenes localmente, 612 00:34:10.909 --> 00:34:15.958 ero obviamente solo son útiles cuando los ejecutamos en un entorno de contenedores. 613 00:34:15.969 --> 00:34:18.719 Cómo podemos hacer eso? También es muy 614 00:34:18.899 --> 00:34:22.449 legimos la imagen que ya tenemos disponible localmente 615 00:34:22.560 --> 00:34:25.280 on la etiqueta. Así que digamos que queremos correr 616 00:34:25.429 --> 00:34:27.120 sta imagen como contenedor 617 00:34:27.489 --> 00:34:30.830 ejecutamos el comando dark run 618 00:34:30.978 --> 00:34:31.280 619 00:34:31.429 --> 00:34:33.399 on el nombre de la imagen 620 00:34:33.639 --> 00:34:35.030 la etiqueta 621 00:34:35.830 --> 00:34:37.050 úper fácil 622 00:34:37.530 --> 00:34:38.790 ejecutemos. 623 00:34:39.050 --> 00:34:42.978 ese comando realmente inicia el contenedor en función de la imagen. 624 00:34:43.040 --> 00:34:46.239 sabemos que el contenedor se inició porque vemos el 625 00:34:46.250 --> 00:34:50.958 egistros del servicio del motor que se inician dentro del contenedor. 626 00:34:50.989 --> 00:34:54.159 sí que estos son en realidad los registros de contenedores que vemos en la consola. 627 00:34:54.320 --> 00:34:56.260 sí que está lanzando un par de scripts, 628 00:34:57.610 --> 00:35:03.669 aquí tenemos los procesos de trabajo iniciales y el contenedor se está ejecutando. 629 00:35:04.060 --> 00:35:05.159 sí que ahora 630 00:35:05.379 --> 00:35:07.820 i abro una nueva sesión de terminal 631 00:35:08.199 --> 00:35:09.030 e gusta esto 632 00:35:09.330 --> 00:35:09.939 633 00:35:10.580 --> 00:35:11.330 azlo 634 00:35:11.679 --> 00:35:12.629 S, 635 00:35:13.860 --> 00:35:16.699 e hecho, debería ver un contenedor, 636 00:35:16.850 --> 00:35:17.840 ste de aquí 637 00:35:18.290 --> 00:35:20.469 n la lista de contenedores en ejecución, 638 00:35:20.820 --> 00:35:23.679 tenemos información sobre el contenedor. 639 00:35:23.800 --> 00:35:26.709 enemos la imagen en la que se basa el contenedor, 640 00:35:26.719 --> 00:35:29.409 ncluida la tecnología cuando se creó 641 00:35:29.610 --> 00:35:34.689 también el nombre del contenedor. Así que tenemos el ID y el nombre del contenedor 642 00:35:34.860 --> 00:35:38.729 ste es el nombre que docker realmente usa automáticamente 643 00:35:38.969 --> 00:35:42.409 enera y asigna un contenedor cuando se crea. 644 00:35:42.800 --> 00:35:45.060 sí que es un nombre generado aleatoriamente. 645 00:35:45.669 --> 00:35:50.469 hora, si vuelvo aquí, verá que estos troncos, los troncos de contenedores, 646 00:35:50.479 --> 00:35:52.780 n realidad están bloqueando el terminal. 647 00:35:52.969 --> 00:35:57.879 ntonces, si quiero recuperar la terminal y controlar la salida C, 648 00:35:57.889 --> 00:36:01.179 l contenedor sale y el proceso realmente muere. 649 00:36:01.189 --> 00:36:02.020 sí que ahora, si lo hago 650 00:36:02.239 --> 00:36:05.739 D, verá que no hay ningún contenedor en ejecución. 651 00:36:06.219 --> 00:36:08.129 ero podemos iniciar un contenedor 652 00:36:08.260 --> 00:36:12.209 n segundo plano sin que bloquee el terminal agregando 653 00:36:13.050 --> 00:36:14.760 na bandera llamada menos D, 654 00:36:15.010 --> 00:36:16.610 ue significa separado. 655 00:36:16.729 --> 00:36:19.810 or lo tanto, separa el proceso de Docker de la terminal. 656 00:36:20.389 --> 00:36:21.600 si ejecuto esto, 657 00:36:21.840 --> 00:36:25.550 es que ya no bloquea el terminal. 658 00:36:25.699 --> 00:36:29.959 en lugar de mostrar los registros del motor X arrancando dentro del contenedor, 659 00:36:29.969 --> 00:36:31.020 implemente se bloquea 660 00:36:31.179 --> 00:36:34.780 a identificación completa del contenedor. Así que ahora, si lo hago 661 00:36:34.959 --> 00:36:35.689 S 662 00:36:35.949 --> 00:36:39.219 quí en la misma terminal, debería ver ese contenedor 663 00:36:39.439 --> 00:36:40.620 orriendo de nuevo. 664 00:36:41.060 --> 00:36:46.729 ese es básicamente el ID o la parte de esta cadena de ID completa 665 00:36:46.919 --> 00:36:48.010 e muestra aquí. 666 00:36:48.219 --> 00:36:52.209 ero cuando iniciamos un contenedor en segundo plano en modo independiente, 667 00:36:52.239 --> 00:36:56.550 s posible que aún desee ver los registros de la aplicación dentro del contenedor, 668 00:36:56.580 --> 00:36:59.030 sí que quizás quiera ver cómo arrancó el motor la próxima vez. 669 00:36:59.040 --> 00:37:01.129 Qué aspecto tenía, en realidad, entonces? 670 00:37:01.340 --> 00:37:05.629 ara eso, puede usar otro comando de Docker llamado Docker logs 671 00:37:06.199 --> 00:37:08.489 on el ID del contenedor 672 00:37:08.590 --> 00:37:09.370 e gusta esto, 673 00:37:10.159 --> 00:37:14.159 imprimirá los registros de la aplicación desde el contenedor. 674 00:37:14.530 --> 00:37:17.229 hora, para crear el contenedor 675 00:37:17.540 --> 00:37:22.340 ontenedor, primero extraemos la imagen y, a continuación, creamos un contenedor a partir de esa imagen. 676 00:37:22.560 --> 00:37:23.199 Pero 677 00:37:23.429 --> 00:37:26.469 odemos ahorrarnos el comando pull 678 00:37:26.739 --> 00:37:28.169 ejecutar 679 00:37:28.360 --> 00:37:33.600 jecute el comando directamente, incluso si la imagen no está disponible localmente. 680 00:37:34.010 --> 00:37:37.169 hora mismo tenemos estas dos imágenes disponibles localmente, 681 00:37:37.479 --> 00:37:39.159 ero en el comando Docker run, 682 00:37:39.169 --> 00:37:43.290 e hecho, puede proporcionar cualquier imagen que exista en Docker Hub. 683 00:37:43.370 --> 00:37:47.159 o necesariamente tiene que existir localmente en su computadora, 684 00:37:47.169 --> 00:37:49.080 ara que no tengas que hacer eso primero. 685 00:37:49.090 --> 00:37:52.419 ntonces, si vuelvo, podemos elegir una versión de imagen diferente. 686 00:37:52.429 --> 00:37:56.780 lijamos 1.22 dash alpine, 687 00:37:56.969 --> 00:37:57.489 sí que 688 00:37:58.780 --> 00:38:00.139 sta etiqueta de imagen, 689 00:38:00.639 --> 00:38:02.610 ue no tenemos localmente 690 00:38:03.120 --> 00:38:07.370 Por supuesto, este puede ser un servicio completamente diferente. No importa. 691 00:38:07.489 --> 00:38:10.189 ásicamente cualquier imagen que no tengamos localmente 692 00:38:10.300 --> 00:38:13.729 uede ejecutar directamente mediante el comando docker run. 693 00:38:14.199 --> 00:38:17.159 ntonces, lo que hace es primero. Lo intentará 694 00:38:17.330 --> 00:38:18.879 ocaliza esa imagen 695 00:38:19.050 --> 00:38:19.830 nivel local, 696 00:38:19.969 --> 00:38:21.439 si no lo encuentra, 697 00:38:21.610 --> 00:38:24.949 rá al Docker hub de forma predeterminada 698 00:38:25.129 --> 00:38:29.129 extraiga la imagen desde allí automáticamente, lo cual es muy conveniente. 699 00:38:29.270 --> 00:38:35.590 ásicamente, hace ambas cosas en un solo comando. Así que descargó la imagen con esta 700 00:38:36.149 --> 00:38:38.169 inició el contenedor. 701 00:38:38.520 --> 00:38:40.989 ahora, si hacemos Docker PS, 702 00:38:41.129 --> 00:38:44.770 eberíamos tener dos contenedores ejecutándose con diferentes 703 00:38:45.239 --> 00:38:46.169 ersiones. 704 00:38:46.639 --> 00:38:47.889 recuerda, dije: 705 00:38:47.899 --> 00:38:52.239 ocker resuelve el problema de ejecutar diferentes versiones de la misma aplicación 706 00:38:52.580 --> 00:38:56.159 la vez. Así de simple es hacerlo con Docker 707 00:38:56.479 --> 00:38:59.659 ara que podamos hacer clic en este contenedor. 708 00:39:00.030 --> 00:39:00.689 709 00:39:00.939 --> 00:39:02.520 hora, nuevamente, tenemos 710 00:39:02.639 --> 00:39:06.419 se contenedor de un motor con esta versión. 711 00:39:09.929 --> 00:39:14.500 hora la pregunta importante es, ¿cómo accedemos a este contenedor? 712 00:39:14.510 --> 00:39:16.449 ueno, no podemos ahora 713 00:39:16.770 --> 00:39:19.459 orque el contenedor se ejecuta en 714 00:39:19.590 --> 00:39:25.659 a red Docker cerrada, por lo que no podemos acceder a ella desde el navegador de nuestra computadora local, 715 00:39:25.669 --> 00:39:26.449 or ejemplo, 716 00:39:26.479 --> 00:39:29.780 rimero necesitamos exponer el contenedor a nuestro 717 00:39:29.790 --> 00:39:33.100 ed local que puede sonar un poco difícil, 718 00:39:33.110 --> 00:39:34.639 ero es muy fácil. 719 00:39:34.860 --> 00:39:38.360 ásicamente, vamos a hacer lo que se llama enlace de puertos. 720 00:39:38.870 --> 00:39:42.060 l contenedor se ejecuta en algún puerto, ¿verdad? 721 00:39:42.270 --> 00:39:46.979 cada aplicación tiene un puerto estándar en el que se ejecuta, 722 00:39:47.179 --> 00:39:47.770 omo motor 723 00:39:47.969 --> 00:39:48.830 plicación 724 00:39:48.989 --> 00:39:51.169 iempre se ejecuta en el puerto 80 Red 725 00:39:51.370 --> 00:39:52.500 e ejecuta en el puerto 726 00:39:52.669 --> 00:39:55.290 379. 727 00:39:55.439 --> 00:39:58.169 or lo tanto, estos son puertos estándar para estas aplicaciones. 728 00:39:58.179 --> 00:40:02.169 sí que ese es el puerto en el que se ejecuta el contenedor. 729 00:40:02.489 --> 00:40:03.020 para 730 00:40:03.489 --> 00:40:08.179 emos los puertos en la lista de puertos aquí, la aplicación se ejecuta en el puerto A 731 00:40:08.280 --> 00:40:12.159 entro del contenedor. Así que ahora, si intento acceder 732 00:40:12.379 --> 00:40:12.489 otor 733 00:40:12.850 --> 00:40:13.719 dor 12.850 734 00:40:14.090 --> 00:40:17.409 n este puerto en el puerto 80 desde el navegador 735 00:40:19.100 --> 00:40:20.989 intentemos hacer eso 736 00:40:21.219 --> 00:40:22.110 Puerto 80 737 00:40:22.719 --> 00:40:23.620 ulsa enter. 738 00:40:23.760 --> 00:40:26.689 es que no hay nada disponible en este puerto 739 00:40:26.830 --> 00:40:29.969 en el host local. Así que ahora podemos decírselo 740 00:40:30.360 --> 00:40:33.989 ye, ¿sabes qué? 741 00:40:34.520 --> 00:40:36.879 nuestro anfitrión local en 742 00:40:37.020 --> 00:40:42.689 ualquier puerto que les diga en algún puerto específico como 80 80 o 9000, 743 00:40:42.699 --> 00:40:47.699 n realidad no importa para poder acceder al contenedor o lo que sea que se esté ejecutando 744 00:40:47.709 --> 00:40:52.860 entro del contenedor como si se estuviera ejecutando en mi puerto de host local 9000. 745 00:40:53.030 --> 00:40:57.750 lo hacemos con una bandera adicional al crear 746 00:40:57.870 --> 00:40:59.290 n recipiente más oscuro. 747 00:40:59.800 --> 00:41:00.379 sí que 748 00:41:00.729 --> 00:41:04.689 o que vamos a hacer es primero detener este contenedor 749 00:41:05.750 --> 00:41:08.379 cree uno nuevo. Así que vamos 750 00:41:08.929 --> 00:41:09.800 ual 751 00:41:10.489 --> 00:41:13.169 ásicamente detiene este contenedor en ejecución, 752 00:41:13.550 --> 00:41:15.820 vamos a crear un nuevo contenedor. 753 00:41:16.570 --> 00:41:17.989 sí que vamos a hacer 754 00:41:18.169 --> 00:41:18.669 orrer 755 00:41:19.050 --> 00:41:19.979 otor X 756 00:41:20.949 --> 00:41:21.870 a misma versión 757 00:41:22.179 --> 00:41:25.520 lo encontraremos en segundo plano en el modo de separación. 758 00:41:25.530 --> 00:41:31.040 hora vamos a vincular los puertos con un movimiento adicional menos P, 759 00:41:31.080 --> 00:41:32.110 es muy fácil. 760 00:41:32.120 --> 00:41:33.290 e estamos diciendo a Docker 761 00:41:33.689 --> 00:41:34.439 l 762 00:41:34.679 --> 00:41:35.120 otor 763 00:41:35.389 --> 00:41:36.800 uerto de aplicaciones 764 00:41:37.219 --> 00:41:38.760 entro del contenedor, que es un 765 00:41:39.429 --> 00:41:41.699 or favor, toma eso y encuadernalo 766 00:41:41.969 --> 00:41:44.399 n un anfitrión o anfitrión local 767 00:41:44.629 --> 00:41:47.929 n cualquier puerto. 9000, por ejemplo. 768 00:41:48.149 --> 00:41:49.500 se es el puerto que elijo. 769 00:41:49.830 --> 00:41:52.110 ntonces, esta bandera aquí 770 00:41:52.330 --> 00:41:58.679 ealmente expondrá el contenedor a nuestra red local o host local. 771 00:41:58.790 --> 00:41:59.560 sí que este motor 772 00:41:59.780 --> 00:42:04.669 l proceso que se ejecuta en el contenedor estará accesible para nosotros en el puerto 9000. 773 00:42:04.679 --> 00:42:06.840 ntonces, si ejecuto esto, 774 00:42:06.979 --> 00:42:09.219 eamos que el contenedor se está ejecutando, 775 00:42:09.719 --> 00:42:10.370 776 00:42:10.550 --> 00:42:15.590 n la sección de puertos vemos un valor diferente. Entonces, en lugar 777 00:42:15.919 --> 00:42:18.330 enemos esta información de enlace de puerto. 778 00:42:18.510 --> 00:42:23.510 ntonces, si olvidó qué puerto eligió. O si tiene 10 contenedores diferentes con 779 00:42:23.659 --> 00:42:24.090 S, 780 00:42:24.100 --> 00:42:29.270 ealmente puede ver en qué puerto se puede acceder a cada contenedor en su host local. 781 00:42:29.350 --> 00:42:31.429 sí que este será el puerto. 782 00:42:31.959 --> 00:42:34.629 hora, si vuelvo al navegador 783 00:42:35.000 --> 00:42:40.489 en lugar del host local 80 vamos a escribir local host 9000 784 00:42:41.320 --> 00:42:42.310 golpe. Entrar 785 00:42:42.830 --> 00:42:45.870 hí lo tienes. ¡Le damos la bienvenida a Engine 786 00:42:46.000 --> 00:42:50.129 ágina, significa que realmente estamos accediendo a nuestra aplicación. 787 00:42:50.389 --> 00:42:53.820 también podemos ver eso en los registros. Habla mucho 788 00:42:54.070 --> 00:42:55.330 D de contenedor. 789 00:42:55.919 --> 00:42:59.139 ahí lo tienes. Este es el registro. Uh, ese motor 790 00:42:59.459 --> 00:43:04.590 a aplicación produjo que recibió una solicitud de Mac o mía 791 00:43:04.770 --> 00:43:05.659 áquina con sistema operativo 792 00:43:05.929 --> 00:43:07.300 avegador Chrome. 793 00:43:07.739 --> 00:43:11.060 ntonces vemos que nuestra solicitud realmente llegó al 794 00:43:11.330 --> 00:43:11.540 otor 795 00:43:11.750 --> 00:43:14.229 plicación que se ejecuta dentro del contenedor. 796 00:43:14.350 --> 00:43:21.149 sí de fácil es ejecutar un servicio dentro de un contenedor y luego acceder a él localmente. 797 00:43:21.510 --> 00:43:24.159 hora, como dije, puedes elegir el puerto que quieras, 798 00:43:24.310 --> 00:43:28.449 ero también es prácticamente un estándar usar lo mismo 799 00:43:28.459 --> 00:43:33.439 uerto en su máquina host tal como lo está utilizando el contenedor. 800 00:43:33.489 --> 00:43:37.320 ntonces, si estuviera ejecutando un contenedor de MySQL que comenzara en 801 00:43:37.399 --> 00:43:44.310 uerto 3306 Lo vincularía al host local 3306. 802 00:43:44.659 --> 00:43:46.479 sí que eso es una especie de estándar. 803 00:43:50.399 --> 00:43:55.300 hora hay una cosa que quiero señalar aquí, y es que Docker ejecuta 804 00:43:55.770 --> 00:43:59.610 n realidad crea un nuevo contenedor cada vez. 805 00:43:59.620 --> 00:44:03.070 o reutiliza el contenedor que creamos anteriormente. 806 00:44:03.399 --> 00:44:08.080 o que significa que, dado que ya ejecutamos el comando Docker run un par de veces, 807 00:44:08.110 --> 00:44:11.239 n realidad deberíamos tener varios contenedores en nuestro 808 00:44:11.409 --> 00:44:17.530 ortátil. Sin embargo, si hago Docker P SI solo 809 00:44:17.540 --> 00:44:20.600 o veo los que creé pero detuve. 810 00:44:20.610 --> 00:44:22.870 ero esos contenedores todavía existen. 811 00:44:23.040 --> 00:44:25.030 ntonces, si hago docker PS 812 00:44:26.260 --> 00:44:27.959 on una mancha 813 00:44:28.189 --> 00:44:28.750 814 00:44:29.620 --> 00:44:30.669 ejecutar 815 00:44:30.810 --> 00:44:33.159 sto le da realmente una lista de todos 816 00:44:33.169 --> 00:44:37.159 ontenedores, ya sea que estén en ejecución o detenidos. 817 00:44:37.469 --> 00:44:39.189 sí que este es el contenedor activo 818 00:44:39.659 --> 00:44:40.770 ue todavía se está ejecutando 819 00:44:40.889 --> 00:44:42.979 estos son los parados. 820 00:44:42.989 --> 00:44:47.000 ncluso dice que salió hace 10 minutos, hace seis minutos. 821 00:44:47.149 --> 00:44:50.780 sí que tenemos cuatro contenedores con diferentes configuraciones 822 00:44:51.340 --> 00:44:53.639 anteriormente te mostré Docker stop 823 00:44:53.649 --> 00:44:57.679 omando que básicamente detiene un contenedor en ejecución activa 824 00:44:57.989 --> 00:44:59.399 ara que podamos detener este. 825 00:45:00.110 --> 00:45:02.399 ahora lo mostrará como 826 00:45:02.540 --> 00:45:05.620 n contenedor detenido también salió hace un segundo, 827 00:45:05.860 --> 00:45:06.639 ero de la misma manera. 828 00:45:06.649 --> 00:45:10.560 ambién puede reiniciar un contenedor que creó anteriormente 829 00:45:10.570 --> 00:45:12.989 in tener que crear uno nuevo con docker Run, 830 00:45:13.000 --> 00:45:13.370 ompromiso. 831 00:45:13.639 --> 00:45:16.040 ntonces, para eso tenemos un comienzo más oscuro 832 00:45:16.659 --> 00:45:17.340 833 00:45:17.510 --> 00:45:20.510 ue toma la ID del contenedor 834 00:45:21.360 --> 00:45:25.010 inicie el contenedor una y otra vez. Puede iniciar varios 835 00:45:25.439 --> 00:45:27.530 ontenedores a la vez si lo desea, 836 00:45:28.959 --> 00:45:29.770 e gusta esto. 837 00:45:31.159 --> 00:45:31.679 Y 838 00:45:31.919 --> 00:45:33.610 hora tiene dos contenedores en ejecución. 839 00:45:33.620 --> 00:45:37.820 hora ha visto que utilizamos el ID del contenedor en varios comandos de almacén. 840 00:45:37.830 --> 00:45:42.459 ntonces, para detener el contenedor, reiniciarlo, comprobar los registros, etcétera. 841 00:45:42.889 --> 00:45:46.449 ero la identificación es difícil de recordar y tendrás que buscarla todo el tiempo. 842 00:45:46.639 --> 00:45:46.889 sí que 843 00:45:47.000 --> 00:45:47.969 omo alternativa, 844 00:45:47.979 --> 00:45:51.179 ambién puede usar el nombre del contenedor para todos estos comandos 845 00:45:51.189 --> 00:45:54.689 n lugar del ID que Docker genera automáticamente. 846 00:45:54.830 --> 00:45:59.340 ero en realidad podemos reescribir eso y podemos dar nuestros contenedores 847 00:45:59.510 --> 00:46:02.729 ombres más significativos cuando los creamos 848 00:46:04.409 --> 00:46:06.399 ara que podamos detener esos dos contenedores 849 00:46:06.850 --> 00:46:08.020 tilizando el ID 850 00:46:08.689 --> 00:46:09.659 el nombre 851 00:46:10.540 --> 00:46:11.280 e gusta esto. 852 00:46:11.459 --> 00:46:13.899 sí que estos son dos contenedores diferentes, uno con ID, 853 00:46:13.909 --> 00:46:15.949 no con nombre y los detendremos a los dos. 854 00:46:17.629 --> 00:46:18.370 hí lo tienes. 855 00:46:18.570 --> 00:46:23.270 hora, cuando creamos un nuevo contenedor, podemos darle un nombre específico 856 00:46:23.510 --> 00:46:25.459 hay otra bandera para eso 857 00:46:25.889 --> 00:46:28.659 ue es el nombre de Dash Dash. Y luego proporcionamos 858 00:46:28.919 --> 00:46:32.919 l nombre que queremos darle a nuestro contenedor. Y digamos que esto es, um 859 00:46:33.270 --> 00:46:36.479 plicación web. Así es como llamaremos 860 00:46:37.570 --> 00:46:38.780 ejecutemos. 861 00:46:39.379 --> 00:46:39.889 i lo hago 862 00:46:40.030 --> 00:46:40.719 PS 863 00:46:41.100 --> 00:46:45.540 es que el nombre no es algo aleatorio generado automáticamente, 864 00:46:45.570 --> 00:46:47.350 ero, en cambio, nuestro contenedor se llama Web. 865 00:46:47.959 --> 00:46:48.969 sí que ahora podemos hacer lo mismo 866 00:46:49.209 --> 00:46:50.790 erraduras y 867 00:46:51.040 --> 00:46:52.840 ombre de nuestro contenedor 868 00:46:53.419 --> 00:46:54.159 e gusta esto. 869 00:46:57.540 --> 00:46:58.909 hora hemos aprendido sobre Do 870 00:46:59.149 --> 00:47:00.840 ub, que en realidad es 871 00:47:01.020 --> 00:47:03.760 o que se llama registro público de imágenes, 872 00:47:04.050 --> 00:47:04.949 o que significa 873 00:47:05.070 --> 00:47:09.770 sas imágenes que utilizamos están visibles y disponibles para el público. 874 00:47:10.149 --> 00:47:15.250 ero cuando una empresa crea sus propias imágenes de sus propias aplicaciones, 875 00:47:15.360 --> 00:47:17.969 or supuesto que no quieren que esté disponible públicamente. 876 00:47:18.229 --> 00:47:22.649 ntonces, para eso existen lo que se llama registros de Docker privados, 877 00:47:22.659 --> 00:47:23.770 hay muchos de ellos. 878 00:47:23.780 --> 00:47:28.689 asi todos los proveedores de servicios en la nube tienen un servicio de registro de Docker privado, 879 00:47:28.699 --> 00:47:35.080 or ejemplo, AWS EECR o el servicio de registro de contenedores elásticos, Google Azure. 880 00:47:35.090 --> 00:47:38.050 odos tienen sus propios registros de Docker. 881 00:47:38.080 --> 00:47:43.239 exus, que es un popular servicio de almacenamiento de artefactos, tiene un registro de tareas. 882 00:47:43.250 --> 00:47:46.179 ncluso Docker Hub tiene un registro de muelle privado 883 00:47:46.310 --> 00:47:51.679 ntonces, en la página de inicio de Dock Hub, viste este formulario de inicio. 884 00:47:52.000 --> 00:47:55.100 ntonces, básicamente, si quieres almacenar tus imágenes privadas de Docker en Doer 885 00:47:55.270 --> 00:47:55.729 Hub, 886 00:47:55.739 --> 00:47:59.770 e hecho, puede crear un registro privado en Docker Hub o 887 00:47:59.780 --> 00:48:02.929 ncluso cree un registro público y cargue sus imágenes allí. 888 00:48:02.939 --> 00:48:04.669 or eso tengo una cuenta, 889 00:48:04.679 --> 00:48:07.250 orque he subido un par de imágenes en Do 890 00:48:07.419 --> 00:48:11.860 ub que mis alumnos pueden descargar para diferentes cursos. 891 00:48:11.879 --> 00:48:15.209 hay un concepto más que quiero mencionar relacionado con el registro, 892 00:48:15.219 --> 00:48:17.739 ue es algo llamado repositorio, 893 00:48:17.949 --> 00:48:19.530 ue también escuchas a menudo. Haz 894 00:48:19.639 --> 00:48:20.370 n repositorio hacer 895 00:48:20.479 --> 00:48:25.199 registro? Entonces, ¿cuál es la diferencia entre ellos? Muy simple, explicó AWS. 896 00:48:25.209 --> 00:48:30.350 CR es un registro. Básicamente, es un servicio que proporciona almacenamiento de imágenes. 897 00:48:30.379 --> 00:48:31.830 dentro de ese registro, 898 00:48:31.840 --> 00:48:36.620 uede tener varios repositorios para las diferentes imágenes de la aplicación. 899 00:48:36.629 --> 00:48:39.429 sí que cada aplicación tiene su propio repositorio, 900 00:48:39.439 --> 00:48:43.179 en ese repositorio puede almacenar diferentes versiones de imágenes 901 00:48:43.189 --> 00:48:46.300 etiquetas de la misma aplicación de la misma manera. 902 00:48:46.310 --> 00:48:46.429 e 903 00:48:46.689 --> 00:48:51.070 ub es un registro. Es un servicio para almacenar 904 00:48:51.250 --> 00:48:51.500 hub, 905 00:48:51.510 --> 00:48:55.699 uede tener sus repositorios públicos para almacenar imágenes que serán 906 00:48:55.709 --> 00:48:57.629 ccesible públicamente o puede tener 907 00:48:57.639 --> 00:49:00.110 epositorios privados para diferentes aplicaciones. 908 00:49:00.129 --> 00:49:04.040 nuevamente, puede tener un repositorio dedicado para cada aplicación. 909 00:49:04.110 --> 00:49:05.459 sí que esa es una nota al margen. 910 00:49:05.469 --> 00:49:09.770 i escuchas estos términos y conceptos y sabes cuál es la diferencia entre ellos 911 00:49:13.060 --> 00:49:13.389 ahora? 912 00:49:13.399 --> 00:49:15.909 encioné que las empresas querrían crear 913 00:49:15.989 --> 00:49:18.760 us propias imágenes personalizadas para sus aplicaciones. 914 00:49:19.050 --> 00:49:20.760 ntonces, ¿cómo funciona eso realmente? 915 00:49:20.770 --> 00:49:25.070 Cómo puedo crear mi propia imagen de Docker para mi aplicación? 916 00:49:25.149 --> 00:49:27.580 el caso de uso para eso es, cuando estoy 917 00:49:27.780 --> 00:49:31.250 erminado con el desarrollo, la aplicación está lista. 918 00:49:31.260 --> 00:49:34.850 iene algunas funciones y queremos lanzarlo a los usuarios finales. 919 00:49:34.860 --> 00:49:36.790 or lo tanto, queremos ejecutarlo en una implementación 920 00:49:36.969 --> 00:49:39.719 ervidor y para facilitar el proceso de implementación. 921 00:49:39.729 --> 00:49:44.479 Quieres implementar nuestra aplicación como un contenedor Docker junto con la base de datos? 922 00:49:44.489 --> 00:49:48.399 y otros servicios que también se ejecutarán como contenedores Docker? 923 00:49:48.489 --> 00:49:51.699 ntonces, ¿cómo podemos tomar nuestra aplicación implementada creada? 924 00:49:51.709 --> 00:49:55.669 codificarlo y empaquetarlo en una imagen de Docker? 925 00:49:55.679 --> 00:50:00.659 ara eso, necesitamos crear una definición de cómo construir una imagen 926 00:50:00.760 --> 00:50:02.459 esde nuestra aplicación, 927 00:50:02.780 --> 00:50:07.340 esa definición está escrita en un archivo llamado archivo docker. 928 00:50:07.350 --> 00:50:11.379 sí es como debería llamarse, crear un archivo Docker simple es muy fácil. 929 00:50:11.600 --> 00:50:17.080 en esta parte vamos a utilizar una aplicación supersencilla sin JAS que he preparado. 930 00:50:17.090 --> 00:50:19.610 vamos a escribir un archivo Docker para eso 931 00:50:19.620 --> 00:50:22.370 plicación para crear una imagen más oscura a partir de ella. 932 00:50:22.530 --> 00:50:24.550 como dije, es muy fácil de hacer. 933 00:50:24.929 --> 00:50:26.469 sí que esta es la aplicación. 934 00:50:26.679 --> 00:50:29.739 s extremadamente simple. Solo tengo uno 935 00:50:29.939 --> 00:50:34.479 rchivo dot Js del servidor, que básicamente solo inicia la aplicación 936 00:50:34.699 --> 00:50:36.659 en el puerto 3000. 937 00:50:36.959 --> 00:50:38.800 olo dice: Bienvenido 938 00:50:39.100 --> 00:50:40.979 uando accedes a él desde el navegador 939 00:50:41.300 --> 00:50:45.979 tenemos un paquete adyacente al archivo que contiene esta dependencia 940 00:50:46.010 --> 00:50:49.629 ara la biblioteca express que usamos aquí para iniciar la aplicación 941 00:50:49.820 --> 00:50:52.270 úper delgado y simple. 942 00:50:52.419 --> 00:50:54.610 esa es la aplicación desde la que vamos a crear un 943 00:50:54.620 --> 00:50:57.939 magen de Docker e iníciela como un contenedor de Docker. 944 00:50:58.419 --> 00:50:59.770 sí que sigamos y hagámoslo. 945 00:51:00.459 --> 00:51:06.090 sí que, en la raíz de la aplicación, vamos a crear un nuevo archivo llamado Docker File. 946 00:51:06.929 --> 00:51:08.870 sí que ese es el nombre. Y ya ves eso, 947 00:51:09.090 --> 00:51:12.110 m, la mayoría de los editores de código realmente detectan 948 00:51:12.290 --> 00:51:15.340 rchivo Docker y obtenemos este icono de Docker aquí. 949 00:51:15.350 --> 00:51:17.389 ntonces, en este archivo Docker, 950 00:51:17.399 --> 00:51:20.229 amos a escribir una definición de cómo 951 00:51:20.239 --> 00:51:22.250 a imagen debe generarse desde esta aplicación. 952 00:51:22.370 --> 00:51:24.040 ntonces, ¿qué necesita nuestra aplicación? 953 00:51:24.050 --> 00:51:27.709 ecesita un nodo instalado porque el nodo debe ejecutar nuestra aplicación. 954 00:51:27.929 --> 00:51:28.389 Verdad? 955 00:51:29.020 --> 00:51:31.840 ntonces, si quisiera iniciar esta aplicación localmente 956 00:51:32.020 --> 00:51:36.689 esde mi terminal, ejecutaría el nodo SRC. Así que la 957 00:51:36.860 --> 00:51:38.379 el punto de servidor Js 958 00:51:38.649 --> 00:51:40.939 omando para iniciar la aplicación. 959 00:51:41.080 --> 00:51:44.929 ntonces necesitamos ese comando de nodo disponible dentro de la imagen. 960 00:51:45.250 --> 00:51:48.550 ahí es donde entra en juego el concepto de imagen base. 961 00:51:48.560 --> 00:51:52.030 ntonces, cada imagen de Docker se basa realmente en esta imagen base, 962 00:51:52.320 --> 00:51:58.149 ue es principalmente una imagen ligera del sistema operativo Linux que tiene 963 00:51:58.270 --> 00:52:03.419 l nodo, N, PM o cualquier herramienta que necesite para su aplicación instalada encima. 964 00:52:03.489 --> 00:52:05.719 ntonces, para la aplicación de JavaScript, tendría 965 00:52:05.949 --> 00:52:07.050 magen base del nodo. 966 00:52:07.060 --> 00:52:11.409 i tiene una aplicación Java, utilizaremos una imagen que tenga instalado el tiempo de ejecución de Java 967 00:52:11.899 --> 00:52:15.909 e nuevo sistema operativo Linux con Java instalado encima. 968 00:52:16.550 --> 00:52:19.629 esa es la imagen base. Y definimos 969 00:52:19.639 --> 00:52:22.479 so de una directiva en el archivo Docker llamado desde. 970 00:52:22.649 --> 00:52:25.889 stamos diciendo que construya esta imagen a partir de la imagen base y si 971 00:52:25.899 --> 00:52:29.000 uelvo a Docker Hub y busco el nodo, 972 00:52:30.110 --> 00:52:35.979 erá que tenemos una imagen que tiene un nodo y N PM instalados en su interior 973 00:52:36.489 --> 00:52:39.159 las imágenes base son como otras imágenes. 974 00:52:39.189 --> 00:52:43.879 ásicamente, puedes apilar y construir sobre las imágenes en Docker. 975 00:52:44.020 --> 00:52:46.020 sí que son como cualquier otra imagen que hayamos visto. 976 00:52:46.120 --> 00:52:49.310 también tienen versiones de texto o imagen. 977 00:52:49.340 --> 00:52:54.149 sí que vamos a elegir la imagen del nodo y una versión específica 978 00:52:54.340 --> 00:52:57.459 optemos por 19 trazos de pino L. 979 00:53:00.429 --> 00:53:04.479 sa es nuestra imagen base y nuestra primera directiva en el archivo docker. 980 00:53:04.489 --> 00:53:06.560 e nuevo, esto solo asegurará que 981 00:53:06.860 --> 00:53:09.850 uando nuestra aplicación node Js se inicia en un contenedor, 982 00:53:09.860 --> 00:53:14.689 endrá un nodo y N comandos PM disponibles en su interior para ejecutar nuestra aplicación. 983 00:53:14.870 --> 00:53:17.229 hora, si iniciamos nuestra aplicación con este comando, 984 00:53:17.689 --> 00:53:19.780 eremos que recibimos un error porque 985 00:53:19.790 --> 00:53:22.580 ecesitamos instalar primero las dependencias de una aplicación. 986 00:53:22.760 --> 00:53:25.459 olo tenemos una dependencia, que es la biblioteca de prensa, 987 00:53:25.510 --> 00:53:29.189 o que significa que tendríamos que ejecutar N PM install, 988 00:53:29.729 --> 00:53:34.239 ue comprobará el archivo json del paquete, leerá todas las dependencias, 989 00:53:34.250 --> 00:53:36.379 efinirlos por dentro e instalarlos 990 00:53:36.489 --> 00:53:39.215 ocalmente en la carpeta de módulos de nodo. 991 00:53:39.225 --> 00:53:43.425 ásicamente, estamos mapeando las mismas cosas que haríamos para ejecutar la aplicación. 992 00:53:43.435 --> 00:53:46.264 nivel local, estamos mapeando eso dentro del contenedor, 993 00:53:46.274 --> 00:53:51.594 or lo que tendríamos que ejecutar el comando N PM install también dentro del contenedor. 994 00:53:51.625 --> 00:53:52.195 Entonces, 995 00:53:52.465 --> 00:53:53.594 omo mencioné antes, 996 00:53:53.745 --> 00:53:56.205 a mayoría de las imágenes oscuras están basadas en Linux. 997 00:53:56.215 --> 00:53:59.824 lpine es Linux, una distribución de sistema operativo Linux de onda ligera. 998 00:54:00.050 --> 00:54:00.669 sí que 999 00:54:00.810 --> 00:54:01.520 n el archivo Docker, 1000 00:54:01.530 --> 00:54:05.030 uede escribir cualquier comando de Linux que desee ejecutar dentro del contenedor. 1001 00:54:05.159 --> 00:54:08.820 siempre que queramos ejecutar cualquier comando dentro del contenedor, 1002 00:54:08.830 --> 00:54:12.469 a sea un comando de Linux o un comando de nodo N PM, lo que sea, 1003 00:54:12.479 --> 00:54:15.600 o ejecutamos mediante una directiva de ejecución. 1004 00:54:15.610 --> 00:54:19.840 sa es otra directiva, y verá que las directivas están escritas en mayúsculas 1005 00:54:20.209 --> 00:54:21.770 luego viene el comando. 1006 00:54:21.889 --> 00:54:23.659 sí que no hay instalación de PM, 1007 00:54:23.699 --> 00:54:27.840 ue descargará las dependencias dentro del contenedor y 1008 00:54:27.850 --> 00:54:31.239 rear una carpeta de módulos de nodo dentro del contenedor 1009 00:54:31.570 --> 00:54:33.439 ntes de que se inicie la aplicación. 1010 00:54:33.800 --> 00:54:38.699 e nuevo, piense en un contenedor como su propio entorno aislado. Tiene un Linux simple 1011 00:54:39.040 --> 00:54:40.250 istema operativo 1012 00:54:40.489 --> 00:54:42.520 on el nodo y el NPM instalados, 1013 00:54:42.629 --> 00:54:44.540 estamos ejecutando N PM install. 1014 00:54:44.550 --> 00:54:48.600 in embargo, también necesitamos el código de la aplicación dentro del contenedor, ¿verdad? 1015 00:54:48.919 --> 00:54:50.570 ntonces necesitamos el servidor Js 1016 00:54:50.689 --> 00:54:51.449 n el interior, 1017 00:54:51.479 --> 00:54:53.889 necesitamos el paquete para Jason porque eso es lo que 1018 00:54:53.899 --> 00:54:58.149 l comando N PM necesitará leer realmente las dependencias. 1019 00:54:58.330 --> 00:55:03.020 esa es otra directiva de la que tomamos los archivos 1020 00:55:03.189 --> 00:55:09.149 uestra computadora local y los pegamos. Cópielos 1021 00:55:09.760 --> 00:55:11.699 esa es una directiva llamada Copy 1022 00:55:11.800 --> 00:55:14.649 puede copiar archivos individuales como el punto del paquete 1023 00:55:14.760 --> 00:55:16.399 son desde aquí 1024 00:55:16.679 --> 00:55:22.530 n el contenedor, y podemos decir en qué lugar del contenedor 1025 00:55:22.899 --> 00:55:25.760 n el sistema de archivos al que se debe copiar. 1026 00:55:26.100 --> 00:55:27.330 digamos 1027 00:55:27.780 --> 00:55:31.189 ebe copiarse en una carpeta llamada barra 1028 00:55:31.560 --> 00:55:31.889 plicación 1029 00:55:32.679 --> 00:55:36.280 entro del contenedor. Así que esto está 1030 00:55:36.699 --> 00:55:40.639 verdad? Hemos empaquetado aquí al lado. Esto está dentro del contenedor. 1031 00:55:40.649 --> 00:55:41.580 s un completo 1032 00:55:41.689 --> 00:55:45.600 istema aislado de nuestro entorno local, 1033 00:55:46.139 --> 00:55:51.770 ara que podamos copiar archivos individuales y también podemos copiar los directorios completos. 1034 00:55:51.780 --> 00:55:54.510 ntonces, también necesitamos nuestro código de aplicación, obviamente, 1035 00:55:54.520 --> 00:55:57.040 ara ejecutar la aplicación y poder copiar esto 1036 00:55:57.050 --> 00:56:01.419 irectorio fuente completo, por lo que tenemos varios archivos en su interior. 1037 00:56:01.449 --> 00:56:05.020 odemos volver a copiar todo el directorio en el contenedor 1038 00:56:05.649 --> 00:56:06.669 n barra 1039 00:56:06.820 --> 00:56:07.129 plicación 1040 00:56:07.709 --> 00:56:08.479 bicación 1041 00:56:08.639 --> 00:56:11.719 la barra al final también es muy importante. 1042 00:56:11.729 --> 00:56:17.780 ntonces, el Docker sabe cómo crear esta carpeta si aún no existe en el contenedor, 1043 00:56:17.899 --> 00:56:18.449 así que 1044 00:56:18.649 --> 00:56:23.770 a raíz del sistema de archivos de Linux agrega una carpeta en su interior y, a continuación, una barra diagonal. 1045 00:56:23.879 --> 00:56:27.800 hora todos los archivos de la aplicación relevantes, como el paquete adyacente y el 1046 00:56:27.810 --> 00:56:32.854 odo el directorio fuente se copia en el contenedor de esta ubicación. 1047 00:56:33.175 --> 00:56:36.014 o siguiente que queremos hacer antes de poder ejecutar 1048 00:56:36.024 --> 00:56:40.125 l comando de instalación N PM consiste realmente en cambiar a ese directorio. 1049 00:56:40.135 --> 00:56:40.554 Verdad? 1050 00:56:40.564 --> 00:56:41.175 ntonces, en Linux, 1051 00:56:41.185 --> 00:56:44.834 enemos este CD con derecho a cambiarlo a un directorio 1052 00:56:44.844 --> 00:56:48.415 ara ejecutar los siguientes comandos dentro del directorio 1053 00:56:48.675 --> 00:56:52.965 n el archivo Docker. Tenemos una directiva para eso llamada work 1054 00:56:53.195 --> 00:56:54.125 uerida. 1055 00:56:54.540 --> 00:56:55.850 ntonces, directorio de trabajo, 1056 00:56:56.040 --> 00:56:59.870 ue equivale a cambiar a un directorio 1057 00:56:59.879 --> 00:57:03.590 ara ejecutar todos los siguientes comandos en ese directorio 1058 00:57:03.770 --> 00:57:04.510 ara que podamos 1059 00:57:04.810 --> 00:57:06.260 aga la aplicación slash aquí. 1060 00:57:06.500 --> 00:57:09.919 or lo tanto, establece esta ruta como la ubicación predeterminada 1061 00:57:10.110 --> 00:57:13.219 ara lo que venga después. ESTÁ BIEN 1062 00:57:13.489 --> 00:57:16.750 sí que estamos copiando todo en el contenedor. 1063 00:57:16.760 --> 00:57:19.639 uego estamos configurando el directorio de trabajo 1064 00:57:19.709 --> 00:57:22.149 el directorio predeterminado dentro del contenedor. 1065 00:57:22.449 --> 00:57:26.500 , a continuación, volvemos a ejecutar N PM install dentro del contenedor para 1066 00:57:26.510 --> 00:57:30.459 escargue todas las dependencias que necesita la aplicación que se definen aquí. 1067 00:57:30.469 --> 00:57:33.929 finalmente necesitamos ejecutar la aplicación, ¿verdad? 1068 00:57:34.179 --> 00:57:37.510 ntonces, después de la instalación de NP, el comando node debería 1069 00:57:37.520 --> 00:57:41.199 e ejecute y aprenderemos a ejecutar comandos. 1070 00:57:41.209 --> 00:57:43.899 samos la directiva run. 1071 00:57:44.070 --> 00:57:48.360 in embargo, si este es el último comando del archivo Docker, 1072 00:57:48.379 --> 00:57:52.445 sí que algo que realmente inicia el proceso es la aplicación interna, 1073 00:57:52.455 --> 00:57:56.235 enemos una directiva diferente para eso llamada C MD. 1074 00:57:56.435 --> 00:57:58.804 ásicamente, ese es el último comando del 1075 00:57:58.814 --> 00:58:01.405 rchivo docker y eso inicia la aplicación. 1076 00:58:01.614 --> 00:58:03.875 la sintaxis para eso es la 1077 00:58:04.024 --> 00:58:04.685 omando 1078 00:58:04.925 --> 00:58:05.764 ue es nodo 1079 00:58:06.114 --> 00:58:07.564 el parámetro 1080 00:58:08.300 --> 00:58:10.050 unto de servidor G Js. 1081 00:58:10.260 --> 00:58:12.979 sí que copiamos todo en la aplicación slash. 1082 00:58:13.010 --> 00:58:15.860 ntonces tenemos el servidor Js dentro del directorio APP 1083 00:58:15.870 --> 00:58:19.229 lo iniciamos o ejecutamos mediante node commit. 1084 00:58:19.719 --> 00:58:20.389 so es todo. 1085 00:58:20.399 --> 00:58:24.139 se es el archivo Docker completo que creará 1086 00:58:24.149 --> 00:58:27.659 na imagen de Docker para nuestra aplicación node Js, 1087 00:58:27.810 --> 00:58:30.989 ue luego podemos comenzar como un contenedor. 1088 00:58:34.239 --> 00:58:39.629 hora tenemos la definición en el archivo Docker. Es hora de crear realmente la imagen. 1089 00:58:39.639 --> 00:58:40.739 e esta definición. 1090 00:58:41.280 --> 00:58:43.840 oy a aclarar esto y sin cambiar a la terminal, 1091 00:58:43.850 --> 00:58:45.260 e hecho, podemos reutilizar este. 1092 00:58:45.429 --> 00:58:50.429 odemos ejecutar un comando docker para crear una imagen más oscura, lo cual es muy fácil. 1093 00:58:50.439 --> 00:58:52.389 olo hacemos Docker Build. 1094 00:58:52.889 --> 00:58:55.560 uego tenemos un par de opciones que podemos ofrecer. 1095 00:58:55.780 --> 00:58:58.100 l primero es el nombre de la imagen. 1096 00:58:58.110 --> 00:59:03.699 sí que, al igual que todas esas imágenes tienen nombres, como node ready, etcétera, 1097 00:59:03.979 --> 00:59:05.129 las etiquetas 1098 00:59:05.689 --> 00:59:06.780 ambién podemos 1099 00:59:07.020 --> 00:59:09.580 ombra nuestra imagen y asígnale una etiqueta específica. 1100 00:59:09.850 --> 00:59:13.459 lo hacemos usando esta opción de guión en forma de T 1101 00:59:13.840 --> 00:59:15.429 podemos llamar a nuestro nodo de aplicación 1102 00:59:15.530 --> 00:59:15.840 plicación 1103 00:59:16.449 --> 00:59:18.159 uizás con Dash no importe 1104 00:59:18.469 --> 00:59:19.310 1105 00:59:19.689 --> 00:59:22.010 odemos darle una etiqueta específica 1106 00:59:22.199 --> 00:59:24.590 omo 1.0, por ejemplo. 1107 00:59:24.840 --> 00:59:25.469 1108 00:59:25.719 --> 00:59:28.810 l último parámetro es la ubicación del archivo Docker. 1109 00:59:29.010 --> 00:59:31.899 ntonces le estamos diciendo a Docker que cree una imagen 1110 00:59:32.044 --> 00:59:33.764 on este nombre con esta etiqueta 1111 00:59:33.985 --> 00:59:34.945 esde 1112 00:59:35.135 --> 00:59:38.375 a definición en este archivo Docker específico, ¿verdad? 1113 00:59:38.574 --> 00:59:41.754 ntonces, esta es una ubicación del archivo Docker en este caso, 1114 00:59:41.764 --> 00:59:45.395 stamos en el directorio donde se encuentra el archivo Docker, 1115 00:59:45.405 --> 00:59:47.594 or lo que será el directorio actual. 1116 00:59:47.774 --> 00:59:51.834 ntonces, este punto básicamente se refiere a la carpeta actual. 1117 00:59:51.945 --> 00:59:53.794 onde se encuentra el archivo Docker. 1118 00:59:54.040 --> 00:59:56.070 hora, si ejecutamos esto 1119 00:59:56.320 --> 00:59:57.229 omo puede ver, hacedor 1120 00:59:57.479 --> 00:59:59.129 n realidad está construyendo 1121 00:59:59.439 --> 01:00:02.290 a imagen de nuestro archivo Talker 1122 01:00:04.320 --> 01:00:08.370 parece que tuvo éxito cuando comenzó a crear la imagen. 1123 01:00:08.379 --> 01:00:11.939 es esos pasos, esas directivas que definimos aquí. 1124 01:00:11.949 --> 01:00:17.149 sí que tenemos la primera de la directiva que se ejecutó. Luego tenemos 1125 01:00:17.350 --> 01:00:22.629 omo segundo paso. Luego hemos copiado la carpeta fuente, configurando el 1126 01:00:22.899 --> 01:00:26.939 ejecutando N PM install y, luego, el último acaba de iniciar la aplicación. 1127 01:00:27.149 --> 01:00:27.929 sí que ahora 1128 01:00:28.459 --> 01:00:30.610 i hago imágenes de Docker 1129 01:00:30.939 --> 01:00:32.070 demás de esos 1130 01:00:32.500 --> 01:00:34.379 mágenes que descargamos 1131 01:00:34.629 --> 01:00:36.060 nteriormente de Docker Hub, 1132 01:00:36.429 --> 01:00:39.250 eberíamos ver realmente la imagen que acabamos de crear. 1133 01:00:39.260 --> 01:00:42.110 sta es la imagen de la aplicación de nodo con etiqueta 1134 01:00:42.449 --> 01:00:43.510 .0 1135 01:00:43.860 --> 01:00:44.810 alguna otra información. 1136 01:00:45.379 --> 01:00:46.760 sí que esa es nuestra imagen. 1137 01:00:46.770 --> 01:00:49.870 ahora podemos iniciar esta imagen y trabajar con ella, 1138 01:00:49.879 --> 01:00:53.989 l igual que trabajamos con cualquier otra imagen descargada de Docker Hub. 1139 01:00:54.000 --> 01:00:57.540 sí que vamos a seguir adelante y ejecutar un contenedor desde este nodo 1140 01:00:57.610 --> 01:01:01.389 magen de la aplicación y asegúrese de que la aplicación interna realmente funciona. 1141 01:01:01.629 --> 01:01:02.189 sí que 1142 01:01:02.429 --> 01:01:03.679 amos a hacer Docker Run 1143 01:01:04.310 --> 01:01:04.949 odo 1144 01:01:05.699 --> 01:01:06.159 plicación 1145 01:01:06.449 --> 01:01:09.550 magen con 1.0 10 1146 01:01:10.219 --> 01:01:13.840 vamos a pasar el parámetro para comenzar de forma separada 1147 01:01:13.850 --> 01:01:17.600 n modo y también queremos exponer el puerto correctamente. 1148 01:01:17.860 --> 01:01:18.659 ueremos 1149 01:01:18.830 --> 01:01:22.860 oder acceder a la aplicación, la aplicación de nodo desde el host local 1150 01:01:23.139 --> 01:01:23.770 1151 01:01:24.000 --> 01:01:27.070 abemos que la aplicación dentro del contenedor se iniciará 1152 01:01:27.080 --> 01:01:30.419 n el puerto 3000 porque eso es lo que hemos definido aquí. 1153 01:01:30.540 --> 01:01:33.899 or lo tanto, la aplicación en sí se ejecutará en el puerto 3000. 1154 01:01:34.179 --> 01:01:41.209 sí que eso está dentro del contenedor, y podemos vincularlo al puerto que queramos en el host local 1155 01:01:41.330 --> 01:01:45.010 demos hacer 3000, igual que en el contenedor. 1156 01:01:45.209 --> 01:01:48.679 sí que este es el puerto de host y este es el puerto de contenedor. 1157 01:01:49.000 --> 01:01:50.520 ahora si ejecuto 1158 01:01:51.159 --> 01:01:52.050 s un comando 1159 01:01:52.550 --> 01:01:54.409 haz docker PS, 1160 01:01:54.909 --> 01:01:59.610 eberíamos ver nuestra aplicación de nodo ejecutándose en el puerto 3000 1161 01:01:59.800 --> 01:02:01.449 ora el momento de la verdad 1162 01:02:01.590 --> 01:02:03.270 olver al navegador 1163 01:02:03.850 --> 01:02:06.709 apertura del host local 3000 1164 01:02:07.459 --> 01:02:11.429 hí está nuestra bienvenida a mi increíble aplicación 1165 01:02:12.320 --> 01:02:14.610 ensaje de nuestra aplicación. 1166 01:02:14.840 --> 01:02:17.060 incluso podemos comprobar los registros 1167 01:02:17.370 --> 01:02:19.979 omando la identificación de nuestro no 1168 01:02:20.169 --> 01:02:20.530 plicación 1169 01:02:21.189 --> 01:02:23.770 haciendo bloques de Docker con el ID. 1170 01:02:24.239 --> 01:02:24.800 1171 01:02:25.080 --> 01:02:28.270 se es el resultado de nuestra aplicación 1172 01:02:28.459 --> 01:02:29.649 entro del contenedor. 1173 01:02:30.040 --> 01:02:30.600 sí que 1174 01:02:30.719 --> 01:02:33.040 sí de fácil es aceptar su solicitud, 1175 01:02:33.050 --> 01:02:38.540 mpaquételo en una imagen de Docker usando el archivo Docker y luego ejecútelo como un contenedor 1176 01:02:42.189 --> 01:02:46.100 finalmente volviendo a esta interfaz gráfica de usuario 1177 01:02:46.110 --> 01:02:49.120 liente que realmente nos proporciona el escritorio Docker. 1178 01:02:49.330 --> 01:02:54.560 hora también podemos ver todos nuestros contenedores e imágenes aquí. 1179 01:02:54.590 --> 01:02:57.479 así es como se ve esta U I, te da una muy buena 1180 01:02:57.620 --> 01:02:58.219 escripción general 1181 01:02:58.350 --> 01:03:00.510 e los contenedores que tiene. 1182 01:03:00.520 --> 01:03:05.899 uáles se están ejecutando actualmente, cuáles están parados con sus nombres, etc. 1183 01:03:06.060 --> 01:03:09.300 incluso tienes algunos controles aquí para iniciar un 1184 01:03:09.320 --> 01:03:12.969 detuvo un contenedor como este o incluso lo volvió a detener? 1185 01:03:14.110 --> 01:03:16.669 einiciar el contenedor, eliminar lo que sea. 1186 01:03:16.870 --> 01:03:19.820 de la misma manera que tienes una lista de imágenes, 1187 01:03:20.250 --> 01:03:21.840 ncluida nuestra propia imagen, 1188 01:03:21.850 --> 01:03:26.570 también puedes crear contenedores directamente desde aquí usando algunos controles. 1189 01:03:26.600 --> 01:03:27.159 sí que 1190 01:03:27.290 --> 01:03:31.040 ersonalmente prefiero la interfaz de línea de comandos para interactuar con Docker. 1191 01:03:31.050 --> 01:03:33.560 ero algunos se sienten más cómodos usando 1192 01:03:33.719 --> 01:03:35.149 a U. visual 1193 01:03:35.320 --> 01:03:39.379 sí que, como prefieras, puedes elegir trabajar con cualquiera de las dos. 1194 01:03:42.909 --> 01:03:46.879 hora hemos aprendido muchos de los componentes básicos de Docker. 1195 01:03:47.010 --> 01:03:47.620 in embargo, 1196 01:03:47.629 --> 01:03:52.169 ambién es interesante ver cómo Docker encaja realmente en la totalidad 1197 01:03:52.179 --> 01:03:55.320 roceso de desarrollo e implementación de software con 1198 01:03:55.330 --> 01:03:58.000 ambién muchas otras tecnologías. 1199 01:03:58.050 --> 01:04:02.745 ntonces, qué pasos de todo este proceso son más relevantes. 1200 01:04:02.754 --> 01:04:05.125 ntonces, en esta parte final del curso intensivo, 1201 01:04:05.135 --> 01:04:10.764 amos a ver más oscuro en una visión general del ciclo de vida del desarrollo de software. 1202 01:04:10.774 --> 01:04:15.554 onsideremos un escenario simplificado en el que estás desarrollando un JAVASCRIPT 1203 01:04:15.564 --> 01:04:19.504 plicación en su computadora portátil directamente en su entorno de desarrollo local. 1204 01:04:20.379 --> 01:04:23.610 u aplicación de JavaScript usa un Mongo 1205 01:04:23.929 --> 01:04:28.189 ase de datos, y en lugar de instalarla en su computadora portátil, 1206 01:04:28.199 --> 01:04:31.570 escargas un contenedor de Docker desde el centro de Docker. 1207 01:04:32.030 --> 01:04:35.159 sí que conectas tu aplicación de JavaScript con el mongo 1208 01:04:35.449 --> 01:04:37.050 B y empiezas a desarrollar. 1209 01:04:37.649 --> 01:04:39.649 hora digamos que desarrolla el 1210 01:04:39.659 --> 01:04:42.739 plicación primera versión de la aplicación localmente, 1211 01:04:42.750 --> 01:04:47.000 ahora quieres probarlo o quieres implementarlo en, eh, 1212 01:04:47.010 --> 01:04:49.479 ntorno de desarrollo donde 1213 01:04:49.639 --> 01:04:52.159 n probador de tu equipo lo probará. 1214 01:04:52.560 --> 01:04:56.300 sí que confirmas tu aplicación de JavaScript en git 1215 01:04:56.310 --> 01:04:58.780 en algún otro sistema de control de versiones. 1216 01:04:59.169 --> 01:05:03.120 h, eso activará una integración continua. 1217 01:05:03.129 --> 01:05:06.139 na compilación de Jenkins, o lo que sea que hayas configurado 1218 01:05:06.389 --> 01:05:10.949 Jenkins build producirá artefactos a partir de su aplicación. 1219 01:05:11.139 --> 01:05:15.080 rimero, crearás tu aplicación de JavaScript 1220 01:05:15.280 --> 01:05:16.000 luego 1221 01:05:16.229 --> 01:05:21.550 rea una imagen de Docker a partir de ese artefacto de JavaScript. ¿Verdad? 1222 01:05:21.879 --> 01:05:26.919 ntonces, ¿qué pasa con esta imagen de Docker? Una vez que Jenkins build la cree, 1223 01:05:27.229 --> 01:05:28.489 e empuja 1224 01:05:28.669 --> 01:05:31.199 un repositorio de Docker privado. 1225 01:05:31.209 --> 01:05:35.000 ormalmente en una empresa tendrías un repositorio privado porque 1226 01:05:35.010 --> 01:05:38.620 o quieres que otras personas tengan acceso a tus imágenes. 1227 01:05:38.629 --> 01:05:40.060 sí que lo empujas allí. 1228 01:05:40.280 --> 01:05:41.169 ahora, 1229 01:05:41.479 --> 01:05:48.250 a que el siguiente paso podría configurarse en Jenkins o en otros scripts o herramientas, que 1230 01:05:48.520 --> 01:05:49.879 magen de Docker 1231 01:05:50.070 --> 01:05:52.620 ebe implementarse en un servidor de desarrollo. 1232 01:05:53.033 --> 01:05:58.614 sí que tienes un servidor de desarrollo que extrae la imagen del repositorio privado, 1233 01:05:58.864 --> 01:06:02.743 a imagen de su aplicación de JavaScript y, a continuación, extrae el 1234 01:06:03.114 --> 01:06:07.104 ase de datos de la que depende su aplicación de JavaScript desde un Docker Hub. 1235 01:06:07.114 --> 01:06:09.233 ahora tienes dos contenedores, 1236 01:06:09.243 --> 01:06:13.604 no de tus contenedores personalizados y un Mogo disponible públicamente 1237 01:06:13.864 --> 01:06:17.874 ontenedor de base de datos que se ejecuta en el servidor de desarrollo y se comunican entre sí. 1238 01:06:17.884 --> 01:06:18.897 ienes que configurarlo. 1239 01:06:18.907 --> 01:06:23.758 or supuesto, hablan y se comunican entre sí y funcionan como una aplicación. 1240 01:06:23.768 --> 01:06:29.167 hora, si un probador, por ejemplo, u otro desarrollador inicia sesión 1241 01:06:29.327 --> 01:06:32.558 n un servidor de desarrollo, podrán probar la aplicación. 1242 01:06:32.637 --> 01:06:35.847 sí que este es un flujo de trabajo simplificado, cómo Docker 1243 01:06:35.857 --> 01:06:38.887 uncionará en un proceso de desarrollo de la vida real. 1244 01:06:38.897 --> 01:06:42.708 ntonces, en poco tiempo, aprendemos todos los componentes básicos, 1245 01:06:42.718 --> 01:06:44.781 as partes más importantes de Docker. 1246 01:06:44.971 --> 01:06:47.931 sí que entiendes qué son las imágenes, cómo iniciar los contenedores, 1247 01:06:48.052 --> 01:06:50.181 ómo funcionan y cómo acceder a ellos, 1248 01:06:50.191 --> 01:06:54.781 sí como cómo crear tu propia imagen de Docker y ejecutarla como un contenedor. 1249 01:06:55.152 --> 01:06:59.812 ero si quieres aprender más sobre Docker y practicar tus habilidades aún más 1250 01:06:59.941 --> 01:07:03.152 omo cómo conectar tu aplicación a un contenedor Docker, 1251 01:07:03.382 --> 01:07:07.132 prenda sobre lo más oscuro, componga volúmenes más oscuros, etcétera. 1252 01:07:07.142 --> 01:07:09.325 e hecho, puedes ver a mi actor completo 1253 01:07:09.545 --> 01:07:12.075 tutorial. Y si quieres aprender, hazlo 1254 01:07:12.716 --> 01:07:13.966 n el contexto de los desarrolladores 1255 01:07:14.656 --> 01:07:19.756 realmente dominarlo con cosas como registros privados que usan doer 1256 01:07:19.986 --> 01:07:21.575 ara ejecutar Jenkins, 1257 01:07:21.656 --> 01:07:24.895 ntegrar Docker en las canalizaciones de CS CD y 1258 01:07:24.906 --> 01:07:28.236 salo con otras tecnologías como terraform 1259 01:07:28.466 --> 01:07:29.335 abilitar, etcétera. 1260 01:07:29.345 --> 01:07:31.825 uedes echar un vistazo a nuestro campamento de entrenamiento completo de devops 1261 01:07:31.835 --> 01:07:34.496 onde aprendes todo esto y mucho más.