run - ¿Cómo monte un directorio de host como un volumen en Docker compose?
docker tag (4)
Tengo un entorno de desarrollo que estoy acoplando y me gustaría poder volver a cargar mis cambios en vivo sin tener que reconstruir las imágenes de acoplador. 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 el dockerfile de mi aplicación de nodo 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
Eran dos cosas:
docker-compose.yml
el volumen en
docker-compose.yml
:
node:
volumes:
- ./node:/app
npm install && nodemon app.js
las
npm install && nodemon app.js
a un
CMD
porque
RUN
agrega cosas al Sistema de archivos de la Unión, y mi volumen no es parte de UFS.
# 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"]
# Define working directory
WORKDIR /app
# Expose port
EXPOSE 8080
# Run npm install
CMD npm install && nodemon app.js
Hay algunas opciones
Sintaxis Corta
Usando el
host : guest
formato de
host : guest
puede hacer lo siguiente:
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 abreviada, como el
mount type
(volumen, enlace 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 particular (
/disk1/prometheus-data
en el siguiente ejemplo) como un volumen en la sección de
volumes
del archivo Docker Compose YAML, 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
Refs:
Verifique su documentation
Por lo que parece, puede hacer lo siguiente en su docker-compose.yml
volumes:
- ./:/app