= docker-compose
gestor de despliegue de contenedores
== instalación
/via: [[https://docs.docker.com/compose/install/#install-compose]]
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
==yaml
user:mate
curso:docker
user:
nombre: mate
curso: docker
anyo: 2018
cursos:
- elemento1
- elemento2
- elemento3
cursos:
clave=valor
== docker-compose.yml
version:'3.6'
services:
webapp:
image: httpd:alpine
bd:
image: mongo
== ejecución
# lanza (previa descarga si no estuviese) los contenedores indicados en el .yml
docker-compose up
# en modo detach
docker-compose up -d
== comandos
* ''docker-compose ps'' : solo muestra los contenedores gestionados por docker-compose (y no todos como lo haríamos a través de ''docker ps'')
* ''docker-compose ps --services'' : lista los "servicios" definidos en el .yml
* ''docker-compose logs''
* ''-f'' : actualización continua
* '''' : filtra por servicio (contenedor)... me es igual como se llamen los contenedores
* ''docker-compose stop'' : para todos los servicios definidos en .yml
* '''' : solo para ese servicio
== más docker-compose.yml
version:'3.6'
services:
webapp:
image: httpd:alpine
depends_on: bd
bd:
image: mongo
esto nos asegura que se lanzará primerdo **bd**, pero igual no con la suficiente cantidad de tiempo
version: '3.6'
services:
elasticsearch:
image: elasticsearch
kibana:
image: kibana
ports:
- 5601:5601
== comandos
* ''docker-compose start'' : idem up
* ''docker-compose down'' : elimina todo lo relacionado con el .yaml -> containers, volúmenes, redes...
* ''docker-compose config'' : verifica el fichero .yml
* ''-q'' : poco verboso
* ''--services'' : muestra servicios
* ''--volumes'' : muestra volúmenes
* ''docker-compose exec '' : conexión al contenedor
* ''docker run -it ''
* ''docker-compose images''
* ''-q''
== docker-compose.yml
se puede modificar el fichero mientras están los contenedores, aunque no le gusta si se tocan volumenes... mejor parar y volver a lanzarlo. Se puede dar el caso que no permita, a través de docker-compose, parar o modificar los contenedores en ejecución
version:'3.6'
services:
webapp:
build: path_to_Dockerfile
bd:
image: mongo
si modificamos el Dockerfile, deberemos usar ''docker-compose up --build'' para recrear la imagen. Si docker-compose tiene las imágenes creadas, no las re-creará
hay que mirar los apuntes de Dani para completar corretamente este apartado
version:'3.6'
services:
webapp:
build:
context: .
¿file?: Dockerfile
environment: # mapa o lista
- ENTORNO=pre
env_file:
- ./.env
- ./common.env
labels:
VERSION: 1
restart: always
links: # deprecated -> para reconocimiento de equipos en la red default
external_links # está en otro "docker-composer"
networks: # las gestiona docker-composer, pero si si aún así necesitamos una
- app
bd:
image: mongo
networks:
app:
external:
name:
CLAVE=VALOR