Logo Studenta

4 Dockerfile - primeros pasos

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

1
00:00:05,950 --> 00:00:12,490
Imagínense ustedes que esa es una aplicación que en lugar de ser este blog, está utilizando cierta
2
00:00:12,490 --> 00:00:19,270
comunicación con algún API, la cual se encarga de leer esa API o esa base de datos y hace la inserción
3
00:00:19,270 --> 00:00:23,260
en otra base de datos como para hacer una sincronización o un manual o algo así.
4
00:00:23,700 --> 00:00:28,960
Imagino que este procedimiento o este programa a más de uno le va a ser bastante interesante.
5
00:00:28,960 --> 00:00:30,040
Y es muy sencillo.
6
00:00:30,670 --> 00:00:36,130
Todo este procedimiento digamos que lo ocupamos montar y desplegar en un servidor y aparte ocupamos
7
00:00:36,130 --> 00:00:40,390
mantener las versiones, porque puede ser que esta aplicación sea muy grande o que tenga diferentes
8
00:00:40,390 --> 00:00:45,490
procesos, o que van a añadir más procesos, qué sé yo, ustedes podrían darle el uso a esta aplicación
9
00:00:45,490 --> 00:00:51,040
como ustedes necesiten, pero digamos que en la vida real nosotros ocupamos crearnos una imagen para
10
00:00:51,040 --> 00:00:56,800
simplemente montarla y ejecutarla, y si después sucede algún cambio, yo pueda mantener mediante versiones
11
00:00:56,800 --> 00:01:02,310
fácilmente cambiar la versión, actualizarla y así sucesivamente, por lo cual tiene mucho sentido de
12
00:01:02,350 --> 00:01:07,210
que yo quiera crear esta aplicación como una imagen de Docker para que simplemente yo llame Doc Run
13
00:01:07,240 --> 00:01:08,980
el nombre de mi imagen y se acabó el asunto.
14
00:01:08,980 --> 00:01:14,410
Ya estoy corriendo ese procedimiento sin preocuparme de mis dependencias, que esas dependencias sería
15
00:01:14,410 --> 00:01:16,180
en este caso, no cron.
16
00:01:16,570 --> 00:01:24,130
Aparte sería no como tal, porque obviamente puede ser que mi servidor yo no tenga node instalado,
17
00:01:24,130 --> 00:01:29,800
entonces si yo no tengo Node instalado es imposible ejecutar el comando de node app porque va a decir
18
00:01:29,800 --> 00:01:35,080
que no, no se reconoce como comando interno o externo, entonces no voy a poder ejecutar la aplicación,
19
00:01:35,230 --> 00:01:40,750
entonces tengo varias dependencias y aparte no Chrome tiene otras dependencias que necesita como Yuyo
20
00:01:40,750 --> 00:01:47,230
ID y este bin ok bueno, tiene esas dependencias en general, no el yuyo ID básicamente.
21
00:01:47,710 --> 00:01:53,200
Entonces también hay una definición de cómo fue construido ese archivo, entre otras cosas, pero la
22
00:01:53,200 --> 00:01:55,930
verdad es que todo lo de los módulos de no se maneja de manera automática.
23
00:01:57,200 --> 00:01:59,060
Entonces todas esas son mis dependencias.
24
00:01:59,060 --> 00:02:04,700
Y obviamente no sólo es Node, sino que también yo necesito un sistema operativo en el cual va a correr
25
00:02:04,700 --> 00:02:05,540
el procedimiento.
26
00:02:05,540 --> 00:02:11,630
Porque si ustedes se fijan, yo no monté un apache o un servidor Apache para phpMyAdmin.
27
00:02:11,930 --> 00:02:15,500
Yo no sé, yo no monté ningún servidor de Node para correr mi aplicación de Pokémon.
28
00:02:15,770 --> 00:02:21,560
Yo no monté nada de eso, porque esas imágenes proporcionan todo lo que nosotros necesitamos.
29
00:02:22,010 --> 00:02:28,280
Es lo mismo que nosotros tenemos que hacer y tenemos que decirle a Docker cómo crear todo lo que necesita
30
00:02:28,280 --> 00:02:30,410
la aplicación para poderse ejecutar.
31
00:02:31,220 --> 00:02:35,030
Entonces vamos a comenzar ese camino, ese camino de la localización.
32
00:02:35,210 --> 00:02:38,330
Todo comienza con un archivo llamado Docker File.
33
00:02:38,960 --> 00:02:42,260
Este Docker File imagino que ustedes ya lo habrán visto más de una vez.
34
00:02:42,260 --> 00:02:46,130
Y si no lo han visto, bueno, si ya lo han visto o simplemente se han asustado con un montón de instrucciones.
35
00:02:46,430 --> 00:02:48,270
Y si nunca lo han visto, tranquilo.
36
00:02:48,290 --> 00:02:52,790
Vamos a empezar paso a paso, porque para mí es importante que ustedes comprendan cada cosa que vamos
37
00:02:52,790 --> 00:02:58,610
a ir haciendo y vamos a comenzar desde lo más pequeño y luego vamos a llegar hasta múltiples pasos de
38
00:02:58,610 --> 00:02:59,450
construcción.
39
00:02:59,780 --> 00:03:05,750
También vamos a crear múltiples versiones basados en diferentes arquitecturas de procesador, que eso
40
00:03:05,750 --> 00:03:07,760
es algo bastante útil que tenemos que saber.
41
00:03:08,120 --> 00:03:09,830
Y así vamos a ir creciendo en complejidad.
42
00:03:10,220 --> 00:03:12,460
Entonces todo comienza con el primer paso.
43
00:03:12,470 --> 00:03:17,930
Todo esto, todo lo que vamos a colocar en este Docker file no son más que instrucciones que nosotros
44
00:03:17,930 --> 00:03:20,900
vamos a empezar a seguir a Docker para que construya la imagen.
45
00:03:21,320 --> 00:03:27,160
Si ustedes buscan aquí PostgreSQL en otros Docker punto com, no hace falta que lo hagan solo.
46
00:03:27,170 --> 00:03:29,030
Pues miren esta explicación.
47
00:03:29,330 --> 00:03:34,580
Cada una de estas líneas que ustedes están viendo aquí es una instrucción de Docker File.
48
00:03:34,680 --> 00:03:38,180
Básicamente aquí le dice que se agregue ciertos archivos.
49
00:03:38,190 --> 00:03:43,830
Un comando que se ejecutó, un shell command, otro shell toman una definición de variable de entorno,
50
00:03:43,830 --> 00:03:47,780
o sea el comanche, el command variable de entornos, el comanche, el comanche, el comando variable
51
00:03:47,780 --> 00:03:53,420
de entornos, el comanche, El command más variable de entornos Shell commands La definición de un volumen
52
00:03:53,420 --> 00:04:00,770
Copiar ciertos archivos, un punto de entrada, un stop signal y tenemos la exposición de un puerto
53
00:04:00,770 --> 00:04:02,240
y el comando en el cual se ejecuta.
54
00:04:02,240 --> 00:04:04,940
No pretendo que ustedes sepan qué es lo que hace cada una de estas cosas.
55
00:04:04,940 --> 00:04:06,170
No, no es la idea.
56
00:04:06,500 --> 00:04:13,340
Pero cada una de esas instrucciones va creando diferentes layers o capas que le van a decir a Docker.
57
00:04:13,340 --> 00:04:17,330
No sé si ustedes se acuerdan cuando descargamos una imagen que había como varias descargas.
58
00:04:17,630 --> 00:04:22,700
Esa varias descargas simultáneas son las capas que está descargando y así funciona básicamente, lo
59
00:04:22,700 --> 00:04:26,510
cual ayuda mucho saber y reutilizar capas en el caso de que no haya cambiado algo.
60
00:04:26,510 --> 00:04:27,980
Pero ya vamos a ver eso muy pronto.
61
00:04:28,100 --> 00:04:32,990
Olvídense de lo que acabo de decir, escriban node y eso sí, háganlo, por favor, vengan conmigo,
62
00:04:32,990 --> 00:04:37,430
vamos a irnos a Load, seleccionen la imagen oficial que esta es súper popular.
63
00:04:37,430 --> 00:04:42,920
Más de 1 billón de descargas Es estúpido o es estúpida la cantidad de descargas que tiene?
64
00:04:43,580 --> 00:04:47,450
Y luego busquen la parte de Bueno, bajemos un poco más.
65
00:04:47,450 --> 00:04:49,670
Van a ver que tenemos un montón de tags.
66
00:04:49,670 --> 00:04:57,230
Por cierto, todas estos tags que la gente tiene, por ejemplo el 19.3 punto 15, 19.2 Alpine, todo
67
00:04:57,230 --> 00:05:04,520
esto, todo lo que está aquí es el mismo tag, o sea, yo sé que es el mismo, apuntan a la misma imagen,
68
00:05:04,520 --> 00:05:05,960
sólo que tiene diferentes nombres.
69
00:05:06,470 --> 00:05:10,520
Y aquí ustedes van a ver que está el proceso de construcción de ese Docker.
70
00:05:10,520 --> 00:05:16,520
Filmen el Docker file y aquí está From al point 3.15,
que ustedes ya deberían de saber que es el Alpine,
71
00:05:16,520 --> 00:05:19,500
porque lo he explicado muchas veces, que también ustedes lo tienen en el.
72
00:05:19,850 --> 00:05:25,190
La guía de atajos Alpine no es más que una versión de una distribución súper ligera, etcétera, etcétera
73
00:05:25,430 --> 00:05:27,080
Y ahí están, con un montón de pasos.
74
00:05:27,410 --> 00:05:31,370
Cada paso que hace aquí es una capa y hay pasos como este.
75
00:05:31,790 --> 00:05:36,860
No hace falta que ustedes entiendan lo que dice aquí, pero este paso de Run y hay un montón de comandos
76
00:05:36,860 --> 00:05:37,250
que está aquí.
77
00:05:37,250 --> 00:05:42,470
Por ejemplo, ejecuta este comando y añade y ejecuta este, y después añade este, y después ejecuta
78
00:05:42,620 --> 00:05:50,630
y después ejecuta ese lo que está haciendo con todo este paso, todo ese paso hasta aquí es que ejecuta
79
00:05:50,630 --> 00:05:56,180
todo esto, le dice, le dice a Docker, ejecuta todo esto y crea una capa con el resultado del mismo.
80
00:05:56,180 --> 00:06:00,440
Es decir, esto va a ver que si al día de mañana no hay ningún cambio en estas instrucciones, va a
81
00:06:00,440 --> 00:06:05,000
ser la misma capa y no se vuelve a ejecutar una segunda vez porque lo demás va a estar en caché y funciona
82
00:06:05,000 --> 00:06:07,660
muy rápido después y así sucesivamente.
83
00:06:07,670 --> 00:06:13,310
Luego tenemos una variable entorno que ejecuta sea el comando o en este caso son una serie de instrucciones
84
00:06:13,700 --> 00:06:16,190
de descomprimir otras cosas que eran directorios.
85
00:06:16,190 --> 00:06:16,580
En fin.
86
00:06:17,330 --> 00:06:19,640
Y eso es todo lo que está haciendo, básicamente.
87
00:06:20,630 --> 00:06:22,040
Ok, regresemos.
88
00:06:22,040 --> 00:06:23,570
Ups, regresemos.
89
00:06:23,570 --> 00:06:26,900
Lo cerré sin querer, pero pensé que lo tenía abierto en otro lado.
90
00:06:27,290 --> 00:06:29,060
Entonces todo va a comenzar.
91
00:06:29,060 --> 00:06:32,360
Toda nuestra aplicación necesita empezar por un punto.
92
00:06:32,510 --> 00:06:38,120
No nos ofrece un Alpine, es decir, un Node que ya habían instalado en un Linux.
93
00:06:38,150 --> 00:06:41,540
Esto es lo que significa el Alpine con Node.
94
00:06:41,840 --> 00:06:47,690
Básicamente quiero tomar una versión de Linux lista para producción, o sea, lista para que yo la pueda
95
00:06:47,690 --> 00:06:52,220
utilizar en la vida real que ya viene con un Node preinstalado.
96
00:06:52,670 --> 00:06:56,300
Si nos vamos a la parte de tags hay muchos y van a ver que las imágenes comprimidas.
97
00:06:56,710 --> 00:07:02,590
Son muy grandes, pero si ustedes buscan al PIN, por ejemplo, van a ver que las imágenes de Alpa N
98
00:07:02,590 --> 00:07:03,390
son más pequeñas.
99
00:07:03,400 --> 00:07:05,800
Ojo, que aquí está comprimido, no está descomprimido.
100
00:07:05,800 --> 00:07:10,450
Comprimido es ese peso, pero descomprimido puede ser 100, 150 megas, etc.
101
00:07:11,630 --> 00:07:16,820
Ok, van a buscar la versión 19,2 menos Alpine.
102
00:07:17,210 --> 00:07:19,970
Esa es la versión que yo quiero utilizar y esa es la que vamos a usar.
103
00:07:19,970 --> 00:07:24,800
Pero puede ser que ustedes quieran una versión 14 o una versión 12, la versión que necesite su aplicación
104
00:07:24,800 --> 00:07:25,550
para funcionar.
105
00:07:25,850 --> 00:07:28,990
Entonces, el primer paso que vamos a hacer es tomar esta versión.
106
00:07:29,000 --> 00:07:36,170
Pueden venir aquí, copiarse este pedacito de código que es Node, y el tag es 19.2, es decir, la
107
00:07:36,170 --> 00:07:39,350
versión 19 de Node menos Alpine.
108
00:07:39,590 --> 00:07:44,390
Si no dice Alpine, también ustedes van a poder encontrar otras versiones, como por ejemplo esta 19
109
00:07:44,390 --> 00:07:49,100
punto Two y esta es la versión de Alpine que está usando, porque Alpine también tiene otras versiones.
110
00:07:49,100 --> 00:07:54,410
Si quieren usemos esta de aquí porque es un nombre teóricamente más complicado, pero no es nada del
111
00:07:54,410 --> 00:07:54,820
otro mundo.
112
00:07:54,830 --> 00:07:58,340
Podemos tocar este botón y regresemos a nuestro Docker File.
113
00:07:59,380 --> 00:08:00,010
El primero.
114
00:08:00,070 --> 00:08:05,230
La primera instrucción usualmente viene como o con la palabra from y ustedes empiezan a escribir from
115
00:08:05,230 --> 00:08:06,100
y aquí me dice from.
116
00:08:06,610 --> 00:08:07,480
Imagen base.
117
00:08:08,140 --> 00:08:10,000
Usualmente lo que nosotros vamos a hacer.
118
00:08:11,450 --> 00:08:16,610
Usualmente lo que nosotros hacemos es que nuestros códigos van a estar basados en otra imagen.
119
00:08:17,450 --> 00:08:21,800
Técnicamente, ustedes pueden crear su imagen de absoluto cero, pero usualmente y la mayor parte de
120
00:08:21,800 --> 00:08:26,000
las veces y el 99% de las veces, ustedes van a trabajar con imágenes ya creadas.
121
00:08:26,240 --> 00:08:31,460
Entonces, básicamente aquí le digo de esta imagen es el punto inicial.
122
00:08:31,590 --> 00:08:31,920
Ok.
123
00:08:31,940 --> 00:08:33,920
Esta es nuestra, nuestra entrada.
124
00:08:34,280 --> 00:08:39,830
Aquí nosotros básicamente tenemos nuevamente nuestro sistema operativo, que sería el Alpine, la versión
125
00:08:39,830 --> 00:08:43,820
de Linux, y adicionalmente esa opción de Linux ya viene con Node instalado.
126
00:08:44,400 --> 00:08:46,400
Ok, ese va a ser nuestro primer paso.
127
00:08:46,670 --> 00:08:53,150
Otra cosa que vale la pena mencionar es que esta versión de Linux, esta versión de Linux que ya generó
128
00:08:53,150 --> 00:08:58,850
Node, viene con una carpeta interna llamada APP, que ya viene una carpeta internamente que se llama
129
00:08:58,850 --> 00:09:01,730
App, que usualmente ahí se usa para colocar mi aplicación.
130
00:09:01,730 --> 00:09:07,010
Pero ustedes pueden crear otros directorios porque básicamente es imagínense como si tuvieran una máquina
131
00:09:07,040 --> 00:09:09,440
virtual ya previamente configurada.
132
00:09:09,860 --> 00:09:15,560
Entonces el siguiente comando que yo quiero hacer es escribir Working directory y voy a especificar
133
00:09:15,560 --> 00:09:17,300
ah, el slash app.
134
00:09:17,570 --> 00:09:23,300
Es decir, esto es muy similar a que yo haga un cd, por ejemplo, voy a poner aquí arriba solo para
135
00:09:23,870 --> 00:09:27,040
que no nos equivoquemos, es como hacer un cd a la carpeta app.
136
00:09:27,050 --> 00:09:28,310
Lo mismo que hemos venido haciendo.
137
00:09:28,320 --> 00:09:34,880
Quiero que cambiemos de directorio al app, entonces todos los directorios o path relativos que yo voy
138
00:09:34,880 --> 00:09:38,660
a poner aquí van a estar ejecutándose dentro de este directorio.
139
00:09:39,330 --> 00:09:40,820
Ok, este es mi segundo paso.
140
00:09:41,150 --> 00:09:43,610
Recuerden, el All Point tiene esta carpeta de directorios.
141
00:09:44,210 --> 00:09:51,020
Van a ver que también tenemos el el user y tenemos lib y tenemos otro montón de carpetas ahí adentro.
142
00:09:51,800 --> 00:09:53,210
Ok, nos movemos de directorio.
143
00:09:53,840 --> 00:09:54,410
Perfecto.
144
00:09:55,100 --> 00:09:55,520
Ahora.
145
00:09:56,450 --> 00:10:01,460
Qué es lo que nosotros ocupamos para ejecutar nuestra aplicación, por ejemplo?
146
00:10:02,090 --> 00:10:07,180
Bueno, van a ser los archivos de la aplicación, porque ahorita es como que no tuviéramos nada.
147
00:10:07,220 --> 00:10:12,560
Es decir, no tenemos nada de nuestra aplicación, es decir, nuestro cron, O sea, este app JS no
148
00:10:12,560 --> 00:10:18,110
existe y es como que no tuviéramos
nada, nada, nada, nada de proyecto, simplemente tenemos el Linux
149
00:10:18,140 --> 00:10:21,110
con Node instalado y nos movimos al directorio app nada más.
150
00:10:21,110 --> 00:10:22,130
Eso es todo lo que hacemos.
151
00:10:22,550 --> 00:10:27,830
De alguna manera yo tengo que copiar los archivos que hacen mi aplicación.
152
00:10:27,830 --> 00:10:34,010
Por ejemplo, ocupo copiar el app JS porque está en mi aplicación, por decirlo así, y también voy
153
00:10:34,010 --> 00:10:39,410
a ocupar el paquete JSON porque aquí está el comando de inicio y también me dice qué dependencias son
154
00:10:39,410 --> 00:10:40,490
las que tiene mi aplicación.
155
00:10:40,940 --> 00:10:46,280
Entonces voy a escribir comando de copia y van notando que la sintaxis es que cada instrucción va capitalizada
156
00:10:46,280 --> 00:10:47,510
y eso tiene que hacerlo así.
157
00:10:47,960 --> 00:10:53,510
Me dice el source de donde lo voy a copiar, que eso sería prácticamente mi proyecto, de donde me encuentro.
158
00:10:53,960 --> 00:10:59,520
Y el destino es el relativo al working directory de dentro del contenedor de la imagen que estamos creando.
159
00:10:59,550 --> 00:11:02,690
Bueno, dentro de la imagen que estamos creando, esto no es un contenedor dentro de la imagen que estamos
160
00:11:02,690 --> 00:11:02,990
creando.
161
00:11:03,890 --> 00:11:08,870
Entonces yo puedo definir varios archivos de una vez y varias sintaxis y lo demás.
162
00:11:08,870 --> 00:11:15,710
Es decir, quiero copiar el archivo app JS y también quiero copiar el package JSON, es decir, voy
163
00:11:15,710 --> 00:11:16,610
a copiar este.
164
00:11:17,660 --> 00:11:21,030
Que hace es escribirlo bien y voy a copiar el app.
165
00:11:21,050 --> 00:11:26,630
Esos dos archivos son los que hacen mi aplicación y el destino es el último lugar donde yo lo voy a
166
00:11:26,630 --> 00:11:27,140
colocar.
167
00:11:27,500 --> 00:11:33,890
Si yo no hubiera escrito el Walking Dead History tendría que poner es las app, es las y quiero que
168
00:11:33,890 --> 00:11:39,920
lo pegues aquí, pero como tengo la línea de Walking Directory, entonces voy a ponerlo en el punto
169
00:11:39,920 --> 00:11:41,960
de slash, que esto ya está.
170
00:11:42,380 --> 00:11:45,170
El destino sería el slash app.
171
00:11:46,470 --> 00:11:46,710
Ok.
172
00:11:46,830 --> 00:11:49,680
Va a copiar este archivo, este otro lo va a pegar por acá.
173
00:11:49,950 --> 00:11:52,000
Como el video ya se está haciendo un poquito largo.
174
00:11:52,020 --> 00:11:57,450
Qué les parece si terminamos este video acá y continuamos en la siguiente clase donde vamos a construir
175
00:11:57,450 --> 00:11:58,050
nuestra imagen?
176
00:11:58,050 --> 00:11:59,130
Que solo faltan dos comandos.
177
00:11:59,130 --> 00:12:00,510
Ya, pero dejémoslo así.

Continuar navegando