Estoy seguro de que en más de una ocasión te has encontrado en alguna de las siguientes circunstancias:
1- Por la vía que sea, has descubierto una nueva aplicación, lenguaje, framework,.. que te apetece probar, pero la instalación de esta herramienta requiere de instalar otras, ya sea un JDK determinado, un nuevo gestor de bases de datos, diferentes frameworks, y un largo etc…
2- Quieres desarrollar un proyecto que tiene unos requisitos muy concretos, y tu equipo de desarrollo, es probable que no todos tengan las mismas especificaciones en sus equipos y no digamos que sean las mismas que las de producción.
3.- Queremos lanzar un proyecto en el que se precisa trabajar con aplicaciones que requieren configuraciones de software diferentes. Por ejemplo versiones diferentes de JVM…
Pese a que todos estos problemas tienen diferentes soluciones, a todas estas situaciones y alguna más, existe un en común y se llama Docker.
¿Qué es Docker?
Para hacer un simil con el que se pueda entender muy facilmente, docker es a una aplicación lo que un software de virtualización a un equipo.
Es decir, Docker, crea unos paquetess de software llamados contenedores con todo lo necesario para el funcionamiento del software que queramos hacer funcionar, incluyendo librerias, software, requisitos de sistema, etc… sin necesidad de tener que virtualizar toda una máquina con su sistema operativo.
De esta manera, se consigue que estos contenedores, precisen de muy pocos recursos, que sean muy ligeros y seguros.
vale, y ahora ¿Como lo utilizo?
Lo más fácil para empezar, es descargarse la aplicación Docker Desktop que encontrarás aquí.
La aplicación de docker desktop es quizás la manera más facil de iniciarse con docker, es una interfaz muy sencilla que muestra las imágenes que tenemos instaladas y con un simple click permite arrancarlas y pararlas.
Docker Hub
Docker hub es un repositorio gratuito similar a github en el que se pueden publicar las imágenes docker. En este repositorio podemos encontrar millones de imágenes organizadas por utilidad, versión, si es oficial o no, etc… Y sobretodo donde podemos subir nuestras propias imágenes.
En Docker Hub podemos buscar imágenes de una o varias aplicaciones que queramos lanzar con docker y descargarnoslas. A continuación, podemos interactuar con ellas a través de los diferentes comandos que ofrece docker.
Comandos básicos docker
Docker viene con muchos comandos que se pueden ejecutar en terminal ya sea desde Windows, Linux o Mac. Aquí tienes la guia de referencia de los comandos de docker, y a continuación voy a listar los más interesantes.
docker images: Comando que muestra las imágenes que tenemos instaladas
docker images
~ $docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest 6d11486a97a7 2 weeks ago 388MB
mongo-express latest a8b1009dd4b2 3 weeks ago 129MB
aperezgari/bigdata_uoc latest eb8144399fee 2 months ago 15.1GB
metabase/metabase latest 97c567939017 3 months ago 361MB
docker pull: Tal como se ha visto en el punto anterior, en docker hub existen millones de repositorios con imágenes que se pueden obtener y descargar en nuestro sistema. El comándo básico para obtener una imágen. es docker pull.
docker pull <ID_IMAGEN>
~ $docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
6ec8c9369e08: Pull complete
177e5de89054: Pull complete
ab6ccb86eb40: Pull complete
e1ee78841235: Pull complete
09cd86ccee56: Pull complete
78bea0594a44: Pull complete
caf5f529ae89: Pull complete
cf0fc09f046d: Pull complete
4ccd5b05a8f6: Pull complete
76d29d8de5d4: Pull complete
8077a91f5d16: Pull complete
922753e827ec: Pull complete
Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
docker rmi: Este comando nos permite borrar de nuestro equipo una imágen que no queramos. Para ello podemos ejecutarlo con el nombre de la imágen o con el IMAGE ID.
docker rmi <ID_IMAGEN>
~ $docker rmi mysql
Untagged: mysql:latest
Untagged: mysql@sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc
Deleted: sha256:e3fcc9e1cc046c92cfcea0d66cdb00fcb7747e87dde96dfc958bd80be37af117
Deleted: sha256:7a1c5c1a40dad78bacb211ec3d7918acdd78a76185fd33a167260c3e51e97fa4
Deleted: sha256:abb5f0f890ba2f327d30b5ca1bbc35584bc6357c8d6f4bdc2e4637cce2ea9a35
Deleted: sha256:919c56fc8230b0ddf8580e0a58d34ae1c5e48069d9b48cc41ae7a1cae82bb60e
Deleted: sha256:962d6891622cf4a7e8932f6c76b2c2f3ab9cecb8aad71d55adacc2aece6b0181
Deleted: sha256:ab26019b1328bff5ea5132b5e3f52b9fd3808e734f1a39141fb9e5da561200e2
Deleted: sha256:06bd523b11319c8177ab2003cb31b296cea22b0201bf8ae987ac300118a0654f
Deleted: sha256:a8681d5c66889e97303be147d30eb8ec4b0bd5bc0e2c774b4d94f52ec23c4649
Deleted: sha256:c28ab987d3964139dcd3852e1c10ef0a425d2705c71a3b68b411460279d8535d
Deleted: sha256:c0fc32d1072662668dd59842d893e5ee125c1958931ae84630132b7bb6c09198
Deleted: sha256:da0ebf91b8bc2d545dbe73cbf9b7c7b25df71033f5057133a445e9c33a36ec7d
Deleted: sha256:483d8f607b803b5e3d3f97adbad3b0e692670f223b2529ecae5d04888c29ad5d
Deleted: sha256:95ef25a3204339de1edf47feaa00f60b5ac157a498964790c58c921494ce7ffd
docker history: muestra el historial de una imagen, es ecir, los ultimos cambios que ha sufrido esta.
docker history <ID_IMAGEN>
~ $docker history mysql
IMAGE CREATED CREATED BY SIZE COMMENT
e3fcc9e1cc04 6 days ago /bin/sh -c #(nop) CMD ["mysqld"] 0B
<missing> 6 days ago /bin/sh -c #(nop) EXPOSE 3306 33060 0B
<missing> 6 days ago /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B
<missing> 6 days ago /bin/sh -c ln -s usr/local/bin/docker-entryp… 34B
<missing> 6 days ago /bin/sh -c #(nop) COPY file:7cbb26bbdb8e71b3… 13.2kB
<missing> 6 days ago /bin/sh -c #(nop) COPY dir:2e040acc386ebd23b… 1.12kB
<missing> 6 days ago /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0B
<missing> 6 days ago /bin/sh -c { echo mysql-community-server m… 409MB
<missing> 6 days ago /bin/sh -c echo "deb http://repo.mysql.com/a… 55B
<missing> 6 days ago /bin/sh -c #(nop) ENV MYSQL_VERSION=8.0.21-… 0B
<missing> 6 days ago /bin/sh -c #(nop) ENV MYSQL_MAJOR=8.0 0B
<missing> 6 days ago /bin/sh -c set -ex; key='A4A9406876FCBD3C45… 2.61kB
<missing> 6 days ago /bin/sh -c apt-get update && apt-get install… 52.2MB
<missing> 6 days ago /bin/sh -c mkdir /docker-entrypoint-initdb.d 0B
<missing> 6 days ago /bin/sh -c set -eux; savedAptMark="$(apt-ma… 4.17MB
<missing> 6 days ago /bin/sh -c #(nop) ENV GOSU_VERSION=1.12 0B
<missing> 6 days ago /bin/sh -c apt-get update && apt-get install… 9.34MB
<missing> 6 days ago /bin/sh -c groupadd -r mysql && useradd -r -… 329kB
<missing> 7 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 7 days ago /bin/sh -c #(nop) ADD file:6ccb3bbcc69b0d44c… 69.2MB
docker run: nos permite crear un contenedor a partir de una imagen que tengamos descargada. De todas las opciones de este comando, la que me parece más interesante es -p, que nos permite asociar un puerto local de nuestra máquina con un puerto del container, para poder comunicarnos con el. Otra opción a tener en cuenta es –name que nos permite definir un nombre al container en lugar de poner uno alatorio. Y por último la opción -d (detach) que arranca el container en ‘background’ permitiendonos recuperar la consola cuando se ha ejecutado el comando.
~ $docker run -p 27017:27017 --name mongodb2 -d mongo
5b6f1822ccebb95d00b9482406dceba96b5be11f2eca25d9da29efb81569834f
docker ps: hace una lista con los contenedores que se encuentran activos. Además añadiendo el parámetro -a muestra todos, incluidos los no activos.
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b6f1822cceb mongo "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:27017->27017/tcp mongodb
docker start: arranca un container que ya tengamos creado.
~ $docker start mongodb2
mongodb2
Conclusión
No me cabe duda de que Docker es una revolución en la gestión de proyectos. Las opciones que nos ofrece en cuanto a facilidad de crear entornos de desarrollo, compartirlos, y enviar a producción son infinitas.
En este post he intentado incluir las caraterísticas y opciones más comunes de docker, pero queda pendiente hablar de compose y de kubernetes que lo haré en breve.
Debe estar conectado para enviar un comentario.