Usuario:ManuelRomero/ProgramacionWeb/INAEM2017/Docker

De WikiEducator
Saltar a: navegación, buscar


Icon objectives.jpg
Objetivo
Ver qué es docker desde el punto de vista de ser usado para dockerizar un desarrollo web
  • Docker, contenedor, dockstation
Conceptos e instalaciones
  • Comandos de docker client
  • Crear contenedores a partir de imágenes
  • Crear imágenes a partir de contenedores
  • Copiar contenedores y llevarlos a otra máquina
  • Gestionar contenedores
Crear una aplicación dockerizada basada en gettext para multiidoma
  • Un ejemplo de una aplicación dockerizada



Icon inter.gif
Recursos de la Web
{{{1}}}



Qué es docker

  • Docker es una empresa que ofrece una tecnología de virtualización basada en contenedores.
  • Surge en 2013 y actualmente la compañía se llama Moby Proyect
  • Entre otras, en la idea inicial, surgió usar un sistema operativo, pudiendo hacer instantáneas de él, igual que los commit de git y pudiendo en cualquier momento recuperar el sistema operativo a un determinado instante.
  • Para ello se usó en concepto de contenedor un programa que virtualiza un determinado sistema operativo, pero solo el software. de este contenedor podemos comitear a imágenes nuevas en cualquier momento. una imagen concreta levanta un contendor de forma muy rápida (cuestión de segundos o menos....). En cada commit solo se guardan los cambios realizados desde el commit anterior.


Icon define.gif
Definición
Es un sistema de virtualización de código abierto basado en contenedores.



Icon define.gif
"Idea intuitiva de virtualizar un S.O."

Utilizar software para emular el sistema necesario que pueda contener un determinado sistema operativo disponible para ser usado


Cómo actúa Docker en una máquina anfitriona

  • El elemento funcional u operativo de en un sistema basado en docker es el contenedor

Qué es un contenedor



Icon define.gif
Un contenedor

Es una pieza de software liviana, independiente, empaquetable y ejecutable que incluye todo lo que necesita para correr: código, runtime, herramientas de sistema, librerías y configuraciones traducido de la página oficial de docker



Docker distancia 1.png


  • No se virtualiza el sistema operativo entero, solo los servicios que queremos usar con sus dependencias (Esta es la idea de un contenedor)
  • El kernel del sistema operativo es compartido con el host anfitrión dónde el contenedor es ejecutado.
Con todo ello conseguimos
  • Un sistema muy ligero, tanto en peso como en ejecución. Esto se consigue, ya que en realidad lo que voy almacenando en el contenedor son las diferencias respecto a una imagen o al kernel del sistema operativo, no tengo una réplica de todo como ocurre en una máquina virtual. Utilizo todo del sistema dónde me alojo y tengo en cuenta la peculiaridades o diferencias que he agregado en el contenedor que estoy ejecutando.
  • Totalmente portable: podemos desplegar un contenedor en cualquier otro anfitrión o máquina que soporte esa tecnología. El contenedor lo podemos llevar en un fichero tar
  • Es seguro, el docker está encerrado en un chroot, podemos asegurar las versiones de nuestros servicios y sistema operativo.
  • Muy flexible y de fácil adaptación con el exterior: es muy cómodo y sencillo pasar ficheros entre el contenedor y el host. Se puede mantener un volumen que sea compartido por ambos sistemas de ficheros (el del host y el del contenedor).

Vitualización basada en contenedores Vs Máquinas virtuales

  • Un sistema de virtualización basado en docker es muy diferente de un sistema basado en máquinas virtuales
  • En ambos perseguimos el objetivo de tener un sistema operativo diferente e independiente de la máquina anfitriona donde desplegamos la virtualización. Pero el método de conseguirlo es totalmente diferente.

Docker distancia MV.png

Icon present.gif
Tip: Esta imagen tiene imágenes y texto obtenidos de wikipedia que he adaptado
https://es.wikipedia.org/wiki/Hipervisor 


  • Observamos en la imagen, como cada máquina virtual implementa la parte del hardware como parte de la máquina virtual, incluso reservando recursos físicos de la máquina anfitriona para cada máquina virtual.
  • Arrancar cada máquina puede constar minutos, al igual que cuando arrancamos físicamente nuestro equipo
  • Como ventaja tenemos realmente una máquina independiente, pero perdemos la flexibilidad, velocidad y ligero de un contenedor, no tiene nada que ver.

Docker en el desarrollo web

  • Es una manera de que el desarrollador tenga justo lo que necesita, sin alterar el sistema o host principal dónde desarrolla

Docker 1.jpg

  • Está basado en una imagen. A partir de ella (y dependiendo siempre de ella) tendremos uno o varios contenedores, software operativo que virtualiza y me ofrece todas sus prestanciones.
  • La dependencia entre una image y sus contenedores es total, de modo que no podremos borrar una imagen si hay contenedores que se hayan creado a partir de ella.
  • Esto es normal, ya que la gran velocidad y flexibilidad de docker está basada en que solo guardamos los cambios que realicemos, por eso todo es tan dinámico.

Registros de imágenes



Icon inter.gif
Recursos de la Web


  • Un registro es un sistema de almacenamiento de imágenes de docker dónde se pueden subir y bajar imágenes.
  • Para que el usuario interactúe con el registro, necesita dos comandos


