search
top

Entendiendo Docker. Conceptos básicos: Imágenes, Contenedores, Links…

Al igual que el post anterior, éste está pensado para principiantes, para adentrarse en el mundo de Docker sin tener experiencia previa en este tema. El objetivo es tomar una base, entender ciertos conceptos, para luego ya aprender a usar los comandos de Docker y llevarlos a la práctica.

 ——-

La semana pasada vimos en líneas generales qué es Docker, qué significa el concepto de contenedor y para qué se utiliza Docker, junto con los beneficios que aporta (¿Qué es Docker? ¿Para qué se utiliza? Explicado de forma sencilla)

Hoy profundizaremos un poco más en el tema, y veremos cuáles son los elementos básicos de Docker, ya que cada uno de esos elementos aporta una serie de beneficios con respecto al uso de otras herramientas.

Los dos elementos más básicos de Docker son las imágenes y los contenedores.

Images

Una imagen es una especie de plantilla, una captura del estado de un contenedor. Ya comenté que un contenedor no es una máquina virtual, pero para que te hagas una idea, podríamos decir que una imagen de un contenedor es como un snapshot de una máquina virtual, pero mucho mucho más ligero.

Por ejemplo una imagen podría contener un sistema operativo Ubuntu con un servidor Apache y tu aplicación web instalada.

Las imágenes se utilizan para crear contenedores, y nunca cambian.

Hay muchas imágenes públicas con elementos básicos como Java, Ubuntu, Apache…etc, que se pueden descargar y utilizar. Normalmente cuando creas imágenes, partimos de una imagen padre a la que le vamos añadiendo cosas (p.e: una imagen padre con Ubuntu y Apache, que hemos modificado para instalar nuestra aplicación).

Un registro (local o remoto) en Docker contiene imágenes. Aquí tienes el registro público de Docker de donde puedes obtener la mayoría de las imágenes base que puedes necesitar.

Las imágenes se identifican por un ID, y un par nombre-versión, por ejemplo: ubuntu:latest, django:1.6, etc.

DockerFile

Es un archivo de configuración que se utiliza para crear imágenes. En dicho archivo indicamos qué es lo que queremos que tenga la imagen, y los distintos comandos para instalar las herramientas. Esto sería un ejemplo de DockerFile para tener una imagen de Ubuntu con Git instalado:

DockerFile_git

Sacado de https://github.com/harbur/docker-workshop/

Y aquí podemos ver un ejemplo de lo que te decía antes, de que normalmente creamos imágenes modificando otras imágenes padre. En este DockerFile, le estamos indicando a Docker que tome la imagen ubuntu:14.04 y sobre ella crearemos la nuestra, instalando git por consola.

Ejecutando el comando docker build sobre ese DockerFile, se nos creará la imagen correspondiente, lista para crear un contenedor.

Containers

Son instancias en ejecución de una imagen. Son los que ejecutan cosas, los que ejecutarán nuestra aplicación. El concepto de contenedor es como si restauráramos una máquina virtual a partir de un snapshot.

A partir de una única imagen, podemos ejecutar varios contenedores.

Docker_container_vs_images

Como podrás deducir a partir de la imagen anterior, esto es una buena manera de tener copias de tu aplicación ejecutándose en varios contenedores, para luego, a través de balanceadores de carga, distribuir los accesos a tu aplicación, y ofrecer servicios con más garantías y con menos carga de peticiones en cada contenedor.

Como las imágenes no cambian, si creas un contenedor a partir de una imagen, y mientras que se está ejecutando el contenedor cambias algo o instalas alguna herramienta, al parar dicho contenedor y después volver a ejecutar otra vez la misma imagen, esos cambios no se verán reflejados.

Docker va trackeando los cambios en los contenedores como si fuera una herramienta de control de versiones, por lo que si realmente deseas esos cambios, haciendo un commit del contenedor puedes crear otra imagen que contenga dichos cambios.

Por lo tanto otro beneficio de Docker, es el versionado de los contenedores. Si algo va mal en nuestra aplicación, podremos volver de forma sencilla a una versión anterior del contenedor, a una versión anterior del entorno.

Volumes

No es una buena práctica guardar los datos persistentes dentro de un contenedor de Docker. Para eso están los volúmenes, fuera de los contenedores. Así podremos crear y borrar contenedores sin preocuparnos por que se borren los datos.

Además los volúmenes se utilizan para compartir datos entre contenedores.

Links

Sirven para enlazar contenedores entre sí, que están dentro de una misma máquina, sin exponer a los contenedores cuáles son los datos de la máquina que los contiene.

