martes, 6 de mayo de 2014

Manejando LinuxContainers con Docker

Como vimos en un post anterior, es de gran utilidad conocer el manejo de los Linux Containers. Vimos también que existen implementaciones que nos ayudan a usarlos sin necesidad de profundizar mucho en su estructura y funcionamiento. Docker es una de ellas.

Docker es una herramienta Open Source desarrollada para facilitar la implementación de los Linux Containers. En la actualidad Docker se está convirtiendo en el estándar de-facto para esta tecnología, siendo acogido por importantes distribuciones como Red Hat, Fedora y Ubuntu. También cuenta con amplios repositorios, oficiales y no oficiales, los cuales proveen imágenes de diferentes distribuciones.

Sin más, manos a la obra...

Lo primero es instalar Docker, que se encuentra en los repos de Fedora.
[fraterneo@rainbow ~]$ sudo yum install -y docker-io
Para ejecutarlo como un usuario sin privilegios (non-root user) nos agreamos a su grupo.
[fraterneo@rainbow ~]$ sudo usermod -a -G docker fraterneo 
Para su correcto funcionamiento es necesario agregar el siguiente fichero en /etc/default
[fraterneo@rainbow ~]$ sudo nano /etc/default/docker-io
DOCKER="/usr/bin/docker"
Docker funciona como un servicio por lo que es necesario habilitarlo e iniciarlo.
[fraterneo@rainbow ~]$ sudo systemctl enable docker.service 
[fraterneo@rainbow ~]$ sudo systemctl start docker.service 
Verificamos que esté iniciado correctamente.
[fraterneo@rainbow ~]$ sudo systemctl status docker.service 
docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
   Active: active (running) since Tue 2014-05-06 08:49:41 AST; 22min ago
     Docs: http://docs.docker.io
 Main PID: 1749 (docker)
   CGroup: name=systemd:/system/docker.service
           ├─1749 /usr/bin/docker -d
           └─1969 /bin/bash
Ahora podemos comenzar a usar Docker descargando alguna imagen desde sus repositorio. Como ejemplo trabajaremos con una imagen de Ubuntu 14.04 o la que ustedes prefieran.
[fraterneo@rainbow ~]$ docker pull ubuntu:14.04
Pulling repository ubuntu
99ec81b80c55: Download complete 
511136ea3c5a: Download complete 
5e66087f3ffe: Download complete 
4d26dd3ebc1c: Download complete 
d4010efcfd86: Download complete 
Para listar las imágenes que hemos descargado lo haremos con el siguiente comando.
[fraterneo@rainbow ~]$ docker images ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               99ec81b80c55        11 days ago         266 MB
ubuntu              10.04               3db9c44f4520        2 weeks ago         183 MB
Como pueden ver ya había descargado también a Ubuntu 10.04. Para hacer Docker más eficiente, estas imágenes de Ubuntu son las minimal. Ahora vamos a probar la imagen de la versión 14.04, especificando un Shell para que pueda funcionar.
[fraterneo@rainbow ~]$ docker run -i -t ubuntu:14.04 /bin/bash
root@cd7065fd3544:/# 
Vemos que nuestro prompt ha cambiado a root@cd7065fd3544:/#. Es porque estamos dentro del Ubuntu corriendo en su contenedor y aislado del sistema. Los siguientes comandos que ejecutemos correrán dentro de Ubuntu. Comprobamos la versión de Ubuntu.
root@cd7065fd3544:/# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
Otra comprobación la podemos hacer con comandos propios de Ubuntu como apt.
root@cd7065fd3544:/# apt-cache search isomaster
isomaster - Graphical CD image editor

root@cd7065fd3544:/# apt-get install nmap
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libblas3 liblinear-tools liblinear1 liblua5.2-0 libpcap0.8 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib
  python python-minimal python2.7 python2.7-minimal
Suggested packages:
  libsvm-tools liblinear-dev python-doc python-tk python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  libblas3 liblinear-tools liblinear1 liblua5.2-0 libpcap0.8 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib
  nmap python python-minimal python2.7 python2.7-minimal
0 upgraded, 13 newly installed, 0 to remove and 0 not upgraded.
Need to get 8081 kB of archives.
After this operation, 34.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
De ahora en adelante solo nos queda aprovechar las ventajas que nos ofrecen los Containers, entre ellas hacer pruebas en otras distribuciones sin necesidad de descargar e instalar una versión completa en otra computadora o usando un método de virtualización completo; ver las novedades introducidas en las mismas de forma rapida, etc.

Estos son solo unos pasos básicos con Docker, pero el mismo cuenta con una amplia documentación y entedibles tutoriales para ir más allá de esto. Eso queda en sus manos.

Más información:
http://www.docker.com/
http://docs.docker.io/reference/commandline/cli/
https://index.docker.io/_/ubuntu/
https://index.docker.io/official
https://www.linux.com/news/enterprise/cloud-computing/740858-how-docker-is-changing-linux-clouds

2 comentarios:

  1. Excelente articulo. Justo estoy comenzando a ver contenedores. Me sirvio de mucho la información.

    Por otro lado, hay un 'un' de más en la última oración del segundo parrafo.

    ResponderEliminar
  2. Gracias Jean. Que bueno que fue útil para ti.

    Corregido el 'un' de más.

    Un abrazo.

    ResponderEliminar