pull => Obtener una imagen del registro a tu sistema.
push => Subir una imagen al registro.

  • Lo habitual es usar el registro oficial llamado docker hub
  • También podremos, por rapidez, crear un registro local y que sea éste el que responda a las solicitudes de nuestra red; ésto claramente ahorra tiempo y no colapsará la red externa.


Icon casestudy.gif
Ejemplo
docker pull ubuntu


El nombre de la imagen identifica su origen o registro del que se obtiene. </parrafo>

Instalar Docker

  • Verificar versión de ubuntu
 lsb_release -a
  • Agregamos la clave GPG para poder acceder al repositorio oficial de Docker desde nuestra utilidades apt-get
 sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  • Añadimos el nuevo fuente de repositorio de docker a nuestro sources
 sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
  • Acutalizamos el origen de los paquetes en nuestro sistema
  sudo apt-get update
  • Porcedemos a instalar
 sudo apt-get install -y docker-engine
  • Ahora para poder ejecutar docker el usuario actual sin usar sudo
  • Creamos el grupo de docker si no existe
 sudo groupadd docker
  • Agragamos el usuario actual ( u otro si queremos que sea otro) al grupo de docker
 sudo gpasswd -a $USER docker
  • Para ver todos los comando
 docker help

Contenedor Vs Imagen

  • Este es un concepto importante que puede quedar claro si vemos la imagen anterior
  • La imagen es el fichero que nos va a permir instalar esta especie de máquina virtual.
  • Es como el iso para instalar el sistema operativo
  • El contenedor es el sistema corriendo con el cual podemos interactuar. Se instala a partir de una imagen
  • Lo bueno que tiene docker es que a partir de un contenedor podemos crear una imagen con todo el software que tenga ese contenedor. Cuando volvamos a desplegar la imagen creada en otro contenedor, tendremos disponible todo el software incluido. En la sección siguiente realizaremos estas acciones.

Acciones concretas

Crear un contenedor a partir de una imagen del repositorio


Icon key points.gif

Crear un contenedor

run
  sudo docker run --name dwes -ti ubuntu:14.04

-ti es para dejar abierto el contenedor creado de forma interactiva y en terminal --name para dar un nobmre al contenedor creado (si no lo hacemos crea uno por defecto

  • Hay otros muchos comandos disponibles, verlos con el comando
 docker help run
Ver los contenedores del sistema
  docker ps -a
Ver los las imágenes del sistema
  docker ps -a


Modificar un contenedor
  • Una vez abierto el contenedor podemos proceder a instalar cosas.
  • Por ejemplo podemos realizar toda la instalación de apache en el contenedor atenrior
apt-get install apache2
  • Instalar también el php siguiendo las acciones ya realizadas al principio de curso
Crear una imagen en local a partir de un contenedor


Icon key points.gif

Crear un contenedor

commit
  • Igual que en git
  docker commit -m "imagen  con apache" -a "Manuel Romero <manuelromeromiguel@gmail.com>
  • Puedo poner un repository/tag que es como un identificador a la imagen creada
  • Los dos nombre indentifican la imagen
docker images (Para ver la imagen y su identificador (ID)
docer tag ID manuel/apache_v1.0


Ver imágenes y contenedores
  docker images  //ver imagenes
  docker ps -a   //Ver contenedores
Arrancar un contenedor
Crear una imagen en local a partir de un contenedor


Icon key points.gif

Crear un contenedor

start
exec


  • Una vez cerrado el contenedor (no parado), éste sigue estando disponible
  • Para usarlo hay que realizar dos acciones
~ ➭  docker start  dwes
dwes
~ ➭  docker exec -ti dwes /bin/bash 
root@496b9ba15066:/#
Crear un contenedor a partir de una imagen en local
  • Con el comando run, pero especificando la imagen local
Crear un contenedor con un volumen lógico a partir de una imagen en local
  • Para ello usamos el parámetro -v
 docker run --name nombre_contenedor_nuevo -v /var/www/iternova:/var/www -dti nombre_imagen

Resumen

Icon summary.gif
Resumen


Icon key points.gif

Crear un contenedor a partir de una imagen oficial

sudo docker run --name nombre_contenedor -ti ubuntu:14.04
--name
nombre_contenedor : Nombre que queramos dar al contenedor
-ti
flags que detallan -t terminal -i interactivo
es decir deja el termina abierto en modo interactivo
ubuntu
14.04
nombre de la imagen que quiero instalar
si no está en local intenta descargar de https://hub.docker.com/explore/
(solo la primera vez ya que se queda descargada)
si no la encuentra da un error




Icon key points.gif

Ver contenedores

sudo docker ps -a




Icon key points.gif

Ver imagenes en mi sistema

sudo docker images




Icon key points.gif

Arrancar un contenedor

  • En dos pasos
sudo docker start nombre_contenedor
sudo docker exec -ti nombre_contenedor bash




Icon key points.gif

Ejecutar un comando

  • En dos pasos
sudo docker exec  nombre_contenedor comando




Icon key points.gif

Crear una imagen a partir de un contenedor

sudo docker commit -m "..." -a "..." nombre_contenedor  nombre_img:version
-m
es un mensaje que quedará asociado a esa imagen
-a
Datos el autor




Icon key points.gif

Crear un contenedor estableciendo un directorio compartido

  • Directorio compartido es un directorio cuyo contenido queda totalmente accesible entre contenedor y máquina anfitriona (mi host)
sudo docker run --name nombre_contenedor -ti
-v directorio_local:directorio_contenedor nombre_img:version