Tal y como quedamos la semana pasada, en el artículo de introducción llamado «Docker, una guia no convencional«, continuamos con la serie; en este caso el tema del artículo será la instalación sobre un sistema operativo, de tal forma que podremos extraer todas las posibilidades que nos brinda Docker.

Para la ocasión, dentro de la gran diversidad del mundo del Ñu y el Pingüino, he escogido Centos 7.

Instalación de Docker CE

Antes de nada debemos tener el host conectado a la red y actualizado a la última versión, a ser posible. Los repositorios de CentOS ya tienen disponibles diferentes paquetes de Docker, pero no los vamos a utilizar.

Vamos a instalar, antes de nada, una serie de paquete previos:

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

En este caso utilizaremos los propios de Docker. De la siguiente manera:

yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

Esto hará que nos aparezca un fichero con los repositorios añadidos en /etc/yum.repos.d/docker-ce.repo

Instalamos la versión comunitaria de Docker:

yum install docker-ce

Una vez instalado, si utilizamos un proxy, debemos configurarlo. Para ello podéis seguir la pequeña guía al respecto que escribí en mi página web. Añadimos Docker al inicio y lo encendemos:

systemctl enable docker
systemctl start docker

Para obtener más información sobre la instalación de Docker en otras distribuciones y plataformas podéis consultar el siguiente enlace.

Ahora ya podemos pasar al siguiente apartado, donde vamos ver diferentes ejemplos de uso.

Laboratorio de pruebas

Para ver su funcionamiento vamos realizar algunas pruebas. Primero de todo ejecutamos:

docker run -ti debian echo hola

De esta manera usamos los parámetros ‘-t’, que crea una pseudo tty, iniciando el contenedor con la posibilidad de acceder a su terminal, y, además ‘-i’, que indica que es de modo interactivo. Indicamos también que usaremos una imagen llamada “debian” que, si no la tenemos en el sistema, la descargará de los repositorios.

Con el resultado:

[root@centos7 ~]# docker run -ti debian echo hola
Hola

Otro comando muy útil es docker ps -a, con el que podemos visualizar todos los procesos de Docker:

[root@centos7 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
fa91ef51401d        debian              "echo hola"         31 seconds ago      Exited (0) 29 seconds ago                       friendly_euclid

Se pueden listar las imágenes disponibles. Estas son las que tengo ahora mismo en la máquina de pruebas:

[root@centos7 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
nickistre/centos-lamp   latest              3d8b86c3bd87        10 days ago         538MB
hello-world             latest              f2a91732366c        2 weeks ago         1.85kB
debian                  latest              6d83de432e98        5 weeks ago         100M

Bien, a continuación vamos a crear un contenedor a partir de una imagen. A su vez nos conectaremos a su Shell:

docker run -ti 3d8b86c3bd87 /bin/bash

Una vez dentro del contenedor podemos salir con la combinación de teclas: CTRL + PQ

Y volvemos a consultar los contenedores que tenemos actualmente funcionando:

[root@centos7 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                     PORTS                     NAMES
543e8a6eb95a        3d8b86c3bd87        "/bin/bash"         About a minute ago   Up About a minute          22/tcp, 80/tcp, 443/tcp   heuristic_liskov
fa91ef51401d        debian              "echo hola"         4 minutes ago        Exited (0) 4 minutes ago                             friendly_euclid       

Si queremos acceder al contenedor desde la consola de comandos debemos utilizar el parámetro ‘attach‘ más su nombre aleatorio. En este caso sería:

docker attach heuristic_liskov

Usando el parámetro ‘logs’ más la id del contenedor podemos visualizar sus registros:

[root@centos7 ~]# docker logs fa91ef51401d
hola

Para parar un contenedor que tengamos activo:

[root@centos7 ~]# docker stop 543e8a6eb95a

Para volver a encenderlo es así de fácil:

[root@centos7 ~]# docker start 543e8a6eb95a

Para eliminar un contenedor en concreto sería:

docker rm -nombre-

Si nos interesa eliminar todos los contenedores, que no las imágenes:

[root@centos7 ~]# docker rm $(docker ps -a -q)
543e8a6eb95a
fa91ef51401d

Funcionando en segundo plano

Otra manera de trabajar con los contenedores es iniciarlos de manera separada, añadiendo el parámetro «d«, esto es, en modo separado («Detached«). De esta manera se le asigna un número de proceso («pid«) propio al contenedor. Hay que tener en cuenta que, por defecto, los contenedores se ejecutan en primer plano («Foreground«).

Un ejemplo de ello:

docker run -dti 3d8b86c3bd87

Vemos el contenedor creado ejecutando docker ps -a, así:

[root@centos7 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
124a62dc8632        3d8b86c3bd87        "supervisord -n"    4 seconds ago       Up 3 seconds        22/tcp, 80/tcp, 443/tcp   youthful_poincare

Para comprobar que efectivamente se le ha asignado un número ‘pid’, utilizando el comando ps -ef, observamos:

[root@centos7 ~]# ps -ef | grep -i 124a62dc8632
root      2898  2147  0 12:24 ?        00:00:00 docker-containerd-shim 124a62dc863239e91536d7e03920e1a0be8c51690bb3c8af6ac16d665be96ceb /var/run/docker/libcontainerd/124a62dc863239e91536d7e03920e1a0be8c51690bb3c8af6ac16d665be96ceb docker-runc

Puede darse el caso de que queramos ejecutar un comando en uno de los contenedores; Docker nos los facilita. Para ello no tenemos que acceder al contenedor, sino ejecutar una orden desde el host principal, utilizando exec:

[root@centos7 ~]# docker exec -ti youthful_poincare uptime
 11:46:57 up 45 min,  0 users,  load average: 0.07, 0.09, 0.07

De esta manera nos devuelve la salida estándar del comando uptime, esto es, la carga del servidor.

Es verdad, lo ideal es que nosotros mismos le pongamos un nombre o alias al contenedor. ¿Cómo lo hacemos? Muy fácil, sólo debemos utilizar el parámetro --name. Aquí os dejo un ejemplo:

docker run -dti --name test 3d8b86c3bd87

Una vez creado lo podemos listar utilizando docker ps -a:

[root@centos7 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                   PORTS                     NAMES
6e0772a1762d        3d8b86c3bd87        "supervisord -n"        4 seconds ago       Up 3 seconds             22/tcp, 80/tcp, 443/tcp   test

Espero que os haya parecido interesante. Si tenéis alguna duda u observación la podéis dejar en los comentarios.

En el siguiente capítulo hablaremos de la exposición y redirección de puertos, algo esencial y que merece un capítulo aparte.


La fuente principal del artículo ha sido la documentación oficial de referencia del proyecto. También recomiendo la lectura del libro «Docker. Guía Práctica» del autor Alberto González.

NOTA: Las imágenes han sido extraídas de la web oficial de Docker.

0 0 votos
Article Rating
Subscribe
Notificarme de
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

2 Comments
más antiguo
más nuevo más votado
Reacciones en línea
Ver todos los comentarios