Establecer un nombre de contenedor para poder gestionar los contenedores independientemente de la carpeta padre.
services:
app1:
image: thecocktail/ruby-base:2.3.3
container_name: app1
Utilizar healthchecks para verificar el estado de los contenedores
services:
db:
image: 'mysql:5.6'
environment:
MYSQL_ROOT_PASSWORD: password
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
Usar usuarios que no sean root. Esto se puede gestionar desde el dockerfile o desde el docker-compose. De este modo el contenedor se levantará con el UID del usuario que lo ejecute.
services:
app1:
image: thecocktail/ruby-base:2.3.3
container_name: app1
user: "${UID}:${GID}"
$ UID=${UID} GID=${GID} docker-compose up
Marcar las dependencias entre los contenedores para que en caso de arrancar solo uno, se arranquen sus dependencias.
services:
app1:
image: thecocktail/ruby-base:2.3.3
depends_on:
- db
db:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: password
Si los contenedores de un docker-compose tienen que conectarse a los contenedores de otro docker-compose, gestionarlo mediante networks y no contra conexiones a puertos de localhost.
Crear la red de travesía:
docker network create app-net
services:
app1:
image: thecocktail/ruby-base:2.3.3
container_name: app1
networks:
- app-net
networks:
app-net:
external:
name: app-net
services:
app2:
image: thecocktail/ruby-base:2.3.3
container_name: app2
networks:
- app-net
networks:
app-net:
external:
name: app-net
Si se van a ejecutar comandos desde consola en el Docker, es recomendable habilitar el tty y el stdin_open.
services:
app1:
image: thecocktail/ruby-base:2.3.3
Container_name: app1
stdin_open: true
tty: true
A no ser que se le quieran pasar ficheros o directorios existentes a Docker, utilizar la gestión de volúmenes de Docker.
services:
db:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db:/var/lib/mysql
volumes:
db: