Autoría de la imagen: dotCloud, Inc.
En este artículo:
Los contenedores Docker se ejecutan como un proceso, y consumen poca memoria. Están optimizados. El contenedor comparte el Kernel de la máquina host con otros contenedores.
Una máquina virtual, sin embargo, consume más recursos. Una máquina virtual ejecuta un sistema operativo invitado completo con acceso virtual a los recursos del host. Normalmente con las máquinas virtuales ofrecen más recursos de los que una aplicación necesita.
Por tanto en este sentido, los contenedores Docker están más optimizados porque son independientes y pueden limitarse los recursos asignados.
Un contenedor se inicia ejecutando una imagen. El archivo Dockerfile define una imagen, y por tanto cómo será el contenedor que se creará a partir de esa imagen. Por tanto, un contenedor es una instancia de una imagen.
–> Documentación oficial sobre imagenes en Docker.
Y ese Dockerfile (que es un documento de texto) contiene todos los comandos que normalmente se ejecutan manualmente para construir una imagen para Docker. Docker puede leer las instrucciones de el archivo Dockerfile y construir una imagen para Docker automáticamente.
Para crear una imagen de Docker, necesitaremos crear un archivo Dockerfile.
Como ejemplo de Dockerfile mostramos este de Træfik:
FROM hypriot/rpi-alpine:3.6
ADD https://github.com/containous/traefik/releases/download/v1.3.8/traefik_linux-arm /traefik
RUN apk upgrade --no-cache &&\
apk add --no-cache ca-certificates &&\
chmod +x /traefik
EXPOSE 80 8080 443
ENTRYPOINT ["/traefik"]
Podemos crear una imagen Docker desde un archivo Dockerfile con el comando:
docker build -t nombre_imagen .
en nuestro caso
docker build -t hey .
docker build -f /path/to/a/Dockerfile .
Docker ejecutará las ordenes contenidas en el archivo Dockerfile y construirá la imagen. A continuación podemos ver la imagen Docker que hemos creado:
e iniciamos el contenedor basado en esa imagen:
docker run -dit mi_imagen nombre_contenedor
Y comprobamos que el contenedor se está ejecutando
Respecto a las imagenes: Si el sistema no encuentra una imagen, intentará conectarse a Docker Hub para descargarla si existe.
En este caso vamos a descargar una imagen ya compilada para poder crear un contenedor en una máquina con Docker.
Recordemos que los contenedores que ejecutemos en Raspberry Pi han de provenir de imagenes compiladas para Raspberry (arquitectura ARM),
podemos utilizar el repositorio de Hypriot en Docker Hub: https://hub.docker.com/u/hypriot/
, y otros repositorios para ARM.
Y elegimos el servidor web de Hypriot
Nos vamos a la terminal y lo descargamos (vemos que en el enlace de Hypriot, nos indica el comando necesario para descargar la imagen):
docker pull hypriot/rpi-busybox-httpd
Y ahora podremos ver la imagen disponible en Portainer (la interfaz gráfica que podemos instalar para gestionar un clúster, o Swarm de Docker):
Y estas imagenes también podemos verlas por terminal, con
docker image ls
sudo docker run -d -p puerto_real:puerto_container imagen
o sea:
docker run -d -p 80:80 fbd9685c5f
o
docker run -d -p 80:80 hypriot/rpi-busybox-httpd
Y accediendo a la IP de la máquina veremos que el contenedor que realiza la función de Servidor Web, se está ejecutando:
Podemos comprobar que el sistema muestra los contenedores en funcionamiento con:
docker container ls
Y en Portainer podremos verlos también:
Se puede ver la lista de contenedores Docker en ejecución con el comando:
docker container ps
Para ver el estado de los contenedores:
docker container stats
El comando nos mostrará las columnas:
Otros comandos de Docker Container:
Vamos a crear un contenedor Docker en Portainer.
Es importante que prestemos atención a estos parámetros:
Desde esta última opción (Runtime & Resources) podremos elegir los recursos que consumirá este contenedor:
Ahora comprobaremos que el nuevo contenedor ha sido creado y se está ejecutando en el puerto 84 tal y como hemos configurado:
Hemos visto qué son los contenedores Docker, cómo funcionan y cómo se construyen.
También hemos hablado de los archivos Dockerfile, cómo usarlos para crear imagenes Docker, y su uso en los contenedores Docker.
Y por último hemos hecho un pequeño repaso de los comandos que podemos usar con docker image (gestionar imagenes Docker) y docker container (gestionar Contenedores Docker).
Ahora es momento de comenzar a practicar lo explicado.
Para más info puedes revisar también los artículos: