Miércoles, Julio 08, 2020

Tutorial Docker: conceptos básicos y primeros pasos

docker.jpg

Docker es una tecnología que promete revolucionar la informática profesional. Para los que no lo sepan, se trata de una tecnología de contenedores, que básicamente consiste en la ejecución de sistemas operativos dentro de otros, obteniendo los sistemas “invitados” su propio sistema de ficheros, su propio espacio de usuarios, sus propios procesos y sus propias interfaces de red, pero compartiendo algunos elementos de la máquina anfitriona como el kernel.

Para separar los contenedores entre sí y de la máquina anfitriona, Docker utiliza las características de aislamiento del kernel Linux. Todo este enfoque permite a los contenedores ser mucho más ligeros que las máquinas virtuales, tanto en espacio en disco como de consumo de recursos. Además su naturaleza les otorga una gran portabilidad y seguridad. Su principal función es la de poder empaquetar aplicaciones con todas las partes necesarias, incluyendo bibliotecas y dependencias, pudiendo luego ser reutilizado otro tipo de aplicaciones, pudiendo recordar un poco el concepto de los paquetes Snap de Ubuntu, aunque aquí no llegaremos hasta ese punto.

Los contenedores no son algo nuevo, de hecho compañías como Google y Amazon llevan años utilizándolos, pero eran muy difíciles de manejar y requerían de profundos conocimientos para utilizarlos. Docker rompió esas barreras ofreciendo una forma más o menos sencilla de instalar, configurar y utilizar contenedores.

Hoy publicamos este tutorial sobre los conceptos más básicos de esta tecnología, que no convertirán a nadie en un experto, pero sí pueden valer como una pequeña introducción utilizando la línea de comandos Bash en GNU/Linux. Y no, no es una tecnología enfocada al usuario común, sino más bien a aquellas personas que tengan ya unos conocimientos al menos medio-avanzados de informática.

Máquina utilizada para el tutorial

  • Máquina virtual VirtualBox 5.0.14 preconfigurada para usar Ubuntu 64 bits.
  • Sistema operativo: Ubuntu 16.04.

La elección de Ubuntu 16.04 es para tener algo estándar para cuando esta versión se extienda entre los usuarios de escritorio, algo que pasará a partir de pasado mañana, cuando sea lanzado oficialmente.

Instalación de Docker en Ubuntu 16.04

En la documentación se puede ver cómo instalar este servicio de contenedores en cada una de las distribuciones GNU/Linux relevantes, aunque aquí nos centraremos en Ubuntu 16.04. Los pasos a seguir no varían mucho desde el punto conceptual, cambiando, sobre todo, el gestor de paquetes empleado por cada distribución. Después de instalar Docker los pasos para crear y poner en funcionamiento contenedores es igual para todas las distribuciones.

En primer lugar refrescamos la caché del gestor de paquetes en Ubuntu.

sudo apt-get update

En segundo lugar nos aseguramos de tener instalado apt-transport-https y ca-certificates.

sudo apt-get install apt-transport-https ca-certificates

El tercer paso consiste en añadir la clave GPG.

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Después el usuario tiene que abrir o crear el fichero /etc/apt/sources.list.d/docker.list. Si se está instalando Docker desde un entorno de consola lo suyo es usar VIM, Nano o algún editor de texto para consola, mientras que si se está haciendo esto desde una terminal gráfica se puede emplear Gedit, Kate o cualquier otro.

sudo nano /etc/apt/sources.list.d/docker.list #Se puede cambiar nano por vim o el editor para consola que se esté utilizando

O también:

sudo gedit /etc/apt/sources.list.d/docker.list #Se puede cambiar kate o el editor para consola que se esté utilizando

Después de abrir el fichero docker.list se tiene que escribir en él la siguiente línea, que hace referencia al repositorio.

deb https://apt.dockerproject.org/repo ubuntu-xenial main

Configuracion-del-repositorio-de-Docker-en-Ubuntu-16-04.png

