Ami*_*ani 94 docker docker-compose docker-volume
我有一个开发环境,我是dockerizing,我希望能够重新生成我的更改,而无需重建docker镜像.我正在使用docker compose,因为redis是我应用程序的依赖项之一,我喜欢能够链接redis容器
我有两个容器定义docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Run Code Online (Sandbox Code Playgroud)
我已经在我的node
应用程序的dockerfile中添加了一个卷,但是如何在卷中安装主机的目录,以便我对代码的所有实时编辑都反映在容器中?
这是我当前的Dockerfile:
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <amin@gilani.me>
# 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"]
Run Code Online (Sandbox Code Playgroud)
我的项目看起来像这样:
/
- docker-compose.yml
- node-app.env
- node/
- app.js
- Dockerfile.js
Run Code Online (Sandbox Code Playgroud)
jkr*_*ris 102
查看他们的文档
从它的外观来看,您可以在docker-compose.yml上执行以下操作
volumes:
- ./:/app
Run Code Online (Sandbox Code Playgroud)
Gre*_*Rox 56
有几个选择
使用该host : guest
格式,您可以执行以下任何操作:
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
Run Code Online (Sandbox Code Playgroud)
从docker-compose v3.2开始,你可以使用长语法,它允许配置可以用简短形式表示的其他字段,如mount type
(volume,bind或tmpfs)和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:
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看https://docs.docker.com/compose/compose-file/#long-syntax-3.
小智 11
在 docker-compose.yml 中,您可以使用以下格式:
volumes:
- host directory:container directory
Run Code Online (Sandbox Code Playgroud)
根据他们的文件
如果要在Docker Compose YAML文件/disk1/prometheus-data
的volumes
部分中将特定的主机目录(在以下示例中)作为卷挂载,则可以按以下方式进行操作,例如:
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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,在prometheus的Dockerfile中,您可能会发现以下VOLUME
指令,该指令将其标记为从本地主机等保存外部安装的卷。(但是请注意:该指令不是必须的,但可以将卷安装到容器中。) :
Docker文件
...
VOLUME ["/prometheus"]
...
Run Code Online (Sandbox Code Playgroud)
参考:
我们要创造自己的码头工人体积与映射主机目录之前我们提到的搬运工,compose.yml作为外部
1.创建名为share的卷
docker volume create --driver local \
--opt type=none \
--opt device=/home/mukundhan/share \
--opt o=bind share
Run Code Online (Sandbox Code Playgroud)
2.在你的docker-compose中使用它
version: "3"
volumes:
share:
external: true
services:
workstation:
container_name: "workstation"
image: "ubuntu"
stdin_open: true
tty: true
volumes:
- share:/share:consistent
- ./source:/source:consistent
working_dir: /source
ipc: host
privileged: true
shm_size: '2gb'
db:
container_name: "db"
image: "ubuntu"
stdin_open: true
tty: true
volumes:
- share:/share:consistent
working_dir: /source
ipc: host
Run Code Online (Sandbox Code Playgroud)
这样我们就可以与运行在不同容器中的许多服务共享同一个目录
这是两件事:
我添加了卷docker-compose.yml
:
node:
volumes:
- ./node:/app
Run Code Online (Sandbox Code Playgroud)
我将这些npm install && nodemon app.js
部分移动到了一个部分,CMD
因为RUN
它向Union文件系统添加了内容,而我的卷不是UFS的一部分.
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <amin@gilani.me>
# 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
116151 次 |
最近记录: |