Docker compose:
La teoría:
Vimos que con el verbo build de Docker, podríamos crear imágenes a través de nuestro Docker
engine.
Pero cuando Docker fue creciendo, y la misma comunidad le reclamaba que se quedaban
“cortos” manejando todo por separado, nace Docker-compose.
Docker compose tiende a flexibilixar la definición cuando se trabaja con mas de un
contenedor, y las definiciones de Docker compose se hacen en un formato amigable, que es un
fichero yaml , el mismo que utilizamos para definiciones de ansible, de kubernetes y de
openstack.
Dentro de la plantilla de Docker compose, se encontrarán los siguientes valores
a) Volúmenes a usar
b) Variables de entorno a ser pasadas al momentos de ejecución
c) La lista de imágenes que vamos a usar para correr nuestros contenedores
d) La ruta a nuestros archivos dockerfiles
e) Los puertos que vamos a exponer en nuestro contenedor
f) Las redes que vamos a crear en nuestros contenedores aislados
Compose me soluciona
1) Tener un fichero unificado cuando trabajo con mas de un contenedor
2) Mantener un entorno aislado cuando corren entre ellos
3) Utilizar volúmenes persistentes de una manera sencilla
4) Simplicidad al momento de generar cambios
5) Simplicidad al momento de exportar variables
Compose no me soluciona:
1) No está pensado para entornos de producción , para ello, la solución de Docker es
Docker swarm, o mejor aún, kubernetes/openshift
Como estamos hablando de dockers, la solución que ellos proponen ( Pero que
personalmente a mi no me gusta), es Docker swarm.
Curso de Docker,kubernetes,Openshift Introducción a docker-compose
Instalando Docker-compose:
Como vimos anteriormente, la instalación de Docker compose es bien sencilla.
sudo curl -L
[Link]
-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
Luego le damos los correspondientes permisos de ejecución
sudo chmod +x /usr/local/bin/docker-compose
Y luego, vemos la versión de compose que está corriendo
docker-compose --version
Una vez que lo tenemos instalado, comenzamos
Comenzando con Docker compose:
Una vez que tenemos todo nuestro entorno correctamente configurado, lo que tenemos que
hacer es crear nuestra primer plantilla, la cual la haremos de la manera mas sencilla posible.
Vamos a verla a continuación:
version: "3"
services:
miservicio_mysql:
image: centos/mysql-57-centos7
environment:
- MYSQL_DATABASE=test01
- MYSQL_ROOT_PASSWORD=master
- MYSQL_USER=mguazzardo
- MYSQL_PASSWORD=master
expose:
- 3306
ports:
- 3306:3306
Curso de Docker,kubernetes,Openshift Introducción a docker-compose
Donde:
miservicio_mysql: será el nombre del servicio
centos/mysql-57-centos7: es la imagen a usar
MYSQL_ROOT_PASSWORD: es la variable de entorno de mysql que voy a utilizar
Expose: son los puertos a exponer
Ports: en el caso que haga un port binding, pero no se da en este caso.
Ejecutando esto:
Para poder crear este contenedor, lo que tenemos que hacer, es correr el comando Docker-
compose up -d ( el menos de es para que corra en segundo plano )
root@qqmelo1c:~# docker-compose up -d
Creating network "root_default" with the default driver
Pulling miservicio_mysql (centos/mysql-57-centos7:)...
latest: Pulling from centos/mysql-57-centos7
d8d02d457314: Pull complete
a11069b6e245: Pull complete
596303fb1aa3: Pull complete
a29499e779a7: Pull complete
17d1a52c2e00: Pull complete
ed24591227fe: Pull complete
de0ad46e3ed9: Pull complete
c62e4a984a9c: Pull complete
01d54c6bda68: Pull complete
Digest:
sha256:e08ee4d43b7356607685b69bde6335e27cf20c020f345b6c6c59400183882764
Status: Downloaded newer image for centos/mysql-57-centos7:latest
Creating root_miservicio_mysql_1 ... done
Nota importante:
El comando docker-compose deberá correr dentro del mismo directorio donde tenemos el
[Link]
Luego verificamos si todo lo anterior anduvo bien, con el comando docker-compose ps
root@qqmelo1c:~# docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------
root_miservicio_mysql_1 container-entrypoint run-m ... Up [Link]:3306->3306/tcp
Curso de Docker,kubernetes,Openshift Introducción a docker-compose
Con esto podemos ver que se esta corriendo un servicio root_miservicio_mysql_1, que no deja
de ser un docker, que podemos consultarlo con docker inspect
Voy a pegar una parte de la salida, los últimos renglones, pero hay una en particular que me
gusta, para poder verla.
"Networks": {
"root_default": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"miservicio_mysql",
"56526b237b9c"
],
"NetworkID":
"a4932845572f4587c7783d0e5ca2e63a2db90edb2d2eca2a2d37e0a847dfccb6",
"EndpointID":
"7854c6005179df20157a74d0263268d321179a061eceea1e64517d7232c63b9a",
"Gateway": "[Link]",
"IPAddress": "[Link]",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:02",
"DriverOpts": null
}
}
}
}
]
Ahí vemos la ip, que es la [Link], y como ya sabemos, nos vamos a conectar con el método
del cliente mysql
root@qqmelo1c:~# mysql -u root -pmaster -h [Link]
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.24 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
Curso de Docker,kubernetes,Openshift Introducción a docker-compose
Como podemos ver, pudimos ingresar sin problema.
Borrando el servicio.
Bueno, si ya no queremos tener mas el servicio, desde el directorio donde esta el docker-
[Link], ejecutamos lo siguiente
root@qqmelo1c:~# docker-compose down
Stopping root_miservicio_mysql_1 ... done
Removing root_miservicio_mysql_1 ... done
Removing network root_default
root@qqmelo1c:~#
Y con esto, borramos todos los servicios, tal cual cuando hacemos docker-compose ps, la salida
será
root@qqmelo1c:~# docker-compose ps
Name Command State Ports
------------------------------
Curso de Docker,kubernetes,Openshift Introducción a docker-compose