¿Cómo monto un directorio de host como un volumen en Docker Compose?
Tengo un entorno de desarrollo que estoy acoplando y me gustaría poder recargar mis cambios sin tener que reconstruir las imágenes de la ventana acoplable. Estoy usando Docker Compose porque Redis es una de las dependencias de mi aplicación y me gusta poder vincular un contenedor de Redis.
Tengo dos contenedores definidos en mi docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Llegué al punto en node
el archivo acoplable de mi aplicación donde agrego un volumen, pero ¿cómo monto el directorio del host en el volumen para que todas mis ediciones en vivo del código se reflejen en el contenedor?
Aquí está mi Dockerfile actual:
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <[email protected]>
# Install nodemon
RUN npm install -g nodemon
# Add a /app volume
VOLUME ["/app"]
# TODO: link the current . to /app
# Define working directory
WORKDIR /app
# Run npm install
RUN npm install
# Expose port
EXPOSE 8080
# Run app using nodemon
CMD ["nodemon", "/app/app.js"]
Mi proyecto se ve así:
/
- docker-compose.yml
- node-app.env
- node/
- app.js
- Dockerfile.js
Consulta su documentación
Por lo que parece, podrías hacer lo siguiente en tu docker-compose.yml
volumes:
- ./:/app
¿Dónde ./
está el directorio de host y /app
el directorio de destino de los contenedores?
EDITAR:
La fuente de documentación anterior ahora conduce al historial de versiones, tendrás que seleccionar la versión de Compose que estás usando y buscar la referencia.
Para los perezosos – v3 / v2 / v1
Nota al margen: la sintaxis sigue siendo la misma para todas las versiones a partir de esta edición
Hay algunas opciones
Sintaxis corta
Usando el host : guest
formato puedes hacer cualquiera de las siguientes cosas:
volumes:
# Just specify a path and let the Engine create a volume
- /var/lib/mysql
# Specify an absolute path mapping
- /opt/data:/var/lib/mysql
# Path on the host, relative to the Compose file
- ./cache:/tmp/cache
# User-relative path
- ~/configs:/etc/configs/:ro
# Named volume
- datavolume:/var/lib/mysql
Sintaxis larga
A partir de docker-compose v3.2, puede usar una sintaxis larga que permite la configuración de campos adicionales que se pueden expresar en forma corta, como mount type
(volume, bind o tmpfs) y read_only
.
version: "3.2"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- type: volume
source: mydata
target: /data
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
networks:
webnet:
volumes:
mydata:
Consulte https://docs.docker.com/compose/compose-file/#long-syntax-3 para obtener más información.
Si desea montar un directorio de host en particular ( /disk1/prometheus-data
en el siguiente ejemplo) como un volumen en la volumes
sección del archivo YAML de Docker Compose, puede hacerlo de la siguiente manera, por ejemplo:
version: '3'
services:
prometheus:
image: prom/prometheus
volumes:
- prometheus-data:/prometheus
volumes:
prometheus-data:
driver: local
driver_opts:
o: bind
type: none
device: /disk1/prometheus-data
Por cierto, en el Dockerfile de Prometheus, puede encontrar las VOLUME
instrucciones que se muestran a continuación, que lo marcan como volúmenes montados externamente desde el host nativo, etc. (Sin embargo, tenga en cuenta: esta instrucción no es obligatoria para montar un volumen en un contenedor). :
archivo acoplable
...
VOLUME ["/prometheus"]
...
Árbitros:
- https://docs.docker.com/compose/compose-file/compose-file-v3/#driver
- https://docs.docker.com/compose/compose-file/compose-file-v3/#driver_opts