Una vez introducido el texto, hay que salir del editor de texto guardando los cambios en el fichero. Como ya tenemos la clave GPG y la URL del repositorio, tocará refrescar el gestor de paquetes.

sudo apt-get update

Ya podemos instalar Docker de verdad.

sudo apt-get install docker.io

Para asegurarnos de que Docker está en funcionamiento, reiniciaremos el servicio a través de systemd (si usáis Ubuntu 14.04 como anfitrión, habría que iniciarlo a través de Upstart).

sudo systemctl restart docker

Ahora mismo el usuario que puede utilizar Docker es root, lo que en Ubuntu fuerza a utilizar sudo cada vez que quiera hacer algo relacionado con los contenedores o su servicio. Para hacer su utilización más práctica se puede incluir nuestro usuario en el grupo del servicio de contenedores con estos dos comandos y sustituyendo muylinux por el nombre de vuestro usuario.

sudo usermod -a -G docker muylinux
newgrp docker #Esto permite “refrescar” el grupo sin tener que reiniciar

Cómo instalar un contenedor

Los contenedores Docker se almacenan en forma de imágenes preconfiguradas. Para ver las disponibles relacionadas con una distribución solo hay que ejecutar el siguiente comando (si no habéis añadido a vuestro usuario en el grupo tendréis que poner sudo delante).

docker search centos

Busqueda-de-las-imagenes-de-CentOS-para-Docker.png

Sin embargo, nosotros hemos decidido instalar una imagen de Ubuntu 14.04, para lo cual hemos ejecutado lo siguiente.

docker pull ubuntu:14.04

Listar las imágenes descargadas en nuestro sistema anfitrión.

docker images

R01-Listas-las-imagenes-instaladas-de-Docker.png

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 b72889fa879c /bin/bash

O también:

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

El usuario también puede ponerle una etiqueta personalizada que haga referencia a una imagen instalada en su sistema. Esto puede venir bien para tener un poco más de organización cuando se utilizan muchas imágenes, más cuando son del mismo sistema. Para crear una etiqueta para una imagen presente solo hay que ejecutar lo siguiente.

docker tag b72889fa879c oldlts:latest

oldlts‘ es el nombre del repositorio establecido por el usuario, mientras que ‘latest‘ es la etiqueta.

Para crear el contenedor y ponerlo en marcha hay que seguir el mismo paso de antes, pero cambiando la referencia por la etiqueta creada por el usuario.

docker run -i -t oldlts:latest /bin/bash

Es importante mencionar que cada vez que ejecutamos el comando run de Docker estamos creando un nuevo contenedor, que puede ser listado luego con ps -a.

Formas de salir de un contenedor

Hay una forma de salir de un contenedor, que es tecleando el comando exit una vez dentro, algo que se puede hacer también con la combinación de teclas Ctrl+D pulsadas a la vez. Sin embargo, este método también detiene la ejecución del contenedor, algo que posiblemente no sea lo ideal para muchos.

Pues bien, hay una forma de salir de un contenedor sin detenerlo: técnicamente este proceso se llama detach, que se puede traducir por “desprenderse”. Para ello, cuando se está dentro de un contenedor, hay que mantener pulsada la tecla Ctrl y luego, sin soltar en ningún momento, presionar secuencialmente primero P y luego Q. Con esto el usuario volverá a ver el prompt de la máquina anfitriona sin dejar de ejecutar el contenedor.

Como-salir-de-un-cotenedor-Docker-sin-cerrarlo.png

Manejando los contenedores propiamente dichos

Como ya hemos comentado, cada vez que ejecutamos el comando run estamos creando un contenedor nuevo, por lo que lo recomendable es ejecutarlo tan solo una vez. Luego podemos listar los contenedores disponibles a través del siguiente comando.

ps -a

Lista-de-contenedores-Docker-no-de-imagenes.jpg

Hay dos maneras de poner en marcha el contenedor a través del mismo comando, pudiéndose utilizar su identificador (CONTAINDER ID) o su nombre (NAMES).

docker start ef7e107e0aae

O también:

docker start lonely_wing

Con esto iniciamos el contenedor sin acceder a él, algo que viene bien si hemos construido un LAMP y queremos acceder a él desde un servidor FTP. Sí, los contenedores Docker funcionan con la misma lógica que el sistema anfitrión, siendo la instalación de aplicaciones y su configuración exactamente igual. En caso de la imagen de Ubuntu 14.04 que estamos usando, se puede emplear apt-get para instalar las aplicaciones y Upstart para iniciar y apagar servicios. También es importante mencionar que cuando se accede a un contenedor se utiliza la cuenta de root por defecto.

Si se quiere acceder (attach, que se podría traducir por adjuntar o unir) al contendor se puede recurrir a una de estas dos opciones.

docker attach ef7e107e0aae

O también:

docker attach lonely_wing

Para detener un contenedor es obvio que hay que recurrir a stop.

docker stop ef7e107e0aae

O también:

docker stop lonely_wing

Como-poner-en-marcha-un-contenedor-con-el-nombre.jpg

Guardar una imagen

¿Ya tenemos listo el contenedor como lo queríamos?, ¿ya tiene instalado lo que necesitamos? Para ello se puede crear una imagen de un contenedor con la siguiente línea de comando, almacenándola en el repositorio local. Con esto se podrá generar nuevas imágenes derivadas de esta, además de otros contenedores, sin tener que repetir de nuevo los pasos. La referencia (ef7e107e0aae) que aparece en la línea de comando corresponde al identificador del contenedor, no de la imagen.

docker commit ef7e107e0aae ubuntu:14.04

Cómo borrar un contenedor y una imagen

Como es obvio, podría llegar el momento en que nos interese eliminar un contenedor o un imagen de nuestro sistema por el motivo que sea. Hay que tener en cuenta que cada contenedor está relacionada con una imagen y una imagen puede ser utilizada por varios contenedores, por lo que se requiere de borrar los contenedores relacionados con la imagen antes de proceder al borrado de la imagen.

Para borrar un contenedor se puede emplear el identificador o bien el nombre.

docker rm ef7e107e0aae

O también:

docker rm lonely_wing

Para borrar una imagen lo recomendable es utilizar el identificador de esta.

docker rmi b72889fa879c

Conclusión

Con todo esto una persona no se convierte ni mucho menos en un experto en Docker, pero sí le puede servir para iniciarse en esta interesante tecnología, la cual ya goza de una importante demanda en el mercado de los servidores. Me he dejado en el tintero los DockerFiles, los cuales pueden ayudar a automatizar la creación de contenedores; además de dejarme en el tintero alguna que otra cosa interesante como Docker Hub.

Esta tecnología podría dar para una extensa biblia, sin embargo, lo expuesto en este tutorial puede servir para crear algún pequeño entorno de pruebas casero, pudiendo incluso sustituir a las máquinas virtuales en caso de estar utilizando un ordenador con pocos recursos. De hecho yo mismo he dado este salto en mi viejo portátil Toshiba, que tiene ya 9 años, y he aprovechado el tirón de Docker para volver a instalar Windows de forma física y abandonar VirtualBox en su favor, que emular Windows 7 o superior en una máquina virtual termina siendo una tortura en ese viejo dispositivo.

 

Fuente: James Coyle | muylinux

Compártelo. ¡Gracias!

 
Grupo Digital de Ayuda! Laboratorio Linux! - Linux para todos.

¿Quién está en línea?

Hay 82 invitados y ningún miembro en línea

Contador de Visitas

10732083
Hoy Hoy 378
Ayer Ayer 2724
Esta semana Esta semana 5826
Este mes Este mes 18809
Total de Visitas Total de Visitas 10732083

Día con más
visitantes

06-03-2020 : 2881

Gracias por su visita