jueves, 10 de diciembre de 2015

trabajando en Docker



Un cordial saludo al profesor Juan Jose Diaz Nerio y a nuestros compañeros de la materia.








Nota: todo este material es confines educativos tomado de referencia de otras paginas y de la fuente oficial.

lunes, 30 de noviembre de 2015

Conceptos basicos Docker

Algunos conceptos básicos:

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.

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:




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.

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.


Comandos básicos de Docker

Docker y el uso de la línea de comandos

Tras la instalación, el demonio Docker debe estar ejecutándose en segundo plano, listo para aceptar comandos enviados por el cliente de la línea de comandos de Docker. Para ciertas situaciones en las que podría ser necesario ejecutar manualmente Docker, utiliza lo siguiente.
Ejecutar el demonio Docker:
sudo docker -d &
Uso del cliente de la línea de comandos de Docker:
sudo docker [opción] [comando] [argumentos]
Nota: Docker necesita privilegios de administrador para poder trabajar.

Comandos de Docker

He aquí un resumen actual (versión 0.7.1) de los comandos de Docker:

attach

Adjunta a un contenedor corriendo

build

Construye un contenedor de un archivo Docker

commit

Crea una nueva imagen de los cambios del contenedor

cp

Copia archivos/carpetas de los contenedores del sistema de archivos a la ruta de host

diff

Inspecciona los cambios en el sistema de archivos de un contenedor

events

Obtiene eventos en tiempo real desde el servidor

export

Transmite el contenido de un contenedor como un archivo tar

history

Muestra el historial de una imagen

images

Lista las imágenes

import

Crea una nueva imagen del sistema de archivos de los contenidos a partir de un archivo tar

info

Muestra el sistema de información de la pantalla

insert

Inserta un archivo en una imagen

inspect

Regresa información de bajo nivel en un contenedor

kill

Mata a un contenedor en ejecución (corriendo)

load

Carga una imagen desde un archivo tar

login

Registra la sesión para el servidor de registro de Docker

logs

Obtiene los registros de un contenedor

port

Busca el puerto público el cual está NAT-eado y lo hace privado (PRIVATE_PORT)

ps

Lista los Contenedores

pull

Descarga una imagen o un repositorio del servidor de registros Docker

push

Empuja una imagen o un repositorio del servidor de registro Docker

restart

Reinicia un contenedor en ejecución (corriendo)

rm

Elimina uno o más contenedores

rmi

Elimina una o más imágenes

run

Ejecuta un comando en un contenedor

save

Guarda una imagen en un archivo tar
Busca una imagen en el índice de Docker

start

Inicia un contenedor detenido

stop

Detiene un contenedor en ejecución (corriendo)

tag

Etiqueta una imagen en un repositorio

top

Busca los procesos en ejecución de un contenedor

versión

Muestra la información de versión de Docker

¿Qué son los Dockerfile?

Dockerfiles son scripts que contienen comandos declarados sucesivamente que serán ejecutados, en el orden dado, por Docker para crear automáticamente una nueva imagen Docker. Estos ayudan en gran medida durante los despliegues.
Estos archivos siempre comienzan con la definición de una imagen base utilizando el comando FROM. A partir de ahí, el proceso de construcción se inicia y cada siguiente acción tomada forma finalizando con commits (guardando el estado de imagen) en el host.
Uso:
# Construir una imagen mediante el archivo Dockerfile en la ubicación actual
# Marcar la imagen final con [nombre] (por ejemplo, *nginx*)
# Ejemplo: sudo docker build -t [nombre] .
sudo docker build -t memcached_img .
Nota: Para obtener más información sobre archivos Dockerfiles, echa un vistazo a nuestro artículo:Explicando Docker: El Uso de archivos Dockerfiles para automatizar la creación de imágenes.

Información general sobre comandos Dockerfile

Add

Copia un archivo desde el host en el contenedor

CMD

Configura comandos por defecto para ser ejecutado, o se pasa al punto de entrada ENTRYPOINT

ENTRYPOINT

Ajusta el punto de entrada por defecto de la aplicación desde el contenedor

ENV

Inicializa variables de entorno (por ejemplo, "clave=valor")

EXPOSE

Expone un puerto al exterior

FROM

Configura la imagen base para usar

MAINTAINER

Establece los datos de autor/propietario del archivo Dockerfile

RUN

Ejecuta un comando y cambia (commit) el resultado de la la imagen final (contenedor)

USER

Establece el usuario para ejecutar los contenedores de la imagen

VOLUMEN

Monta un directorio desde el host al contenedor

WORKDIR

Establece el directorio para las directivas de CMD que se ejecutarán

Creación de un archivo Dockerfile

Dado que los archivos Dockerfile son documentos de texto sin formato, puedes crear uno desde tu editor de texto favorito y escribir los comandos que deseas que Docker ejecute con el fin de construir una imagen. Después de empezar a trabajar en el archivo, continúa con la adición de todo el contenido a continuación (uno tras otro) antes de guardar el resultado final.

Nos gusto mucho este material  explica como usar el repositorio de Docker:

https://picodotdev.github.io/blog-bitix/2015/07/crear-y-usar-un-repositorio-en-docker-hub/