ulgadas
n este video, te enseñaré todos los conceptos principales de Docker,
ncluida la experiencia práctica con él.
ntonces, si tienes que usar Docker en el trabajo,
si necesitas aprender Docker para mejorar tus habilidades de ingeniería y necesitas obtener
omencé rápido y entendí todos los conceptos principales y
prenda los conceptos básicos sobre cómo trabajar con Docker,
ste curso intensivo es perfecto para ti. Primero comenzaremos por
qué hacer
s por qué se creó básicamente,
ué problemas resuelve en ingeniería y cómo
yuda en el proceso de desarrollo e implementación de software.
ntonces entenderás exactamente por qué
s tan importante y por eso se ha vuelto tan popular y ampliamente utilizado en proyectos de TI
como parte de una solución de virtualización, doer
s una mejora con respecto a las máquinas virtuales o el siguiente paso de la evolución,
ambién explicaré la diferencia entre una máquina virtual y una más oscura,
cuáles son las ventajas de
acedor en esta comparación.
espués de entender por qué queremos usar do
n primer lugar, instalaremos
azlo y aprende a trabajar realmente con él. Aprenderemos
mágenes de doer, contenedores, más oscuros
egistro, registros públicos y privados,
ejecutaremos contenedores localmente en función de algunas de las imágenes disponibles en Docker
egistro público llamado Docker Hub.
ambién aprenderemos el concepto de crear tus propias imágenes
aprender sobre el plano de imagen de Docker llamado Docker File.
por supuesto,
eremos todo esto en acción y aprenderemos todos los comandos de Docker para extraer imágenes,
jecutar contenedores, crear su propia imagen de Docker, etcétera.
ambién aprenderemos sobre el control de versiones de imágenes con texto de imagen y, finalmente,
espués de aprender a trabajar con Docker,
ambién explicaré con animaciones gráficas cómo
ncaja en el panorama general del proceso de desarrollo e implementación de software.
ntonces, al final de este video,
e sentirá mucho más seguro de su conocimiento y comprensión en
acedor
puede aprovechar fácilmente ese conocimiento básico
ara convertirse en un usuario avanzado de Docker si lo desea.
debajo de la descripción del vídeo,
roporcionaré algunos recursos para aprender aún más sobre Docker
avance más en él. Pero antes de meternos de lleno,
arece que muchos de ustedes están viendo el
os vídeos de nuestro canal aún no están suscritos,
ntonces, si estás sacando algún valor del
utoriales gratuitos que publico regularmente en este canal,
segúrate de suscribirte no a mí, a ningún vídeo o tutorial futuro.
ambién me encantaría conectarme contigo en mis otras cuentas de redes sociales,
onde publico contenido entre bastidores, actualizaciones semanales, etc.
sí que espero conectarme contigo allí también.
ueno, estoy muy emocionada de enseñarte todo esto, así que empecemos.
omencemos con la pregunta más importante. ¿Qué es lo que hay que hacer?
Por qué se creó? ¿Y qué problema resuelve?
n palabras simples, Docker es un software de virtualización
ue facilita mucho el desarrollo y la implementación de aplicaciones,
s mucho más fácil en comparación con cómo se hacía antes de la introducción de Docker.
Docker lo hace empaquetando una aplicación
n algo llamado contenedor que tiene
odo lo que la aplicación necesita para ejecutarse,
omo el código de la aplicación en sí, sus bibliotecas y dependencias,
ino también el tiempo de ejecución y la configuración del entorno.
ntonces, la aplicación y su entorno de ejecución son
mbos empaquetados en un solo paquete de Docker,
ue puede compartir y distribuir fácilmente.
hora, ¿por qué es tan importante?
cómo se desarrollaron realmente las aplicaciones
se implementó antes de la introducción de Docker.
eamos eso para comprender los beneficios de Docker con mayor claridad.
ntonces, ¿cómo desarrollamos aplicaciones antes de los contenedores?
or lo general, cuando tienes un equipo de desarrolladores trabajando en alguna aplicación,
endrían que instalar todos los servicios.
sa aplicación
epende de nuestras necesidades, como los servicios de bases de datos,
tcétera directamente en su sistema operativo.
xacto.
or ejemplo, si está desarrollando una aplicación de JavaScript y necesita una publicación
ase de datos SQL,
al vez necesites
por cobrar a Mosquito por mensajes. Como si tuvieras una
hora necesita todos estos servicios localmente en su entorno de desarrollo
ara que puedas desarrollar y probar la aplicación correctamente,
todos los desarrolladores del equipo tendrían que ir a instalar todos esos servicios,
onfigúrelos y ejecútelos en su entorno de desarrollo local
según el sistema operativo que utilicen,
l proceso de instalación será diferente
orque instalar una publicación
ase de datos SQL en
o
l sistema operativo es diferente de instalarlo en una máquina con Windows. Por ejemplo,
tra cosa con la instalación de servicios directamente en
n sistema operativo que siga alguna guía de instalación
s que generalmente tiene varios pasos de instalación,
, a continuación, la configuración del servicio.
ntonces, con varios comandos que debe ejecutar para instalar,
onfigurar y configurar el servicio,
as posibilidades de que algo salga mal y se produzca un error son bastante altas.
este enfoque,
este proceso de configuración de un entorno de desarrollo para un desarrollador,
n realidad, puede resultar bastante tedioso, según la complejidad de la aplicación.
or ejemplo, si tiene 10 servicios que utiliza su aplicación,
ntonces tendría que hacer esa instalación 10 veces para cada servicio.
de nuevo,
erá diferente dentro del equipo según
ué sistema operativo utiliza cada desarrollador.
hora veamos cómo los contenedores resuelven algunos de estos problemas
on contenedores.
n realidad, no es necesario instalar ninguno
e los servicios directamente en su sistema operativo,
orque con Docker tienes ese servicio empaquetado en un entorno aislado.
ntonces tienes
resenta QL con una versión específica empaquetada con toda su configuración
entro de un contenedor.
ntonces, como desarrollador, no tienes que ir a buscar algunos binarios
ara descargar e instalar en su máquina.
ero más bien continúa e inicia ese servicio
omo contenedor de Docker con un solo comando de Docker,
ue obtiene el paquete contenedor de Internet
lo inicia en su computadora
el comando docker será el mismo
ndependientemente del sistema operativo en el que se encuentre,
también será el mismo independientemente del servicio que esté instalando.
ntonces, si tiene 10 servicios de los que depende su aplicación de JavaScript,
olo tendría que ejecutar 10 comandos de Docker para cada contenedor, y eso será todo.
ntonces, como puede ver, Docker estandariza,
l proceso de ejecutar cualquier servicio en tu desarrollo
ntorno y facilita mucho todo el proceso.
sí que básicamente puedes concentrarte y trabajar más en el desarrollo
e intentar instalar y configurar servicios en su máquina.
esto obviamente hace que la configuración de su entorno de desarrollo local
ucho más rápido y fácil que
a opción sin contenedores.
demás, con el Docker,
uedes incluso tener diferentes versiones de la misma aplicación
jecutándose en su entorno local sin tener ningún conflicto,
o cual es muy difícil de hacer
i está instalando la misma aplicación con
ersiones diferentes directamente en su sistema operativo,
veremos todo esto en acción en la parte de demostración de este vídeo.
hora veamos cómo los contenedores pueden mejorar el proceso de implementación de aplicaciones.
ntes de los contenedores. Un proceso de implementación tradicional tendría este aspecto
l equipo de desarrollo produciría un artefacto de aplicación o un paquete
unto con un conjunto de instrucciones sobre cómo
nstale y configure ese paquete de aplicaciones en el servidor.
ntonces tendrías algo como un archivo jar para el trabajo
plicación o algo similar según el lenguaje de programación utilizado.
además, por supuesto,
endrías algún tipo de servicio de base de datos
algunos otros servicios que su aplicación necesitaba,
ambién con un conjunto de instrucciones sobre cómo configurar
configúrelo en el servidor para que la aplicación pueda conectarse y usarlo.
ntonces, el equipo de desarrollo proporcionaría esa aplicación
rtefacto o paquete al equipo de operaciones,
el equipo de operaciones
e encargaría de la instalación
configurar la aplicación
todos sus servicios de inquilinos, como la base de datos, por ejemplo.
hora, el problema con este tipo de enfoque es que, en primer lugar,
ecesita configurar todo e instalar todo
uevamente directamente en el sistema operativo, que mencioné
n el contexto de desarrollo, que en realidad es muy propenso a errores,
puede tener varios problemas diferentes durante el proceso de configuración.
ambién puede tener conflictos con las versiones de dependencia donde
os servicios dependen de la misma biblioteca,
or ejemplo, pero con diferentes versiones.
cuando eso suceda,
ará que el proceso de configuración sea mucho más difícil y complejo.
ásicamente, muchas cosas que pueden salir mal durante las operaciones
l equipo está instalando y configurando aplicaciones y servicios en un servidor.
tro problema que podría surgir de este tipo de proceso es
uando hay una falta de comunicación entre
l equipo de desarrollo y el equipo de operaciones.
orque como todo está en una guía textual,
omo una lista de instrucciones sobre cómo configurar y ejecutar la aplicación,
tal vez algún tipo de lista de verificación,
odría haber casos en los que los desarrolladores olviden
ara mencionar algún paso importante sobre la configuración.
cuando esa parte falla,
l equipo de operaciones tiene que volver a los desarrolladores y solicitar más detalles y comentarios.
esto podría llevar a una comunicación de ida y vuelta
asta que la aplicación se implemente correctamente en el servidor.
ásicamente, tienes esta sobrecarga de comunicación adicional donde
os desarrolladores tienen que comunicarse en algún tipo de texto
ráfico en cualquier formato,
ómo debe ejecutarse la aplicación,
como mencioné, esto podría provocar problemas y problemas de comunicación
on contenedores. En realidad, este proceso está simplificado porque
hora los desarrolladores crean un paquete de aplicaciones
so no solo incluye el código en sí,
ino también todas las dependencias y la configuración de la aplicación.
ntonces, en lugar de tener que escribir eso en algún formato textual y documento,
ásicamente, simplemente empaquetan todo eso dentro del artefacto de la aplicación.
dado que ya está encapsulado en un entorno,
l personal de operaciones no tiene que configurar ninguna
e estas cosas directamente en el servidor.
or lo tanto, hace que todo el proceso sea mucho más fácil.
hay menos espacio para los problemas que mencioné anteriormente.
ntonces, lo único que debe hacer el equipo de operaciones en este caso
s ejecutar un comando docker que obtenga el paquete contenedor que crearon los desarrolladores
lo ejecuta en el servidor.
e la misma manera que el equipo de operaciones ejecutará un servicio
ue la aplicación también necesita como contenedores Docker,
eso facilita mucho el proceso de implementación desde el punto de vista operativo.
hora, por supuesto,
l equipo de operaciones tendrá que instalar y configurar Docker Run
iempo en el servidor antes de que puedan ejecutar contenedores.
ero eso es solo un esfuerzo de tiempo para un servicio o una tecnología.
una vez que tenga instalado el tiempo de ejecución de Docker,
implemente puede ejecutar contenedores Docker en ese servidor
hora. Al principio, mencioné que Docker es
omo una máquina virtual, y las máquinas virtuales existen desde hace mucho tiempo.
ntonces, ¿por qué se adoptó tanto el color oscuro?
ué ventajas tiene sobre las máquinas virtuales,
y cuál es la diferencia entre los dos?
ara eso, necesitamos ver un poco cómo hacerlo
unciona a nivel técnico.
ambién dije eso con Docker,
o necesita instalar los servicios directamente en el sistema operativo.
ero
n ese caso, ¿cómo ejecuta Docker sus contenedores en un sistema operativo?
hora, para entender todo esto,
eamos primero cómo se compone un sistema operativo.
os sistemas operativos tienen dos capas principales.
ienes el núcleo del sistema operativo
las aplicaciones del sistema operativo.
el kernel es la parte que se comunica con los componentes de hardware, como la CPU,
lmacenamiento de memoria, etcétera.
ntonces, cuando tienes una máquina física
on todos estos recursos e instalas el sistema operativo
n esa máquina física,
l núcleo del sistema operativo en realidad
ea quien hable con los componentes de hardware
ara asignar recursos como el almacenamiento de memoria de la CPU, etcétera,
las aplicaciones y, a continuación, a ejecutarlas en ese sistema operativo.
esas aplicaciones forman parte de la capa de aplicaciones,
se ejecutan en la parte superior de la capa del núcleo.
ntonces, el kernel es una especie de intermediario entre las aplicaciones que ve
uando interactúas con tu computadora
el hardware subyacente de su computadora.
ahora, dado que Docker y Virtual Machine son herramientas de virtualización,
a pregunta es
qué parte del sistema operativo virtualizan realmente?
ahí es donde está la principal diferencia
ntre Docker y máquinas virtuales en realidad como
ara que Docker virtualice la capa de aplicaciones.
sto significa que cuando ejecutas un contenedor Docker,
n realidad contiene la capa de aplicaciones
el sistema operativo y algunas otras aplicaciones
nstalado en la parte superior de esa capa de aplicación.
odría ser un tiempo de ejecución de Java o Python o lo que sea,
usa el núcleo del host porque no tiene su propio núcleo.
a máquina virtual, por otro lado,
iene la capa de aplicaciones y su propio núcleo.
or lo tanto, virtualiza todo el sistema operativo,
o que significa que cuando descargas una imagen de máquina virtual en tu host.
o usa el núcleo de hosts. De hecho, arranca el suyo propio
ntonces, ¿qué significa realmente esta diferencia entre una máquina más oscura y una máquina virtual?
n primer lugar, el tamaño de los paquetes o imágenes más oscuros es mucho más pequeño
orque solo tienen que implementar una capa
el sistema operativo
or lo que las imágenes más oscuras suelen ocupar un par de megabytes.
as imágenes grandes de máquinas virtuales, por otro lado, pueden ocupar un par de gigabytes.
sto significa que cuando se trabaja con Docker, se ahorra mucho espacio en disco.
uede ejecutar e iniciar contenedores Docker mucho más rápido que las máquinas virtuales,
orque la máquina virtual tiene que instalar un núcleo cada vez que se inicia,
ientras que el contenedor Docker simplemente se reutiliza
l núcleo del host y simplemente inicia la capa de aplicación encima de él.
ntonces, aunque la máquina virtual necesita un par de minutos para iniciarse,
os contenedores docker generalmente se inician en un
nos pocos milisegundos.
a tercera diferencia es la compatibilidad,
ara que pueda ejecutar la imagen virtual de cualquier sistema operativo en cualquier otro
ost del sistema operativo.
ntonces, en una máquina Windows, puede ejecutar una máquina virtual Linux, por ejemplo.
ero no puedes hacer eso con Docker, al menos no directamente, entonces, ¿cuál es el problema aquí?
upongamos que tiene un sistema operativo Windows con Windows Kernel
su capa de aplicación, y desea ejecutar un Linux
magen de Docker basada directamente en ese host de Windows. El problema aquí es
a imagen de Docker basada en Docker no puede usar el kernel de Windows. Necesitaría un núcleo de Linux para ejecutarse
orque puede ejecutar una capa de aplicaciones de Linux en un Kern de Windows.
sí que eso es un problema con Docker.
in embargo,
uando desarrolla en Windows o Me
S,
esea ejecutar varios servicios porque la mayoría de los contenedores para los servicios populares
stán en realidad basados en Linux.
ambién es interesante saber que Docker se escribió y creó originalmente para Linux
ero más tarde
e hecho, hice una actualización y desarrollé lo que
lamado Docker desktop para Windows y Mac,
o que lo hizo posible
ara ejecutar contenedores basados en Linux también en ordenadores Windows y Mac.
ntonces, la forma en que funciona es que el escritorio más oscuro usa una capa de hipervisor
on un Linux ligero
istribución además
ara proporcionar el núcleo de Linux necesario
de esta manera ejecutar Linux
s posible usar contenedores basados en los sistemas operativos Windows y Mac.
, por cierto,
i desea obtener más información sobre la virtualización y cómo funcionan las máquinas virtuales.
qué es un hipervisor, por ejemplo.
uedes ver mi otro vídeo, donde explico todo eso en detalle.
sto significa para el desarrollo local.
omo ingeniero, instalaría un escritorio más oscuro en su Windows o Mac
omputadora con sistema operativo
ara ejecutar Linux
mágenes basadas, que, como mencioné en la mayoría de las bases de datos de servicios populares,
tcétera están basados en su mayoría en Linux.
ntonces necesitarías eso,
eso nos lleva a la
nstalación de
acedor.
ara hacer algunas demostraciones y aprender Docker en la práctica,
rimero tendría que instalarlo.
ntonces, para instalar Docker,
implemente vaya a su página oficial para obtener la guía de instalación
siga los pasos.
omo Docker se actualiza todo el tiempo, la instalación cambia.
ntonces, en lugar de simplemente darles algunos comentarios que
uede funcionar ahora, pero se actualizará en el futuro,
iempre debes consultar las últimas
ocumentación para la guía de instalación de cualquier herramienta.
ntonces, si buscamos Docker desktop
nstalación
haga clic en uno de esos enlaces, como instalar en Windows, así que eso es
l escritorio Docker,
a herramienta que mencioné
esolvió este problema de ejecutar imágenes basadas en Linux en un sistema operativo diferente,
ero en realidad incluye muchas otras cosas cuando lo instalas.
ntonces, ¿qué está instalando exactamente con el escritorio Docker?
ves exactamente lo que está incluido allí.
ásicamente, obtenga el servicio Docker en sí. Se llama Docker
otor.
sa es la parte principal del docker que hace posible esta virtualización.
ero cuando tenemos un servicio, necesitamos comunicarnos con él, ¿verdad?
ntonces necesitamos un cliente
ue pueda hablar con ese servicio.
ntonces, Docker Desktop en realidad viene con un cliente de interfaz de línea de comandos,
o que significa que podemos ejecutar comandos más oscuros en una línea de comandos
ara iniciar contenedores para crear contenedores, iniciar, detenerlos, eliminarlos, etcétera,
haz todo tipo de cosas. Y también viene con un cliente de interfaz gráfica de usuario
ntonces, si no se siente cómodo trabajando con la línea de comandos,
ealmente puede usar la interfaz gráfica de usuario donde puede hacer todas estas cosas.
ero en una interfaz de usuario agradable y fácil de usar,
sí que obtienes todas estas cosas cuando instalas Docker Desktop,
ásicamente todo lo que necesita para empezar con Docker
, por supuesto, según el sistema operativo en el que se encuentre,
as a elegir ese Mac Windows o Linux.
sí que hagamos clic en uno de esos y, básicamente, siga las instrucciones.
iene algunos requisitos de sistema. Tienes que comprobar
osas como la versión de tu Mac OS,
uántos recursos vas a necesitar.
también tienes las opciones para Mac con Intel o Mac
on Apple Silicon para que puedas alternar entre ellas y, básicamente,
implemente elija la guía que coincida con las especificaciones de su computadora.
una vez que lo tenga, compruebe los requisitos del sistema,
igue adelante y haz clic en uno de esos.
n mi caso, tengo un Mac con Intel
hip, así que haría clic en este,
ese es en realidad el instalador de escritorio de Docker.
ntonces, si hago clic, se descargará este DMG
magen. Y una vez que se descarga, básicamente solo tienes que seguir
os pasos que se describen aquí,
verdad? Haces doble clic en él y abres la aplicación
así sucesivamente.
lo mismo para Windows. Si es Windows, básicamente haces clic en este
descargue el escritorio Docker para Windows
asegúrese de comprobar los requisitos del sistema
en cierto modo prepara todo
ue necesita para iniciar Docker.
n general, para las últimas versiones de Windows, Mac o cualquier sistema operativo.
ebería ser bastante fácil y sencillo instalar Docker.
sí que adelante, hazlo.
na vez que haya terminado con la instalación,
implemente puede iniciar el servicio buscando en Docker.
si hago clic en él,
o verás aquí
ue en realidad es
uesta en marcha. Servicio Docker para el motor Docker.
ahí lo tienes,
stá funcionando,
esta vista en la que están viendo en esta ventana es
n realidad, la interfaz gráfica de usuario de Docker que mencioné.
se es el cliente que puede usar para interactuar con el motor Docker.
sí que tiene una lista de contenedores en ejecución actualmente, por lo que no hay ninguna lista,
o mismo con las imágenes. Si cambio a imágenes, he limpiado
sí que empiezo con scratch con un estado vacío igual que tú.
sí que estamos listos para empezar a usar el más oscuro.
ero primero te preguntarás qué son las imágenes,
eso es lo que voy a explicar a continuación,
orque es un concepto muy importante en la oscuridad
hora significa que Docker permite empaquetar la aplicación con su entorno
onfiguración en este paquete que puede compartir y distribuir fácilmente.
sí que, al igual que un archivo de artefacto de aplicación,
omo cuando creamos un archivo zip o tar o un archivo jar,
ue puede cargar en un almacenamiento de artefactos y, a continuación
escárguelo en el servidor o localmente cuando lo necesite.
ese paquete o artefacto que producimos con Docker se llama imagen de Docker.
sí que es básicamente un artefacto de aplicación
ero diferente del archivo Jar
de otros artefactos de aplicación.
o solo tiene el código de la aplicación compilado en su interior,
ero además tiene información sobre
a configuración del entorno.
iene la capa de aplicación del sistema operativo, como mencioné,
ás herramientas como el nodo N, PM o el tiempo de ejecución de Java
nstalado en eso,
egún el lenguaje de programación en el que se haya escrito la aplicación.
or ejemplo, si tiene una aplicación de JavaScript,
ecesitaría los nodos Js y N PM para ejecutar su aplicación correctamente,
ntonces, en la imagen más oscura, ya tendrías el nodo y el N PM instalados.
ambién puede agregar las variables de entorno que necesite su aplicación.
uede crear directorios.
uede crear archivos o cualquier otro entorno
onfigure lo que necesite en torno a su aplicación.
ntonces, toda esa información está empaquetada en la imagen de Docker,
unto con el código de la aplicación,
esa es la gran ventaja de Docker de la que hablamos.
como dije, el paquete se llama imagen.
ntonces, si eso es una imagen, ¿qué es un contenedor?
ueno, necesitamos iniciar ese paquete de aplicaciones en alguna parte, ¿verdad?
ntonces, cuando tomamos ese paquete o imagen y lo descargamos
un servidor o a su computadora portátil local,
ueremos ejecutarlo en la computadora.
a aplicación tiene que ejecutarse realmente.
cuando ejecutamos esa imagen en un sistema operativo
la aplicación interna comienza en la versión preliminar
ntorno configurado que nos proporciona un contenedor.
ntonces, una instancia en ejecución de una imagen es un contenedor.
ntonces, un contenedor es básicamente una instancia en ejecución de una imagen y
partir de la misma imagen de una imagen, puede ejecutar varios contenedores,
que es un caso de uso legítimo si necesita ejecutar
arias instancias de la misma aplicación para aumentar el rendimiento,
or ejemplo, y eso es exactamente lo que estábamos viendo aquí.
sí que tenemos las imágenes. Estos son los paquetes de aplicaciones, básicamente
luego a partir de esas imágenes podemos comenzar
ontenedores que veremos en la lista aquí,
ue son instancias en ejecución de esas imágenes.
también dije que
demás de la interfaz gráfica de usuario,
btenemos una interfaz de línea de comandos client do client que puede hablar con do
otor.
esde que instalamos el escritorio Docker,
eberíamos tener esa CLI de Docker también disponible localmente,
o que significa que si abre su terminal, debería poder ejecutar comandos de Docker
documentos. Podemos hacer cualquier cosa
or ejemplo, podemos comprobar qué imágenes tenemos disponibles localmente.
ntonces, si hago imágenes de Docker, me dará una lista de las imágenes que tengo localmente,
, en este caso, no tengo ninguno que hayamos visto en la interfaz gráfica de usuario.
también puedo verificar los contenedores usando un docker de comandos,
S
nuevamente,
odavía no tengo ningún contenedor en ejecución.
hora, antes de continuar, quiero saludar a Net
Hopper. Los más
lataforma en la nube, llamada
n los gobernadores
peraciones de aplicaciones, ofrece una forma sencilla para que los equipos de DevOps entreguen, administren,
ctualice, conecte, proteja y supervise las aplicaciones en uno o más kits
lústeres.
on esta plataforma, básicamente crean esta capa de red virtual
ue conecta varios entornos.
or ejemplo, si tiene varias plataformas en la nube y varias
lústeres, incluso su propio centro de datos local,
onde se implementa su aplicación,
uede conectar todo esto en una red virtual para poder implementarlo y operarlo
as cargas de trabajo de su comunidad como si estuviera en
n clúster o un entorno de infraestructura y ya está
l enfoque centrado en arriba que utilizan ofrece la visibilidad necesaria para saber quién
izo qué y cuándo tanto para su infraestructura como para su aplicación.
ntonces, con Net Hopper, las empresas pueden automatizar sus operaciones.
en lugar de construir una plataforma propia,
os equipos de DevOps pueden centrarse en lo que más importa,
ue está lanzando más funciones de la aplicación más rápido.
sí que échales un vistazo. De hecho, puedes registrarte para obtener una cuenta gratuita y probarla
ara ver si Net Hopper es la solución adecuada para usted.
hora está claro que obtenemos contenedores al ejecutar imágenes,
ero, ¿cómo obtenemos imágenes desde las que ejecutar contenedores?
igamos que queremos correr
n contenedor de base de datos o
algún contenedor de servicio colector de cerraduras. ¿Cómo obtenemos sus imágenes
ueno, ahí es donde entran en juego los registros de Docker.
or lo tanto, hay imágenes de Docker listas para usar disponibles en línea en un almacenamiento o registro de imágenes.
ásicamente, este es un almacenamiento específico para artefactos de imágenes más oscuras,
, por lo general, las empresas que desarrollan esos servicios
omo listo
etcétera, así como Docker.
a propia comunidad creará lo que se denomina imágenes oficiales.
a imagen fue creada realmente por
l mismo o la comunidad de Docker.
sí que ya sabes, es una imagen oficial verificada del propio Docker.
el propio Docker ofrece el registro de Docker más grande
lamado Docker Hub,
onde puedes encontrar cualquiera de estas imágenes oficiales y muchas otras
mágenes de diferentes empresas o individuos
os desarrolladores han creado y subido allí.
ntonces, si buscamos Dark Hub
quí mismo, verá la biblioteca de imágenes de doctor Hub Container.
sí es como se ve.
en realidad no tiene que registrarse o firmar
ube a Dock Hub para encontrar las imágenes oficiales.
sí que cualquiera puede ir a este sitio web y, básicamente, explorar las imágenes del contenedor.
aquí en la barra de búsqueda,
uede escribir cualquier servicio que esté buscando. Por ejemplo, ¿listo
ue mencioné.
si presiono enter,
ásicamente verás un
ista de varias imágenes relacionadas listas, así como el propio servicio de preparación
omo una imagen más oscura.
aquí tienes este lote o etiqueta que dice imagen oficial más oscura, por ejemplo,
ara la imagen más roja que vamos a elegir aquí,
uede ver que en realidad lo mantiene la comunidad de Docker.
a forma en que funciona es que Docker tiene un equipo dedicado que es responsable
ara revisar y publicar todo el contenido en las imágenes oficiales más oscuras.
este equipo trabaja en colaboración con los creadores de la tecnología,
mantenedores, así como expertos en seguridad
ara crear y gestionar esas imágenes oficiales más oscuras.
e esta manera, se garantiza que no solo
os creadores de tecnología participan en la creación oficial de la imagen,
ero también toda la seguridad, las mejores prácticas y la producción más oscuras.
as mejores prácticas también se consideran en la creación de imágenes,
esa es básicamente la página de descripción con todos los
nformación sobre cómo usar esta imagen más oscura,
ué incluye, etcétera
nuevamente, como dije, Docker Hub es el registro de imágenes de Docker más grande,
ara que puedas encontrar imágenes para cualquier servicio que desees
uiero usarlo en Docker Hub.
hora, por supuesto,
a tecnología cambia y hay actualizaciones en las aplicaciones de esas tecnologías.
sí que tienes una nueva versión del rojo
mango a B,
en ese caso un nuevo
e creará la imagen del realizador,
or lo que las imágenes también son versiones,
se denominan etiquetas de imagen.
en la página de cada imagen, en realidad
ienen la lista de versiones o etiquetas de esa imagen
e enumeran aquí.
ntonces esto es para
si busco um Post,
or ejemplo,
erás diferentes etiquetas de imagen para
a imagen res también se muestra aquí.
ntonces, cuando utiliza una tecnología y necesita una versión específica, puede elegir
na imagen más oscura que tiene esa versión de la tecnología.
hay una etiqueta especial que tienen todas las imágenes
lamado último. Así que aquí puedes ver esta última etiqueta
aquí también en el texto reciente.
sí que la última etiqueta es básicamente la última, la última imagen que se creó.
or lo tanto, si no especifica o elige una versión de forma explícita,
ásicamente obtienes la imagen más reciente del centro de Docker.
hora hemos visto qué son las imágenes
dónde puede conseguirlos.
sí que ahora la pregunta es,
cómo obtenemos realmente la imagen de Docker Hub y la descargamos?
ocalmente en nuestra computadora para que podamos iniciar un contenedor a partir de esa imagen.
rimero localizamos la imagen que queremos ejecutar como contenedor local para nuestra demostración.
oy a usar un motor
magen. Así que adelante y busca Engine,
ue es básicamente un servidor web simple y tiene una interfaz de usuario
ntonces podremos acceder a nuestro contenedor desde
l navegador para validar El contenedor se inició correctamente.
or eso elijo el motor,
aquí tienes un montón de etiquetas de imagen
ntre las que puede elegir.
ntonces, el segundo paso después de localizar la imagen es elegir una tecnología de imagen específica
tenga en cuenta que seleccionar
na versión específica de la imagen es la mejor práctica en la mayoría de los casos.
digamos que elegimos la versión 1.23.
sí que vamos a elegir esta etiqueta aquí mismo para descargar una imagen.
olvemos a nuestra terminal y ejecutamos Docker
xtraiga el comando y especificamos el nombre de la imagen,
ue es
otor X.
sí que también tienes todo ese comando aquí,
sí que ese es básicamente el nombre de la imagen que ha escrito aquí.
sí que eso es NGX.
luego
specificamos la etiqueta de la imagen separándola con dos puntos
, a continuación, la versión
1,23. Eso es lo que elegimos
se es todo el comando. Entonces, Docker Client se pondrá en contacto con do
ub y dirán: Quiero agarrar
l motor
magen con esta etiqueta específica y descárguela localmente.
aquí vemos que está extrayendo la imagen de
l centro de Docker del registro de imágenes.
la razón por la que no tenemos que decirle a Docker que
ncontrar esa imagen en Docker Hub se debe a que Docker Hub es en realidad el predeterminado
bicación donde Docker buscará las imágenes que especifiquemos aquí.
or lo tanto, se configura automáticamente como una ubicación para
escargando las imágenes y se produjo la descarga.
ahora, si volvemos a ejecutar el comando docker images, como hicimos aquí,
eberíamos ver una imagen ahora localmente, que es el motor
on una etiqueta de imagen
.23
alguna otra información como el tamaño de la imagen,
ue suele estar en megabytes,
omo mencioné.
sí que ahora tenemos una imagen localmente,
si extraemos una imagen sin ninguna etiqueta específica,
sí que hacemos esto, básicamente, Docker extrae un nombre de la imagen.
si ejecuto esto, verá que extrae la última imagen automáticamente.
ahora, si lo hago
mágenes de nuevo,
amos a ver dos imágenes del motor
on dos textos diferentes,
verdad? Así que estas son en realidad dos imágenes separadas
enial.
hora tenemos imágenes localmente,
ero obviamente solo son útiles cuando los ejecutamos en un entorno de contenedores.
Cómo podemos hacer eso? También es muy
legimos la imagen que ya tenemos disponible localmente
on la etiqueta. Así que digamos que queremos correr
sta imagen como contenedor
ejecutamos el comando dark run
on el nombre de la imagen
la etiqueta
úper fácil
ejecutemos.
ese comando realmente inicia el contenedor en función de la imagen.
sabemos que el contenedor se inició porque vemos el
egistros del servicio del motor que se inician dentro del contenedor.
sí que estos son en realidad los registros de contenedores que vemos en la consola.
sí que está lanzando un par de scripts,
aquí tenemos los procesos de trabajo iniciales y el contenedor se está ejecutando.
sí que ahora
i abro una nueva sesión de terminal
e gusta esto
azlo
S,
e hecho, debería ver un contenedor,
ste de aquí
n la lista de contenedores en ejecución,
tenemos información sobre el contenedor.
enemos la imagen en la que se basa el contenedor,
ncluida la tecnología cuando se creó
también el nombre del contenedor. Así que tenemos el ID y el nombre del contenedor
ste es el nombre que docker realmente usa automáticamente
enera y asigna un contenedor cuando se crea.
sí que es un nombre generado aleatoriamente.
hora, si vuelvo aquí, verá que estos troncos, los troncos de contenedores,
n realidad están bloqueando el terminal.
ntonces, si quiero recuperar la terminal y controlar la salida C,
l contenedor sale y el proceso realmente muere.
sí que ahora, si lo hago
D, verá que no hay ningún contenedor en ejecución.
ero podemos iniciar un contenedor
n segundo plano sin que bloquee el terminal agregando
na bandera llamada menos D,
ue significa separado.
or lo tanto, separa el proceso de Docker de la terminal.
si ejecuto esto,
es que ya no bloquea el terminal.
en lugar de mostrar los registros del motor X arrancando dentro del contenedor,
implemente se bloquea
a identificación completa del contenedor. Así que ahora, si lo hago
S
quí en la misma terminal, debería ver ese contenedor
orriendo de nuevo.
ese es básicamente el ID o la parte de esta cadena de ID completa
e muestra aquí.
ero cuando iniciamos un contenedor en segundo plano en modo independiente,
s posible que aún desee ver los registros de la aplicación dentro del contenedor,
sí que quizás quiera ver cómo arrancó el motor la próxima vez.
Qué aspecto tenía, en realidad, entonces?
ara eso, puede usar otro comando de Docker llamado Docker logs
on el ID del contenedor
e gusta esto,
imprimirá los registros de la aplicación desde el contenedor.
hora, para crear el contenedor
ontenedor, primero extraemos la imagen y, a continuación, creamos un contenedor a partir de esa imagen.
Pero
odemos ahorrarnos el comando pull
ejecutar
jecute el comando directamente, incluso si la imagen no está disponible localmente.
hora mismo tenemos estas dos imágenes disponibles localmente,
ero en el comando Docker run,
e hecho, puede proporcionar cualquier imagen que exista en Docker Hub.
o necesariamente tiene que existir localmente en su computadora,
ara que no tengas que hacer eso primero.
ntonces, si vuelvo, podemos elegir una versión de imagen diferente.
lijamos 1.22 dash alpine,
sí que
sta etiqueta de imagen,
ue no tenemos localmente
Por supuesto, este puede ser un servicio completamente diferente. No importa.
ásicamente cualquier imagen que no tengamos localmente
uede ejecutar directamente mediante el comando docker run.
ntonces, lo que hace es primero. Lo intentará
ocaliza esa imagen
nivel local,
si no lo encuentra,
rá al Docker hub de forma predeterminada
extraiga la imagen desde allí automáticamente, lo cual es muy conveniente.
ásicamente, hace ambas cosas en un solo comando. Así que descargó la imagen con esta
inició el contenedor.
ahora, si hacemos Docker PS,
eberíamos tener dos contenedores ejecutándose con diferentes
ersiones.
recuerda, dije:
ocker resuelve el problema de ejecutar diferentes versiones de la misma aplicación
la vez. Así de simple es hacerlo con Docker
ara que podamos hacer clic en este contenedor.
hora, nuevamente, tenemos
se contenedor de un motor con esta versión.
hora la pregunta importante es, ¿cómo accedemos a este contenedor?
ueno, no podemos ahora
orque el contenedor se ejecuta en
a red Docker cerrada, por lo que no podemos acceder a ella desde el navegador de nuestra computadora local,
or ejemplo,
rimero necesitamos exponer el contenedor a nuestro
ed local que puede sonar un poco difícil,
ero es muy fácil.
ásicamente, vamos a hacer lo que se llama enlace de puertos.
l contenedor se ejecuta en algún puerto, ¿verdad?
cada aplicación tiene un puerto estándar en el que se ejecuta,
omo motor
plicación
iempre se ejecuta en el puerto 80 Red
e ejecuta en el puerto
379.
or lo tanto, estos son puertos estándar para estas aplicaciones.
sí que ese es el puerto en el que se ejecuta el contenedor.
para
emos los puertos en la lista de puertos aquí, la aplicación se ejecuta en el puerto A
entro del contenedor. Así que ahora, si intento acceder
otor
dor 12.850
n este puerto en el puerto 80 desde el navegador
intentemos hacer eso
Puerto 80
ulsa enter.
es que no hay nada disponible en este puerto
en el host local. Así que ahora podemos decírselo
ye, ¿sabes qué?
nuestro anfitrión local en
ualquier puerto que les diga en algún puerto específico como 80 80 o 9000,
n realidad no importa para poder acceder al contenedor o lo que sea que se esté ejecutando
entro del contenedor como si se estuviera ejecutando en mi puerto de host local 9000.
lo hacemos con una bandera adicional al crear
n recipiente más oscuro.
sí que
o que vamos a hacer es primero detener este contenedor
cree uno nuevo. Así que vamos
ual
ásicamente detiene este contenedor en ejecución,
vamos a crear un nuevo contenedor.
sí que vamos a hacer
orrer
otor X
a misma versión
lo encontraremos en segundo plano en el modo de separación.
hora vamos a vincular los puertos con un movimiento adicional menos P,
es muy fácil.
e estamos diciendo a Docker
l
otor
uerto de aplicaciones
entro del contenedor, que es un
or favor, toma eso y encuadernalo
n un anfitrión o anfitrión local
n cualquier puerto. 9000, por ejemplo.
se es el puerto que elijo.
ntonces, esta bandera aquí
ealmente expondrá el contenedor a nuestra red local o host local.
sí que este motor
l proceso que se ejecuta en el contenedor estará accesible para nosotros en el puerto 9000.
ntonces, si ejecuto esto,
eamos que el contenedor se está ejecutando,
n la sección de puertos vemos un valor diferente. Entonces, en lugar
enemos esta información de enlace de puerto.
ntonces, si olvidó qué puerto eligió. O si tiene 10 contenedores diferentes con
S,
ealmente puede ver en qué puerto se puede acceder a cada contenedor en su host local.
sí que este será el puerto.
hora, si vuelvo al navegador
en lugar del host local 80 vamos a escribir local host 9000
golpe. Entrar
hí lo tienes. ¡Le damos la bienvenida a Engine
ágina, significa que realmente estamos accediendo a nuestra aplicación.
también podemos ver eso en los registros. Habla mucho
D de contenedor.
ahí lo tienes. Este es el registro. Uh, ese motor
a aplicación produjo que recibió una solicitud de Mac o mía
áquina con sistema operativo
avegador Chrome.
ntonces vemos que nuestra solicitud realmente llegó al
otor
plicación que se ejecuta dentro del contenedor.
sí de fácil es ejecutar un servicio dentro de un contenedor y luego acceder a él localmente.
hora, como dije, puedes elegir el puerto que quieras,
ero también es prácticamente un estándar usar lo mismo
uerto en su máquina host tal como lo está utilizando el contenedor.
ntonces, si estuviera ejecutando un contenedor de MySQL que comenzara en
uerto 3306 Lo vincularía al host local 3306.
sí que eso es una especie de estándar.
hora hay una cosa que quiero señalar aquí, y es que Docker ejecuta
n realidad crea un nuevo contenedor cada vez.
o reutiliza el contenedor que creamos anteriormente.
o que significa que, dado que ya ejecutamos el comando Docker run un par de veces,
n realidad deberíamos tener varios contenedores en nuestro
ortátil. Sin embargo, si hago Docker P SI solo
o veo los que creé pero detuve.
ero esos contenedores todavía existen.
ntonces, si hago docker PS
on una mancha
ejecutar
sto le da realmente una lista de todos
ontenedores, ya sea que estén en ejecución o detenidos.
sí que este es el contenedor activo
ue todavía se está ejecutando
estos son los parados.
ncluso dice que salió hace 10 minutos, hace seis minutos.
sí que tenemos cuatro contenedores con diferentes configuraciones
anteriormente te mostré Docker stop
omando que básicamente detiene un contenedor en ejecución activa
ara que podamos detener este.
ahora lo mostrará como
n contenedor detenido también salió hace un segundo,
ero de la misma manera.
ambién puede reiniciar un contenedor que creó anteriormente
in tener que crear uno nuevo con docker Run,
ompromiso.
ntonces, para eso tenemos un comienzo más oscuro
ue toma la ID del contenedor
inicie el contenedor una y otra vez. Puede iniciar varios
ontenedores a la vez si lo desea,
e gusta esto.
Y
hora tiene dos contenedores en ejecución.
hora ha visto que utilizamos el ID del contenedor en varios comandos de almacén.
ntonces, para detener el contenedor, reiniciarlo, comprobar los registros, etcétera.
ero la identificación es difícil de recordar y tendrás que buscarla todo el tiempo.
sí que
omo alternativa,
ambién puede usar el nombre del contenedor para todos estos comandos
n lugar del ID que Docker genera automáticamente.
ero en realidad podemos reescribir eso y podemos dar nuestros contenedores
ombres más significativos cuando los creamos
ara que podamos detener esos dos contenedores
tilizando el ID
el nombre
e gusta esto.
sí que estos son dos contenedores diferentes, uno con ID,
no con nombre y los detendremos a los dos.
hí lo tienes.
hora, cuando creamos un nuevo contenedor, podemos darle un nombre específico
hay otra bandera para eso
ue es el nombre de Dash Dash. Y luego proporcionamos
l nombre que queremos darle a nuestro contenedor. Y digamos que esto es, um
plicación web. Así es como llamaremos
ejecutemos.
i lo hago
PS
es que el nombre no es algo aleatorio generado automáticamente,
ero, en cambio, nuestro contenedor se llama Web.
sí que ahora podemos hacer lo mismo
erraduras y
ombre de nuestro contenedor
e gusta esto.
hora hemos aprendido sobre Do
ub, que en realidad es
o que se llama registro público de imágenes,
o que significa
sas imágenes que utilizamos están visibles y disponibles para el público.
ero cuando una empresa crea sus propias imágenes de sus propias aplicaciones,
or supuesto que no quieren que esté disponible públicamente.
ntonces, para eso existen lo que se llama registros de Docker privados,
hay muchos de ellos.
asi todos los proveedores de servicios en la nube tienen un servicio de registro de Docker privado,
or ejemplo, AWS EECR o el servicio de registro de contenedores elásticos, Google Azure.
odos tienen sus propios registros de Docker.
exus, que es un popular servicio de almacenamiento de artefactos, tiene un registro de tareas.
ncluso Docker Hub tiene un registro de muelle privado
ntonces, en la página de inicio de Dock Hub, viste este formulario de inicio.
ntonces, básicamente, si quieres almacenar tus imágenes privadas de Docker en Doer
Hub,
e hecho, puede crear un registro privado en Docker Hub o
ncluso cree un registro público y cargue sus imágenes allí.
or eso tengo una cuenta,
orque he subido un par de imágenes en Do
ub que mis alumnos pueden descargar para diferentes cursos.
hay un concepto más que quiero mencionar relacionado con el registro,
ue es algo llamado repositorio,
ue también escuchas a menudo. Haz
n repositorio hacer
registro? Entonces, ¿cuál es la diferencia entre ellos? Muy simple, explicó AWS.
CR es un registro. Básicamente, es un servicio que proporciona almacenamiento de imágenes.
dentro de ese registro,
uede tener varios repositorios para las diferentes imágenes de la aplicación.
sí que cada aplicación tiene su propio repositorio,
en ese repositorio puede almacenar diferentes versiones de imágenes
etiquetas de la misma aplicación de la misma manera.
e
ub es un registro. Es un servicio para almacenar
hub,
uede tener sus repositorios públicos para almacenar imágenes que serán
ccesible públicamente o puede tener
epositorios privados para diferentes aplicaciones.
nuevamente, puede tener un repositorio dedicado para cada aplicación.
sí que esa es una nota al margen.
i escuchas estos términos y conceptos y sabes cuál es la diferencia entre ellos
ahora?
encioné que las empresas querrían crear
us propias imágenes personalizadas para sus aplicaciones.
ntonces, ¿cómo funciona eso realmente?
Cómo puedo crear mi propia imagen de Docker para mi aplicación?
el caso de uso para eso es, cuando estoy
erminado con el desarrollo, la aplicación está lista.
iene algunas funciones y queremos lanzarlo a los usuarios finales.
or lo tanto, queremos ejecutarlo en una implementación
ervidor y para facilitar el proceso de implementación.
Quieres implementar nuestra aplicación como un contenedor Docker junto con la base de datos?
y otros servicios que también se ejecutarán como contenedores Docker?
ntonces, ¿cómo podemos tomar nuestra aplicación implementada creada?
codificarlo y empaquetarlo en una imagen de Docker?
ara eso, necesitamos crear una definición de cómo construir una imagen
esde nuestra aplicación,
esa definición está escrita en un archivo llamado archivo docker.
sí es como debería llamarse, crear un archivo Docker simple es muy fácil.
en esta parte vamos a utilizar una aplicación supersencilla sin JAS que he preparado.
vamos a escribir un archivo Docker para eso
plicación para crear una imagen más oscura a partir de ella.
como dije, es muy fácil de hacer.
sí que esta es la aplicación.
s extremadamente simple. Solo tengo uno
rchivo dot Js del servidor, que básicamente solo inicia la aplicación
en el puerto 3000.
olo dice: Bienvenido
uando accedes a él desde el navegador
tenemos un paquete adyacente al archivo que contiene esta dependencia
ara la biblioteca express que usamos aquí para iniciar la aplicación
úper delgado y simple.
esa es la aplicación desde la que vamos a crear un
magen de Docker e iníciela como un contenedor de Docker.
sí que sigamos y hagámoslo.
sí que, en la raíz de la aplicación, vamos a crear un nuevo archivo llamado Docker File.
sí que ese es el nombre. Y ya ves eso,
m, la mayoría de los editores de código realmente detectan
rchivo Docker y obtenemos este icono de Docker aquí.
ntonces, en este archivo Docker,
amos a escribir una definición de cómo
a imagen debe generarse desde esta aplicación.
ntonces, ¿qué necesita nuestra aplicación?
ecesita un nodo instalado porque el nodo debe ejecutar nuestra aplicación.
Verdad?
ntonces, si quisiera iniciar esta aplicación localmente
esde mi terminal, ejecutaría el nodo SRC. Así que la
el punto de servidor Js
omando para iniciar la aplicación.
ntonces necesitamos ese comando de nodo disponible dentro de la imagen.
ahí es donde entra en juego el concepto de imagen base.
ntonces, cada imagen de Docker se basa realmente en esta imagen base,
ue es principalmente una imagen ligera del sistema operativo Linux que tiene
l nodo, N, PM o cualquier herramienta que necesite para su aplicación instalada encima.
ntonces, para la aplicación de JavaScript, tendría
magen base del nodo.
i tiene una aplicación Java, utilizaremos una imagen que tenga instalado el tiempo de ejecución de Java
e nuevo sistema operativo Linux con Java instalado encima.
esa es la imagen base. Y definimos
so de una directiva en el archivo Docker llamado desde.
stamos diciendo que construya esta imagen a partir de la imagen base y si
uelvo a Docker Hub y busco el nodo,
erá que tenemos una imagen que tiene un nodo y N PM instalados en su interior
las imágenes base son como otras imágenes.
ásicamente, puedes apilar y construir sobre las imágenes en Docker.
sí que son como cualquier otra imagen que hayamos visto.
también tienen versiones de texto o imagen.
sí que vamos a elegir la imagen del nodo y una versión específica
optemos por 19 trazos de pino L.
sa es nuestra imagen base y nuestra primera directiva en el archivo docker.
e nuevo, esto solo asegurará que
uando nuestra aplicación node Js se inicia en un contenedor,
endrá un nodo y N comandos PM disponibles en su interior para ejecutar nuestra aplicación.
hora, si iniciamos nuestra aplicación con este comando,
eremos que recibimos un error porque
ecesitamos instalar primero las dependencias de una aplicación.
olo tenemos una dependencia, que es la biblioteca de prensa,
o que significa que tendríamos que ejecutar N PM install,
ue comprobará el archivo json del paquete, leerá todas las dependencias,
efinirlos por dentro e instalarlos
ocalmente en la carpeta de módulos de nodo.
ásicamente, estamos mapeando las mismas cosas que haríamos para ejecutar la aplicación.
nivel local, estamos mapeando eso dentro del contenedor,
or lo que tendríamos que ejecutar el comando N PM install también dentro del contenedor.
Entonces,
omo mencioné antes,
a mayoría de las imágenes oscuras están basadas en Linux.
lpine es Linux, una distribución de sistema operativo Linux de onda ligera.
sí que
n el archivo Docker,
uede escribir cualquier comando de Linux que desee ejecutar dentro del contenedor.
siempre que queramos ejecutar cualquier comando dentro del contenedor,
a sea un comando de Linux o un comando de nodo N PM, lo que sea,
o ejecutamos mediante una directiva de ejecución.
sa es otra directiva, y verá que las directivas están escritas en mayúsculas
luego viene el comando.
sí que no hay instalación de PM,
ue descargará las dependencias dentro del contenedor y
rear una carpeta de módulos de nodo dentro del contenedor
ntes de que se inicie la aplicación.
e nuevo, piense en un contenedor como su propio entorno aislado. Tiene un Linux simple
istema operativo
on el nodo y el NPM instalados,
estamos ejecutando N PM install.
in embargo, también necesitamos el código de la aplicación dentro del contenedor, ¿verdad?
ntonces necesitamos el servidor Js
n el interior,
necesitamos el paquete para Jason porque eso es lo que
l comando N PM necesitará leer realmente las dependencias.
esa es otra directiva de la que tomamos los archivos
uestra computadora local y los pegamos. Cópielos
esa es una directiva llamada Copy
puede copiar archivos individuales como el punto del paquete
son desde aquí
n el contenedor, y podemos decir en qué lugar del contenedor
n el sistema de archivos al que se debe copiar.
digamos
ebe copiarse en una carpeta llamada barra
plicación
entro del contenedor. Así que esto está
verdad? Hemos empaquetado aquí al lado. Esto está dentro del contenedor.
s un completo
istema aislado de nuestro entorno local,
ara que podamos copiar archivos individuales y también podemos copiar los directorios completos.
ntonces, también necesitamos nuestro código de aplicación, obviamente,
ara ejecutar la aplicación y poder copiar esto
irectorio fuente completo, por lo que tenemos varios archivos en su interior.
odemos volver a copiar todo el directorio en el contenedor
n barra
plicación
bicación
la barra al final también es muy importante.
ntonces, el Docker sabe cómo crear esta carpeta si aún no existe en el contenedor,
así que
a raíz del sistema de archivos de Linux agrega una carpeta en su interior y, a continuación, una barra diagonal.
hora todos los archivos de la aplicación relevantes, como el paquete adyacente y el
odo el directorio fuente se copia en el contenedor de esta ubicación.
o siguiente que queremos hacer antes de poder ejecutar
l comando de instalación N PM consiste realmente en cambiar a ese directorio.
Verdad?
ntonces, en Linux,
enemos este CD con derecho a cambiarlo a un directorio
ara ejecutar los siguientes comandos dentro del directorio
n el archivo Docker. Tenemos una directiva para eso llamada work
uerida.
ntonces, directorio de trabajo,
ue equivale a cambiar a un directorio
ara ejecutar todos los siguientes comandos en ese directorio
ara que podamos
aga la aplicación slash aquí.
or lo tanto, establece esta ruta como la ubicación predeterminada
ara lo que venga después. ESTÁ BIEN
sí que estamos copiando todo en el contenedor.
uego estamos configurando el directorio de trabajo
el directorio predeterminado dentro del contenedor.
, a continuación, volvemos a ejecutar N PM install dentro del contenedor para
escargue todas las dependencias que necesita la aplicación que se definen aquí.
finalmente necesitamos ejecutar la aplicación, ¿verdad?
ntonces, después de la instalación de NP, el comando node debería
e ejecute y aprenderemos a ejecutar comandos.
samos la directiva run.
in embargo, si este es el último comando del archivo Docker,
sí que algo que realmente inicia el proceso es la aplicación interna,
enemos una directiva diferente para eso llamada C MD.
ásicamente, ese es el último comando del
rchivo docker y eso inicia la aplicación.
la sintaxis para eso es la
omando
ue es nodo
el parámetro
unto de servidor G Js.
sí que copiamos todo en la aplicación slash.
ntonces tenemos el servidor Js dentro del directorio APP
lo iniciamos o ejecutamos mediante node commit.
so es todo.
se es el archivo Docker completo que creará
na imagen de Docker para nuestra aplicación node Js,
ue luego podemos comenzar como un contenedor.
hora tenemos la definición en el archivo Docker. Es hora de crear realmente la imagen.
e esta definición.
oy a aclarar esto y sin cambiar a la terminal,
e hecho, podemos reutilizar este.
odemos ejecutar un comando docker para crear una imagen más oscura, lo cual es muy fácil.
olo hacemos Docker Build.
uego tenemos un par de opciones que podemos ofrecer.
l primero es el nombre de la imagen.
sí que, al igual que todas esas imágenes tienen nombres, como node ready, etcétera,
las etiquetas
ambién podemos
ombra nuestra imagen y asígnale una etiqueta específica.
lo hacemos usando esta opción de guión en forma de T
podemos llamar a nuestro nodo de aplicación
plicación
uizás con Dash no importe
odemos darle una etiqueta específica
omo 1.0, por ejemplo.
l último parámetro es la ubicación del archivo Docker.
ntonces le estamos diciendo a Docker que cree una imagen
on este nombre con esta etiqueta
esde
a definición en este archivo Docker específico, ¿verdad?
ntonces, esta es una ubicación del archivo Docker en este caso,
stamos en el directorio donde se encuentra el archivo Docker,
or lo que será el directorio actual.
ntonces, este punto básicamente se refiere a la carpeta actual.
onde se encuentra el archivo Docker.
hora, si ejecutamos esto
omo puede ver, hacedor
n realidad está construyendo
a imagen de nuestro archivo Talker
parece que tuvo éxito cuando comenzó a crear la imagen.
es esos pasos, esas directivas que definimos aquí.
sí que tenemos la primera de la directiva que se ejecutó. Luego tenemos
omo segundo paso. Luego hemos copiado la carpeta fuente, configurando el
ejecutando N PM install y, luego, el último acaba de iniciar la aplicación.
sí que ahora
i hago imágenes de Docker
demás de esos
mágenes que descargamos
nteriormente de Docker Hub,
eberíamos ver realmente la imagen que acabamos de crear.
sta es la imagen de la aplicación de nodo con etiqueta
.0
alguna otra información.
sí que esa es nuestra imagen.
ahora podemos iniciar esta imagen y trabajar con ella,
l igual que trabajamos con cualquier otra imagen descargada de Docker Hub.
sí que vamos a seguir adelante y ejecutar un contenedor desde este nodo
magen de la aplicación y asegúrese de que la aplicación interna realmente funciona.
sí que
amos a hacer Docker Run
odo
plicación
magen con 1.0 10
vamos a pasar el parámetro para comenzar de forma separada
n modo y también queremos exponer el puerto correctamente.
ueremos
oder acceder a la aplicación, la aplicación de nodo desde el host local
abemos que la aplicación dentro del contenedor se iniciará
n el puerto 3000 porque eso es lo que hemos definido aquí.
or lo tanto, la aplicación en sí se ejecutará en el puerto 3000.
sí que eso está dentro del contenedor, y podemos vincularlo al puerto que queramos en el host local
demos hacer 3000, igual que en el contenedor.
sí que este es el puerto de host y este es el puerto de contenedor.
ahora si ejecuto
s un comando
haz docker PS,
eberíamos ver nuestra aplicación de nodo ejecutándose en el puerto 3000
ora el momento de la verdad
olver al navegador
apertura del host local 3000
hí está nuestra bienvenida a mi increíble aplicación
ensaje de nuestra aplicación.
incluso podemos comprobar los registros
omando la identificación de nuestro no
plicación
haciendo bloques de Docker con el ID.
se es el resultado de nuestra aplicación
entro del contenedor.
sí que
sí de fácil es aceptar su solicitud,
mpaquételo en una imagen de Docker usando el archivo Docker y luego ejecútelo como un contenedor
finalmente volviendo a esta interfaz gráfica de usuario
liente que realmente nos proporciona el escritorio Docker.
hora también podemos ver todos nuestros contenedores e imágenes aquí.
así es como se ve esta U I, te da una muy buena
escripción general
e los contenedores que tiene.
uáles se están ejecutando actualmente, cuáles están parados con sus nombres, etc.
incluso tienes algunos controles aquí para iniciar un
detuvo un contenedor como este o incluso lo volvió a detener?
einiciar el contenedor, eliminar lo que sea.
de la misma manera que tienes una lista de imágenes,
ncluida nuestra propia imagen,
también puedes crear contenedores directamente desde aquí usando algunos controles.
sí que
ersonalmente prefiero la interfaz de línea de comandos para interactuar con Docker.
ero algunos se sienten más cómodos usando
a U. visual
sí que, como prefieras, puedes elegir trabajar con cualquiera de las dos.
hora hemos aprendido muchos de los componentes básicos de Docker.
in embargo,
ambién es interesante ver cómo Docker encaja realmente en la totalidad
roceso de desarrollo e implementación de software con
ambién muchas otras tecnologías.
ntonces, qué pasos de todo este proceso son más relevantes.
ntonces, en esta parte final del curso intensivo,
amos a ver más oscuro en una visión general del ciclo de vida del desarrollo de software.
onsideremos un escenario simplificado en el que estás desarrollando un JAVASCRIPT
plicación en su computadora portátil directamente en su entorno de desarrollo local.
u aplicación de JavaScript usa un Mongo
ase de datos, y en lugar de instalarla en su computadora portátil,
escargas un contenedor de Docker desde el centro de Docker.
sí que conectas tu aplicación de JavaScript con el mongo
B y empiezas a desarrollar.
hora digamos que desarrolla el
plicación primera versión de la aplicación localmente,
ahora quieres probarlo o quieres implementarlo en, eh,
ntorno de desarrollo donde
n probador de tu equipo lo probará.
sí que confirmas tu aplicación de JavaScript en git
en algún otro sistema de control de versiones.
h, eso activará una integración continua.
na compilación de Jenkins, o lo que sea que hayas configurado
Jenkins build producirá artefactos a partir de su aplicación.
rimero, crearás tu aplicación de JavaScript
luego
rea una imagen de Docker a partir de ese artefacto de JavaScript. ¿Verdad?
ntonces, ¿qué pasa con esta imagen de Docker? Una vez que Jenkins build la cree,
e empuja
un repositorio de Docker privado.
ormalmente en una empresa tendrías un repositorio privado porque
o quieres que otras personas tengan acceso a tus imágenes.
sí que lo empujas allí.
ahora,
a que el siguiente paso podría configurarse en Jenkins o en otros scripts o herramientas, que
magen de Docker
ebe implementarse en un servidor de desarrollo.
sí que tienes un servidor de desarrollo que extrae la imagen del repositorio privado,
a imagen de su aplicación de JavaScript y, a continuación, extrae el
ase de datos de la que depende su aplicación de JavaScript desde un Docker Hub.
ahora tienes dos contenedores,
no de tus contenedores personalizados y un Mogo disponible públicamente
ontenedor de base de datos que se ejecuta en el servidor de desarrollo y se comunican entre sí.
ienes que configurarlo.
or supuesto, hablan y se comunican entre sí y funcionan como una aplicación.
hora, si un probador, por ejemplo, u otro desarrollador inicia sesión
n un servidor de desarrollo, podrán probar la aplicación.
sí que este es un flujo de trabajo simplificado, cómo Docker
uncionará en un proceso de desarrollo de la vida real.
ntonces, en poco tiempo, aprendemos todos los componentes básicos,
as partes más importantes de Docker.
sí que entiendes qué son las imágenes, cómo iniciar los contenedores,
ómo funcionan y cómo acceder a ellos,
sí como cómo crear tu propia imagen de Docker y ejecutarla como un contenedor.
ero si quieres aprender más sobre Docker y practicar tus habilidades aún más
omo cómo conectar tu aplicación a un contenedor Docker,
prenda sobre lo más oscuro, componga volúmenes más oscuros, etcétera.
e hecho, puedes ver a mi actor completo
tutorial. Y si quieres aprender, hazlo
n el contexto de los desarrolladores
realmente dominarlo con cosas como registros privados que usan doer
ara ejecutar Jenkins,
ntegrar Docker en las canalizaciones de CS CD y
salo con otras tecnologías como terraform
abilitar, etcétera.
uedes echar un vistazo a nuestro campamento de entrenamiento completo de devops
onde aprendes todo esto y mucho más.