(+34) 673 566 782 - (+34) 960 653 052 formacion@imaginagroup.com

Aprende Docker – Tutorial de Primeros Pasos

Docker es una plataforma abierta para desarrollar, enviar y ejecutar aplicaciones. Docker permite separar las aplicaciones de su infraestructura para que se pueda enviar software rápidamente. Con Docker, se puede administrar la infraestructura de la misma forma que se administran las aplicaciones. Al aprovechar las metodologías de Docker para enviar, testear y desplegar códigos rápidamente, se puede reducir significativamente la demora entre escribir código y ejecutarlo en producción.

La plataforma Docker

Docker proporciona la capacidad de empaquetar y ejecutar una aplicación en un entorno poco aislado llamado contenedor. El aislamiento y la seguridad permiten ejecutar muchos contenedores simultáneamente en un host determinado. Los contenedores son ligeros porque no necesitan la carga adicional de un hipervisor, sino que se ejecutan directamente dentro del kernel de la máquina host. Esto significa que se puede ejecutar más contenedores en una combinación de hardware determinada que si se estuviera usando máquinas virtuales. Incluso se pueden ejecutar contenedores Docker en máquinas host que en realidad son máquinas virtuales.

Docker Engine

Docker Engine es una aplicación cliente-servidor con estos componentes principales:

  • Un servidor que es un tipo de programa de larga ejecución denominado proceso daemon (el comando dockerd).
  • Una API REST que especifica las interfaces que los programas pueden usar para comunicarse con el daemon e indicarle qué hacer.
  • Un cliente de interfaz de línea de comandos (CLI) (el comando docker).

El CLI utiliza la Doker REST API para controlar o interactuar con el Docker daemon a través de scripts o comandos directos del CLI. Muchas otras aplicaciones de Docker usan la API y el CLI subyacentes. El daemon crea y gestiona objetos Docker, como imágenes, contenedores, redes y volúmenes.

Características: para que se puede utilizar Docker

Entrega rápida y consistente de las aplicaciones

Docker optimiza el ciclo de vida del desarrollo al permitir que los desarrolladores trabajen en entornos estandarizados utilizando contenedores locales que proporcionan sus aplicaciones y servicios. Los contenedores son excelentes para flujos de trabajo de integración continua y entrega continua (CI / CD).

Consideramos el siguiente escenario de ejemplo:

  • Nuestros desarrolladores escriben código localmente y comparten su trabajo con sus compañeros utilizando contenedores Docker.
  • Usan Docker para llevar sus aplicaciones a un entorno de testing y ejecutar test automáticos y manuales.
  • Cuando los desarrolladores encuentran errores, pueden solucionarlos en el entorno de desarrollo y volver a implementarlos en el entorno de testing para probarlos y validarlos.
  • Cuando se completa el test, obtener la solución para el cliente es tan simple como enviar la imagen actualizada al entorno de producción.

Despliegue responsive y escalado

La plataforma basada en contenedores de Docker permite cargas de trabajo altamente portátiles.

Los contenedores Docker se pueden ejecutar en la computadora portátil local de un desarrollador, en máquinas físicas o virtuales en un centro de datos, en proveedores de la nube o en una combinación de entornos.

La portabilidad de Docker y su naturaleza ligera también facilitan la administración dinámica de cargas de trabajo, ampliando o eliminando aplicaciones y servicios según las necesidades del negocio, casi en tiempo real.

Arquitectura de Docker

Docker usa una arquitectura cliente-servidor. El cliente Docker habla con el daemon Docker, que hace el trabajo pesado de construir, ejecutar y distribuir sus contenedores Docker. El cliente Docker y el daemon pueden ejecutarse en el mismo sistema, o se puede conectar un cliente Docker a un daemon Docker remoto. El cliente Docker y el daemon se comunican utilizando una API REST, sobre sockets UNIX o una interfaz de red.

El Docker Daemon

El Docker daemon (dockerd) escucha las solicitudes de la API de Docker y gestiona los objetos de Docker, como imágenes, contenedores, redes y volúmenes. Un daemon también puede comunicarse con otros daemons para administrar los servicios de Docker.

El cliente de Docker

El cliente Docker (docker) es la forma principal en que muchos usuarios de Docker interactúan con Docker. Cuando se utilizan comandos como docker run, el cliente envía estos comandos a dockerd, que los lleva a cabo. El comando docker usa la API Docker. El cliente de Docker puede comunicarse con más de un daemon.

Registros de Docker

Un registro de Docker almacena imágenes de Docker. Docker Hub y Docker Cloud son registros públicos que cualquiera puede usar, y Docker está configurado para buscar imágenes en Docker Hub de manera predeterminada. Incluso podemos ejecutar nuestro propio registro privado.

Cuando se utilizan los comandos docker pull o docker run, las imágenes necesarias se extraen del registro configurado. Cuando se utiliza el comando docker push, la imagen se envía a el registro configurado.

La tienda Docker permite comprar y vender imágenes de Docker o distribuirlas gratis. Por ejemplo, se puede comprar una imagen Docker que contenga una aplicación o servicio de un proveedor de software y usar la imagen para implementar la aplicación en nuestros entornos de prueba, preparación y producción. Podemos actualizar la aplicación tirando de la nueva versión de la imagen y volviendo a desplegar los contenedores.

Objetos Docker

Imágenes

​Una imagen es una plantilla de solo lectura con instrucciones para crear un contenedor Docker. A menudo, una imagen se basa en otra imagen, con alguna personalización adicional. Por ejemplo, se puede compilar una imagen basada en la imagen ubuntu, pero instala el servidor web Apache y nuestra aplicación, así como los detalles de configuración necesarios para ejecutar nuestra aplicación.

Contenedores

Un contenedor es una instancia ejecutable de una imagen. Se puede crear, iniciar, detener, mover o eliminar un contenedor utilizando la API Docker o el CLI. Se puede conectar un contenedor a una o más redes, adjuntarle almacenamiento o incluso crear una nueva imagen en función de su estado actual.

Por defecto, un contenedor está relativamente bien aislado de otros contenedores y su máquina host. Se puede controlar qué tan aislados están la red, el almacenamiento u otros subsistemas subyacentes de otros contenedores o de la máquina host.

Un contenedor se define por su imagen y por las opciones de configuración que se le proporciona cuando se crea o inicia. Cuando se elimina un contenedor, desaparecen los cambios a su estado que no se almacenan en el almacenamiento persistente.

Ejemplo comando docker run (en posteriores temas practicaremos con esto)

El siguiente comando ejecuta un contenedor ubuntu, se conecta interactivamente a nuestra sesión de línea de comandos local y ejecuta / bin / bash.

$ docker run -i -t ubuntu /bin/bash

Cuando se ejecuta este comando, sucede lo siguiente (suponiendo que se esté utilizando la configuración de registro predeterminada):

  • Si no se tiene la imagen ubuntu localmente, Docker la extrae de nuestro registro configurado, como si se hubiera ejecutado docker pull ubuntu manualmente.
  • Docker crea un contenedor nuevo, como si se hubiera ejecutado un docker container create manualmente.
  • Docker asigna un sistema de archivos de lectura y escritura al contenedor, como capa final. Esto permite que un contenedor en ejecución cree o modifique archivos y directorios en nuestro sistema de archivos local.
  • Docker crea una interfaz de red para conectar el contenedor a la red predeterminada, ya que se no especificó ninguna opción de red. Esto incluye asignar una dirección IP al contenedor. De forma predeterminada, los contenedores se pueden conectar a redes externas utilizando la conexión de red de la máquina host.
  • Docker inicia el contenedor y ejecuta / bin / bash. Debido a que el contenedor se está ejecutando de forma interactiva y conectado a nuestra terminal (debido a las opciones -i y -t), se puede proporcionar información usando nuestro teclado mientras la salida está registrada en nuestra terminal.
  • Cuando escribe exit para finalizar el comando / bin / bash, el contenedor se detiene pero no se elimina. Puede volver a iniciarlo o eliminarlo.

Servicios

​Los servicios permiten escalar contenedores a través de múltiples daemons Docker, que funcionan en conjunto como un swarm con múltiples managers y workers. Cada miembro de un swarm es un  Docker daemon, y todos los daemons se comunican usando la API Docker. Un servicio permite definir el estado deseado, como el número de réplicas del servicio que debe estar disponible en un momento dado. De forma predeterminada, el servicio tiene equilibrio de carga en todos los nodos de trabajadores. Es posible que algunos terminos no se comprendan por ahora pero se verán en posteriores temas.

Instalación

​Para cualquier instalación de Docker lo primero es registrarse:

https://store.docker.com/signup?next=%2F%3Fref%3Dlogin

Windows

​Para instalar Docker en Windows hay que dirigirse a la siguiente página:

https://store.docker.com/editions/community/docker-ce-desktop-windows  

Siga el asistente de instalación para aceptar la licencia, autorizar el instalador y continuar con la instalación. Reiniciaremos el sistema si nos lo pide.

Es posible que Docker no se ejecute automáticamente después de su instalación.

Para iniciarlo, buscamos Docker, seleccionamos Docker for Windows en los resultados de búsqueda.

Cuando la ballena en la barra de estado se mantenga estable, Docker estará funcionando y se podrá acceder desde cualquier ventana de terminal.

Si la ballena está oculta en el área de Notificaciones, haríamos clic en la flecha hacia arriba en la barra de tareas para mostrarla.

Si acabamos de instalar la aplicación, también recibiremos un mensaje emergente con los próximos pasos sugeridos.

Con esto ya tendríamos instalado Docker en Windows.

Mac

​Para instalar Docker en Mac hay que dirigirse a la siguiente página:

https://store.docker.com/editions/community/docker-ce-desktop-mac

Hacemos doble clic en Docker.dmg para abrir el instalador, luego arrastramos ballena a la carpeta Aplicaciones.

Hacemos doble clic en Docker.app en la carpeta de aplicaciones para iniciar Docker. (En el siguiente ejemplo, la carpeta de aplicaciones está en el modo de vista de “cuadrícula”).

Es posible que se nos solicite que autoricemos Docker.app con la contraseña de nuestro sistema después de iniciarlo.

La ballena en la barra de estado superior indica que Docker se está ejecutando y se puede acceder desde una terminal.

Al igual que en Windows si acabamos de instalar la aplicación, también recibiremos un mensaje de éxito con los próximos pasos sugeridos y un enlace a esta documentación.

Con esto ya hemos finalizado la instalación en Mac.

Comprobar versión de Docker

Podemos comprobar la versión de Docker ejecutando el comando docker –version y de esta manera nos aseguraremos de tener una versión compatible de Docker

Incluso ejecutando docker info o docker version podemos ver aún más detalles sobre la instalación de nuestro docker

docker --version

Docker version 18.06.0-ce, build 0ffa825

docker info

Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.12.0-ce
Storage Driver: overlay2

Comprobar instalación de Docker

Podemos probar que nuestra instalación funciona ejecutando la imagen de  Docker simple de prueba, hello-world:

docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest:
sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7

Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Listamos la imagen de hello-world que nos descargamos en nuestra máquina:

Listamos el contenedor de hello-world (generado por la imagen) que sale después de mostrar su mensaje. Si todavía estuviera ejecutándose, no se necesitaría la opción –all:

En el siguiente tema profundizaremos en los contenedores.

docker image ls

docker container ls --all
CONTAINER ID     IMAGE           COMMAND      CREATED            STATUS
54f4984ed6a8     hello-world     "/hello"     20 seconds ago     Exited (0) 19 seconds ago

Soy un bloque de texto. Haz clic en el botón Editar para cambiar este texto. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Uso de cookies: Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies