Cómo empezar con docker

¡Hola! Llevaba tiempo queriendo hacer este artículo sobre como empezar con docker.

Te agradecemos que compartas este artículo en tus redes sociales y/o dejes un comentario.

¡Empezamos!

1- ¿Qué es docker?

Hay gente que considera que docker es un sistema de virtualización como KVM, Vmware, etc. Esto es falso. Docker es un sistema de contenedores como LXC pero mas avanzado. Tiene mejor gestión de las instancias levantadas y tiene un sistemade gestión plantillas.

Es decir, docker es un sistema para abstraer la aplicación y hacer su ecosistema independiente del sistema operativo. Haciendo que todo lo configurado dentro de un contenedor se ejecute correctamente en cualquier sistema operativo con docker instalado.

2- ¿Qué ventajas tiene?

Las ventajas son varias dependiendo de con que lo comparemos.

Si lo comparamos con ejecutar aplicaciones en un sistema directamente, la principal ventaja es la compatibilidad, ya que lo que se ha probado en el contenedor, en el mismo contenedor de otro sistema funcionará igual.

Si nos referimos a ventaja respecto a utilizar una virtualización completa, principal ventaja es que cada contenedor utiliza prácticamente la memoria de la aplicación  mientras que una instancia de KVM, Vmware, etc requiere también  consumo de memoria para el kernel del sistema virtual, etc

Otra ventaja es que se pueden ejecutar aplicaciones como si tuviésemos otro sistema distinto. Es decir, en el sistema anfitrión tenemos un sistema CentOS por ejemplo y en el contenedor podemos tener, Free BSD o Debian, o Arch o cualquier otro. Por lo que si en un sistema funciona mejor que en el anfitrión podemos utilizar esta ventaja.

3- ¿Cómo puedo utilizarlo?

Bien se puede utilizar para crear entornos de desarrollo y luego subir el contenedor a producción (hay que tener en cuenta que antes de poner nada en producción con docker se debe securizar el anfitrión y el contenedor para evitar problemas). Así podemos evitar problemas en despliegues de códigos

Lo primero es instalar docker. En CentOS se hace de la siguiente forma: #yum install docker -y

Instalacion docker CentOS

En debian y derivados: #apt install docker.io

Después de instalarlo, si es un sistema moderno, basado en systemd, levantamos el servicio: #systemctl start docker

Si no tiene systemd, ejecutamos: #service docker start

4- Comandos útiles

Arrancar contenedores (aunque no se hayan descargado la imágenes):

docker run -i -t -d   IMAGEN:VERSION

Donde la imagen y la versión se pueden especificar así:

docker run -i -t -d   centos:latest

Podemos definir un nombre para el contenedor con –name NOMBRE

[root@localhost ~]# docker run -i -t -d --name testing debian:9
Unable to find image 'debian:9' locally
Trying to pull repository docker.io/library/debian ... 
9: Pulling from docker.io/library/debian
54f7e8ac135a: Pull complete 
Digest: sha256:df6ebd5e9c87d0d7381360209f3a05c62981b5c2a3ec94228da4082ba07c4f05
Status: Downloaded newer image for docker.io/debian:9
b6f568b78470b417b8a141f4b7c5686420df7cc1050402239ab1847310a67116
[root@localhost ~]# 

Se puede especificar un puerto que será redirigido desde la maquina anfitrión al contenedor:

docker run -i -t -d -p PUERTO_EXTERIOR:INTERIOR IMAGEN

O también se puede hacer especificando la ip del anfitrion:

docker run -i -t -d -p IP_ANFITRION:PUERTO_EXTERIOR:INTERIOR IMAGEN

Añadiendo «–restart always» a la ecuación, se consigue que siempre que se pare el contenedor, se reinicie. Incluso en el reinicio del anfitrión:

docker run -i -t -d -p PUERTO_EXTERIOR:INTERIOR --restart always IMAGEN

Para crear un contenedor y no levantarlo de forma inmediata:

docker create -i -t centos:6 /bin/bash

Descargar imagenes y gestionarlas

