Docker Compose¶
Información oficial -> aquí
Es para aplicaciones multicontenedor.
La nomenclatura que se sigue a la hora de nombrar el fichero es docker-compose-<nombre>.yml
, y su formato es YAML
. Si no se especifica nada, el fichero tiene que llamarse docker-compose.yml
.
Instalación de Docker Compose¶
Información oficial -> aquí
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose up
- Levantar contenedores con docker-compose¶
docker-compose up [<opciones>] [--scale <servicio>=<numero-instancias>] [<servicio1> <servicio2> ...]
Con este comando lanza docker-compose y ejecuta el fichero por defecto docker-compose.yml
.
Si queremos que levante un fichero docker-compose especifico, hacemos
docker-compose down
- Parar y eliminar todo lo que ha hecho docker-compose¶
Estructura¶
Tiene cuatro secciones:
version
-> Indica la version de Docker-Compose que se va a usar (poner'3'
a menos que).- Es OBLIGATORIA
services
-> Son los distintos servicios / contenedores que se van a crear- Es OBLIGATORIA
volumes
-> opcionalnetworks
-> opcional
Un ejemplo con un contenedor de nginx. Si fuera por comandos haríamos
Con docker-compose
Y para lanzarlo
Para eliminar todo lo que ha hecho el anterior fichero hacemos
services¶
container_name
-> Nombre del contenedorimage
-> Imagen con la que se va a crearbuild
-> Ruta hasta elDockerfile
usar una imagen propia
Versión corta
Versión extendida
command
-> Mandarle un comando, sobreescribiendo el delDockerfile
(si lo hubiera).ports
-> Exponer los puertosrestart
-> Política de reinicio (información aquí)no
-> Por defecto.on-failure
-> Reiniciar el contenedor si hay un error.always
-> Reiniciar si el contenedor se para (si se ha parado a mano, se reiniciará cuando se reinicie el demonio de docker).unless-stopped
-> Parecido aalways
pero no se reinicia cuando se reinicia el demonio de docker.
volumes¶
version: "3.2"
services:
web:
image: nginx:alpine
volumes:
- type: volume
source: mydata
target: /data
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
db:
image: postgres:latest
volumes:
- "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
- "dbdata:/var/lib/postgresql/data"
volumes:
mydata:
dbdata: