Introduction

  • Usa los procesos y las capacidades de sistema de archivos de Linux Kernel que garantiza el tan demandado aislamiento

  • Usa una imagen de OS reducida que no incluye un Os completo

  • Consume poca memoria

  • Los tiempos de inicio son significativamente menores que en una típica VM

  • Velocidad de codificación y despliegue de aplicaciones

  • Facilmente empaquetado para los despliegues

  • Ampliamente compartido

  • Notable ahorro de recursos en TI

Que es una imagen para Docker?

Son plantillas de solo lectura que son utilizadas para crear contenedores, en otras palabras es el entorno donde publicamos el código de una aplicación para que esta pueda funcionar.

Las imagenes se crean con el comando:

docker build

este comando toma un archivo llamado docker file limpio para poder crear la imagen, las imágenes también pueden ser creadas con el comando:

docker commit

mientras se esta trabajando con un contenedor de modo interactivo

las imágenes se componen de otras imágenes, por lo tanto dan como resultado una sola imagen con todas las herramientas necesarias para correr una aplicación, por ejemplo puedo partir de una imagen de ubuntu y le puedo combinar con Php y asi sucesivamente hasta completar las dependencias de la aplicación.

Las imágenes se almacenan en un Registry de docker.

Analogía con oop (clases)

Si una imagen es como una clase, un contenedor es como una instancia de una clase, un objeto en ejecución.

Los contenedores son una encapsulación ligera y portable de un entorno en donde se ejecutan las aplicaciones

Los contenedores son creados a partir de las imágenes. dentro de un contenedor se tienen todas los archivos binarios y dependencias necesarias para las aplicaciones.

Que es un Registry ?

Es el lugar donde almacenamos las imágenes de docker, podemos crear nuestro Registry privado o hacer uso de Registry público llamado Docker Hub

Comandos comunes

Consultar version de docker instalada en la maquina

docker version

para ver las imágenes que están instaladas en mi maquina

docker images

para detener un contenedor

docker stop <name-container>

para listar los contenedores con estado "Up" o que estas en ejecución

docker ps

con el flag de -a listo todos los contenedores creados

docker ps -a

para ver toda la información de bajo nivel del contenedor

docker inspect <name-container>

Una vez este corriendo el contenedor podemos ver los logs de lo que pasa en el contenedor

docker logs <name-container>

-f con este flag para que el terminal este a la espera de eventos para mostrar, asi:

docker logs -f <name-container>

para ver las capas de una imagen de docker

docker history alpine:3.7

para ejecutar tareas dentro de un contenedor en ejecución se utiliza exec (a continuación para ejecutar bash)

docker exec -i -t <name-container> bash

para listar solo los id de los contenedores en la maquina (incluyen los que no tienen estado "Up")

docker ps -aq

para detener todos los contenedores corriendo actualmente en la maquina

docker stop $(docker ps -aq)

para remover todos los contenedores de la maquina

docker rm $(docker ps -aq)

para remover todas las imagenes

docker rmi $(docker images -q)

Comandos para iniciar una sesión interactiva desde una imagen

Para crear un contenedor partiendo desde una imagen linux de docker. Alpine es una distribución linux muy liviana (5MB), de esta manera se inicia el contenedor que imprime en el terminal:

docker run alpine:3.7 echo "hola desde mi primer contenedor"

Si se quiere iniciar desde la imagen de alpine y visualizar el sistema de archivos (tener en cuenta los espacios):

docker run alpine:3.7 ls /

Ahora iniciando una sesión interactiva (para manipular el contenedor) para tener una terminal virtual de el contenedor iniciado:

para ello usamos -i -t -i significa input que quiere decir que el contenedor recibe los comandos enviados desde el teclado

-t terminal nativa del contenedor

docker run -i -t alpine:3.7 sh

A partir de acá podemos enviar comandos comunes en la terminal: ls , cd, etc e ir explorando el contenedor

Comandos para correr un contenedor con volumen compartido

Volumen compartido quiere decir que enviaremos directamente los archivos que queremos que esten en el sistema de archivos del contenedor.

Para crear instancias de contenedores se usa docker run, pero esto se complementa con algunos flags adicionales:

--rm para eliminar el contenedor una vez se deje de usar (se detenga)

--name para adicionar el nombre del contenedor, si no se asigna docker engine pone un random-name

-d significa detach o desacoplado y quiere decir que el contenedor se ejecuta en background

-p publish para asignar el mapeo del puerto del host con el puerto del contenedor ej: 8080:80 (se redirige el trafico del host 8080 al puerto 80 de contenedor)

-v un volumen. Para enviar contenido al contenedor, por ejemplo enviar los archivos en desarrollo (ej: index.html). Se separa con : el contenido origen con el contenido destino: /some/content: usr/nginx/html

a continuación un ejemplo para crear un contenedor con la imagen nginx que sirve para un sitio web normal:

docker run --rm --name nginx -d -p 80:80 -v $(pwd):/usr/share/nginx/html nginx

$(pwd) indica que el volumen de origen es el directorio de donde se está ejecutando el comando, se utiliza como short-cut y evitar escribir un "path"

Capas en docker

Las imágenes de docker son inmutables, toda la información, archivos, edición y software adicionado se hace en una nueva capa de la imagen inicial, esta capa se llama capa de contenido editable.

Cuando un contenedor es eliminado, su capa de contenido editable también es eliminada, pero la imagen de origen permanece intacta.

Varios contenedores pueden compartir la misma imagen origen y aun así su capa editable (datos e información) puede diferir sin ningún problema. A continuación varios contenedores que se originan desde la misma imagen de ubuntu:

Last updated

Was this helpful?