Monday, October 17, 2016

crear una imagen con docker

Como empezar con docker

Docker funciona mediante los conceptos de container e imágenes. Una imagen es una máquina sin instanciar, con todo instalado y que no puede ser modificada una vez creada. Una imagen de Docker parte siempre de otra imagen.  Un containter es la instancia de una máquina que parten de una imagen.  

Fichero Dockerfile
 
Para generar una imagen, se debe crea un fichero Dockerfile donde se indica la imagen de la que se parte. Para ver los listados de imágenes disponibles se pueden buscar en https://hub.docker.com/  En el fichero Dockfile se aplican los cambios que sea necesario para nuestro proyecto. Se realizan copia de ficheros mediante el comando ADD (deprecate) o COPY,  se pueden establecer variables de entorno con el comando ENV y  ejecutar comandos , instalación de paquetes, con el comando RUN.

Para que se puedan acceder a los puertos de la imagen se usa el comando EXPOSE en el fichero Dockefile. Como pueden ser los tipicos de ssh y tomcat  EXPOSE 22 80  9001
Para finalizar se usa el servicio supervisiord para la ejecución de varios servicios de nuestra imagen y en el que se debe configurar un fichero para lanzar los script correctamente en el puerto 9001
CMD ["/usr/bin/supervisord"]

Comandos de docker para crear un proyecto
  
Para llevar a cabo la creacion de un sistema docker he eguido los siguientes pasos

  1. Se crea una imagen, ver fichero Dockerfile,  mediante el comando docker build -t usuario/proyecto .
  2. Se crea un volumen de datos  docker volume create  --name datosPersistentes para los volumenes
  3. Se crea el container docker run -p 8080:8080 -p 9001:9001  -v datosPersistentes:/data  -v    -i -t  usuario/proyecto. Desde este momento ya se puede acceder al container. Ver si se dejan todos los puertos abiertos o simplemente el 8080 . Si se hace un control-c se para el container. Si se lanza con la opción -d se desvincula y no se parará el container y si se quiere parar con el comando   docker stop idcontainercreado
  4. Se inicializa el container docker start idcontainercreado, cada vez que se quiera lanzar el container

El comando se puede concatenar para ser mas rápido.
docker build -t usuario/proyecto . &&  docker run -p 8080:8080 -p 9001:9001  -v datosPersistentes :/data    -i -t   usuario/proyecto


Para comprobar que los servicios están levantados se mira el enlace
   
   
Los container se pueden para la ejecución y volver a ejecutarlos mediante el comando docker stop y docker start

Para acceder a una máquina docker se puede ejecutar el comando docker exec -i -t idcontainercreado /bin/bash

Es recomendable borrar las imágenes y container ya que ocupan mucho espacio.

Por último se puede publicar una imagen en un repositorio publico como el de https://hub.docker.com con el comando docker  login --username=usuario --email=miemail@loquesea.nose
Se hace login en el sistema y con el comando
docker push usuario/proyecto
Se publica la imagen

Comandos útiles de docker

Ver todos los container
docker  ps -a
Ver la version de docker
docker -v

Borrar los container
docker  rm   idimagen
Borra Todos los container que cumplen como nombre del container ‘condicion’

docker ps -a | grep ‘condicion' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Borrar todos los volúmenes. Cuidado con borrar los datos del container
docker volume ls  | awk '{print $2}' | xargs docker volume rm

Borrar todas las imágenes. No borrará los container en start
docker images  | grep condition | awk '{print $3}' | xargs docker rmi

Copiar ficheros desde el host a un container
docker cp foo.txt mycontainer:/foo.txt