Tabla de contenido
- 1 1- ¿Qué es docker?
- 2 2- ¿Qué ventajas tiene?
- 3 3- ¿Cómo puedo utilizarlo?
- 4 4- Comandos útiles
¡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
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 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!