Para descargar una imagen y tenerla disponible a la hora de levantar un nuevo contenedor sin tener que esperar a que se descargue de docker-hub, solamente tenemos que hacer lo siguiente:

docker pull IMAGEN:VERSION

O también:

docker pull IMAGEN

Por ejemplo:

#Eligiendo version
docker pull centos:7
#o seleccionando la ultima disponible
docker pull centos:latest

También podemos ver las imágenes disponibles en local ejecutando:

docker images

Por ejemplo:

ger@portatil$ sudo docker images
[sudo] contraseña para ger: 
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
debian                                      9                   4879790bd60d        9 days ago          101MB
ubuntu                                      18.04               ea4c82dcd15a        5 weeks ago         85.8MB
centos                                      6                   0cbf37812bff        6 weeks ago         194MB
centos                                      7                   75835a67d134        6 weeks ago         200MB
ubuntu                                      17.04               fe1cc5b91830        11 months ago       95.6MB

Podemos buscar las imágenes disponibles en docker hub:

ger@portatil$ sudo docker search ubuntu
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                 Ubuntu is a Debian-based Linux operating sys…   8793                [OK]                
dorowu/ubuntu-desktop-lxde-vnc                         Ubuntu with openssh-server and NoVNC            244                                     [OK]
rastasheep/ubuntu-sshd                                 Dockerized SSH service, built on top of offi…   184                                     [OK]
consol/ubuntu-xfce-vnc                                 Ubuntu container with "headless" VNC session…   136                                     [OK]
ansible/ubuntu14.04-ansible                            Ubuntu 14.04 LTS with ansible                   95                                      [OK]
ubuntu-upstart                                         Upstart is an event-based replacement for th…   92                  [OK]                
neurodebian                                            NeuroDebian provides neuroscience research s…   55                  [OK]                
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          47                                      [OK]
ubuntu-debootstrap                                     debootstrap --variant=minbase --components=m…   40                  [OK]                
nuagebec/ubuntu                                        Simple always updated Ubuntu docker images w…   23                                      [OK]
tutum/ubuntu                                           Simple Ubuntu docker images with SSH access     18                                      
i386/ubuntu                                            Ubuntu is a Debian-based Linux operating sys…   15                                      

 

Podemos importar una imagen personalizada: docker import /path/to/exampleimage.tgz:

[root@localhost ~]# docker import /tmp/debian-personalizado.tgz
[root@localhost ~]#

Ver el estado de los contenedores y sus datos

Para ver los contenedores creados y su estado actual solo tenemos que ejecutar:

docker ps -a

Por ejemplo:

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
b6f568b78470        debian:9            "bash"              About a minute ago   Up About a minute                       testing
[root@localhost ~]# 

Para levantar una maquina solo tenemos que ejecutar docker start ID-DEL-CONTENEDOR el ID lo podemos encontrar ejecutando docker ps -a :

[root@localhost ~]# docker start b6f568b78470
b6f568b78470
[root@localhost ~]#

 

Gestionar contenedores

Para parar un contenedor docker stop id-del-container:

[root@localhost ~]# docker stop b6f568b78470
b6f568b78470
[root@localhost ~]#

Y para eliminar un contenedor docker stop id-del-container:

[root@localhost ~]# docker rm b6f568b78470
b6f568b78470
[root@localhost ~]#

Podemos hacer una copia de un contenedor ejecutando: docker export -o filesystem.tar ID_DE_CONTAINER:

[root@localhost ~]# docker export -o filesystem.tar b6f568b78470
[root@localhost ~]#

 

Podemos acceder a una consola del contenedor: docker exec -it «id of running container» bash:

[root@localhost ~]# docker exec -it b6f568b78470 bash
[root@b6f568b78470 ~]#

 

 

Si estás interesado en aprender Docker puedes puedes adquirir nuestro libro aquí.

Docker para novatosDocker para novatos

 

Y esto ha sido todo sobre como empezar con docker, en un siguiente post, trataremos sobre como manejar docker con python.

Recuerda que si te ha gustado este post te agradecemos que compartas en tus redes sociales y/o comentes la publicación.

¡Nos vemos!

Deja una respuesta