Para saber más de Docker…

Esta serie de dos post ha sido una pequeña introducción al mundo de Docker, y a los usos que se le puede dar a la herramienta. Es sorprendente como cada día sale gente que ha encontrado distintos usos para Docker, combinándolo con otras herramientas.

A mi me parece una muy buena herramienta a tener en cuenta a la hora de montar entornos, facilitar despliegues y rollbacks y crear procesos de integración continua, a todos los niveles: para desarrolladores, testers y sistemas.

Si quieres seguir aprendiendo más sobre esta herramienta, te recomendaría que pasases a leer la documentación oficial, y entraras ya a aprender los distintos comandos de Docker, creación de imágenes, ejecución de contenedores, etc.

Así que te dejo unos links útiles para empezar:

Arquitectura de Docker (documentación oficial):

https://docs.docker.com/introduction/understanding-docker/

DockerFiles:

https://docs.docker.com/reference/builder/

En general, toda la documentación oficial de Docker:

https://docs.docker.com

Tutoriales online:

https://hub-beta-stage.docker.com/enterprise/trial/

https://docs.docker.com/articles/basics/

http://www.alexecollins.com/first-steps-with-docker/

https://coreos.com/os/docs/latest/getting-started-with-docker.html

http://blog.flux7.com/blogs/docker/docker-tutorial-series-part-1-an-introduction

Utilizar Docker en producción necesita otra serie de consideraciones, desde cómo gestionar los balanceadores de carga, la alta disponibilidad, el sistema operativo de las máquinas de producción que contendrá los contenedores, etc., pero puede hacerse. En el meetup de Docker Barcelona de hace unas semanas, explicaron casos de éxito con Docker en producción.

Ana M. del Carmen García Oterino

Ana M. del Carmen García Oterino

Ingeniera Software QA at BQ
https://www.linkedin.com/in/amgarciao

Apasionada por la calidad del software (procesos, producto y equipos) y buenas prácticas en general.

Especializada en testing, automatización de pruebas e integración continua.
Ana M. del Carmen García Oterino

10 Respuestas to “Entendiendo Docker. Conceptos básicos: Imágenes, Contenedores, Links…”

  1. Raúl Ávila dice:

    Muy buena introducción a Docker. Yo también me estoy adentrando en esta tecnología, y recientemente escribí sobre ello en mi blog, con un enfoque bastante práctico (un Hello World vaya). Por si puede servir como complemento a vuestros posts, aquí está el link: http://raulavila.com/2015/07/revolucion-docker/

  2. Salva dice:

    Hola Ana, lo primero gracias por realizar post tan sencillos y fáciles de entender.
    Básicamente quería preguntarte si más adelante mencionarás las diferencias existentes entre Docker y otros tipos de tecnologías similares como Vagrant o Puppet. Se que mencionaste la semana pasada que lo harías en el presente post pero al no ver las comparaciones no se si lo has querido separar para próximos post o simplemente no has visto útil mencionarlas.
    Un saludo.

    • Ana M. del Carmen García Oterino dice:

      Hola!

      Muchas gracias Salva. Al final lo respondí en un comentario el otro día, pero no te preocupes, tienes razón, mencioné que iba a comentarlo en próximos posts.

      El post de la semana que viene (este viernes no, la siguiente) tratará de eso :)

      Gracias!

  3. Salva dice:

    Hola Ana, lo primero felicitarte por los dos post que has hecho de Docker tan amenos y explicativos.
    La semana pasada leí que ibas a escribir algo sobre la comparación de DOcker con otros tipos de plataformas como Vagrant, ¿Sigues teniendo esa idea? Creo que sería muy interesante comentar las diferencias y similitudes entre herramientas que a priori a un no experto, como yo, podemos ver tan parecidas.
    Muchas gracias.
    Un saludo.

  4. Joaquín M. Varas G. dice:

    Muy buen resumen, lo encontré muy didáctico y práctico

  5. Miguel dice:

    Gran artículo muy aclarador!

    Saludos!

  6. Niels dice:

    Gracias por la explicación for Dummies

  7. Frank Luis dice:

    Excelente todos tus post, muy bien explicado y práctico para los que nos estamos adentrando en este mundo de docker. Saludos y un excelente día

  8. Santiago dice:

    Solo quería felicitarte por la facilidad en la explicación del tema. Muchísimas gracias.

  9. Hernan dice:

    Gracias por compartir esos conocimientos tan valiosos

Dejar una respuesta

Tu dirección de correo electrónico no será publicada.

top