meta data de esta página
  •  

¡Esta es una revisión vieja del documento!


Docker

Para entendernos, esta herramienta nos permite desplegar imágenes de SO, (para nosotros son casi como máquinas virtuales) en lo que se denomina contenedores de software. El contenedor en si es una virtualización a nivel de sistema operativo con una capa de abstracción y automatización en la que está incluida todo lo necesario para su funcionamiento.

Al incluir el contenedor un filesystem completo que contiene todo lo necesario para ejecutar una aplicación (librerías, fuentes, etc) garantizamos que el software siempre correrá igual independiente del entorno en que se ejecute.

La principal diferencia con una máquina virtual es que sólo contiene lo mínimo necesario para ejecutar la aplicación, sin necesidad de un S.O completo. Además de que se ejecuta en un proceso aislado, en el espacio de usuario del S.O del host, compartiendo el kernel con otros contenedores.

La filosofía de Docker es virtualizar lo mínimo necesario para ejecutar una aplicación, sin la necesidad de tener un sistema operativo completo como host, sino que este puede ser compartido por más contenedores con el consiguiente ahorro de recursos.

Las ventajas de usar docker serían:

  • Tener un mismo entorno para producción, testeo y desarrollo
  • Escalado Horizontal
  • Despliegue de aplicaciones con versiones antiguas.

Existe un repositorio de imágenes para Docker que se llama Registry Hub https://registry.hub.docker.com/ y desde cualquier lugar podemos, crear, compartir y consumir imágenes creadas por nosotros o por terceros.

Comparativa de Docker vs máquinas virtuales → http://www.rediris.es/tecniris/archie/doc/TECNIRIS47-3b.pdf

Conceptos

Docker basa su uso en:

A la hora de trabajar con Docker hay que tener en cuenta los siguientes conceptos:

  • imagen → es un conjunto de aplicaciones/máquina virtual empaquetada en un fichero con todo lo necesario (dependencias, configuración, etc…). No cambia y no tiene estados
  • Dockerfile→ es un archivo donde definimos las reglas para crear una imagen
  • contenedor → es el resultado de ejecutar una imágen(instancia), se podría decir que un contenedor es como una máquina virtal ligera., aunque en realidad es un proceso totalmente asilado del resto de procesos de la máquina sobre la que se ejecuta. Sus principales características son : su portabilidad, inmutabilidad y ligereza

Instalación en Centos 7

Instalamos primero los siguientes paquetes necesarios

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum install docker

Tambien podemos utilizar el script de instalación

    curl -fsSL https://get.docker.com/ | sh

Si queremos ponerlo como servicio

sudo systemctl start docker 
y para que arranque en el inicio
sudo systemctl enable docker

Para que docker funciones hay que crear un grupo y darle permisos sobre /var/run/docker.sock

sudo groupadd docker
sudo chown root:docker /var/run/docker.sock

Añadimos nuestro usuario al grupo docker

sudo usermod -a -G docker vagrant

Instalación en Ubuntu

Para instalar la últimar versión, ya que está en continuo desarrollo

 curl -sSL https://get.docker.com/ | sh

Si queremos instalarlo desde los repositorios oficiales

sudo apt-get install docker vagrant

Vagrant no es necesario, pero me permite gestionar y configurar mis contenedores, por ejemplo cuando quiero duplicar entornos o desplegar imágenes con configuraciones determinadas

Instalación en Windows

Para la instalación en windows necesitamos:

  1. descargar e instalar oracle virtualbox en caso de no tenerlo ya instalado
  2. descargar e instalar docker toolbox (www.docker.com/toolbox)
Ahora si tienens windows 10 ya no es necesario tener virtualbox. Basta con descargar desde la página oficial Docker Desktop for Windows Docker

Descargar y ejecutar una imagen utilizando vagrant

Para descargar una imagen, en nuestro caso de ubuntu creamos una carpeta

mkdir proyectosdocker/ubuntu
cd proyectosdocker/ubuntu
vagrant init ubuntu/trusty64
si nos da un mensaje de que no encuentra la imagen, debemos desinstalar vagrant, bajarnos el fichero de instalación de vagrant desde su página web e instalar el fichero deb correspondiente
sudo apt-get remove vagrant
wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.deb
sudo dpkg -i vagrant_1.7.4_x86_64.deb 

Comandos básicos

Comandos de información

docker info
docker version

Gestionar imágenes

Buscar una imagen

docker search centos

Listar las imágenes que tenemos descargadas

sudo docker images 

sudo docker history

Gestionar Contenedores

Instalar una imagen de Kali Linux

sudo docker pull kalilinux/kali-linux-docker

Arrancar un Contendor

sudo docker run -opciones nombre_imagen o codigo_imagen 
sudo docker run -t -i kalilinux/kali-linux-docker /bin/bash

la opción -i es modo interactivo .

Ver los contenedores disponibles

docker ps -a 

Acceder a un contenedor

Para acceder al contenedor, además de crearlo, se puede hacer de dos maneras. Una es haciendo referencia al IMAGE ID y otra al repositorio (REPOSITORY) y la etiqueta (TAG).

docker run -i -t b72879fa579a /bin/bash

O también:

docker run -i -t ubuntu:14.04 /bin/bash

Etiquetar

También podemos poner una etiqueta a nuestros contenedores, y llamarlo por dicha etiqueta, lo cual nos permitirá organizar mejor todos nuestros contenedores. Para poner una etiqueta

docker tag id_imagen repositorio:etiqueta

Para llamar a dicho contenedor por la etiqueta, hacemos lo mismo que cuando lo llamamos por el id pero poniendo ahora la etiqueta

docker tun -i -t repositorio:etiqueta /bin/bash

Iniciar contenedor

docker start imagenid
o bien con
docker start nombre
Con estos comandos arrancamos el contenedor pero no nos conectamos al mismo. Si queremos acceder ejecutamos
docker attach id

Parar contenedor

Para parar un contenedor

docker stop imagenid_o nombre 

Salir

Escribiendo exit en nuestro contenedor, o Pulsando CTRL+D salimos del mismo pero parando la ejecución del mismo. Si queremos salir del contenedor pero que se siga ejecutando debemos presionar CTRL, después P y luego Q

Guardar Contenedor

docker commit imagenid_o nombre

Borrar Contenedor

docker rm <contenedor> 

Copiar desde un contenedor

Para copiar un fichero desde un contenedor a nuestra máquina hacemos

docker cp <nombre_contenedor o id>:<ruta_al_fichero> <directorio_local_a_donde_copiar>

También podemos hacerlo a la inversa. Desde la máquina local al contenedor

Ejecutar comando

Podemos ejecutar un comando dentro de un contenedor con

docker exec <nombre o id contenedor> <comando>

Por ejemplo para iniciar un shell intereactivo

docker exec -it  micontenedor sh

logs

Para ver los logs que está generando un contenedor, ejecutaríamos el comando

docker logs <nombre contenedor o id>

Estadísticas de uso

con el comando stats obtenemos estádisticas de uso y consumo de nuestro contenedor

docker stats <nombre contenedor o id>

Borrar contenedores sin uso

con el comando

docker system prune 
con la opción -a elimina_

  • los contenedores que no se usan
  • los volúmenes que no se usan
  • las imágenes que no se estan usando
  • las redes que no se estan usando
Mucho ojo al ejecutar este comando en sistemas en producción

Source

Cuando tenemos varios entornos de docker y queremos gestionarlos desde una misma máquina podemos definir ficheros con las variables de entorno y usar el comando source para cargarlas con el comando

source /path/mificherovariables.sh

Un ejemplo de ficheros con variables sería :

export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=/home/users/lc/certificados
export DOCKER_HOST=tcp://miservidor.aws.dckr.io:443

Recomendaciones de seguridad

Bastionado

Distribuciones con Docker

Monitorización de contenedores

Referencias