挂载绑定
2020-02-18 本文已影响0人
深圳邱道长
https://docs.docker.com/storage/bind-mounts/
![](https://img.haomeiwen.com/i12729594/975594d942fb0532.jpg)
从图可以看出,绑定挂载,就是挂载了一个本地的文件系统,然后docker可以管理它。
mount使用案例
案例来自docker in action 2th。
![](https://img.haomeiwen.com/i12729594/cd4bdae7994c1725.jpg)
- 通过挂载,NGINX的核心配置来源于宿主机
- 通过挂载,将日志写到了宿主机
touch ~/example.log
touch ~/exmaple.conf
# 下面内容写入~/exmaple.conf
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/custom.host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
继续执行
# 定义一系列的变量,用于引用
CONF_SRC=~/example.conf;
CONF_DST=/etc/nginx/conf.d/default.conf;
LOG_SRC=~/example.log;
LOG_DST=/var/log/nginx/custom.host.access.log;
# 运行
docker run -d --name diaweb --mount type=bind,src=${CONF_SRC},dst=${CONF_DST} --mount type=bind,src=${LOG_SRC},dst=${LOG_DST} -p 80:80 nginx:latest
![](https://img.haomeiwen.com/i12729594/17d400d4aeb128b1.jpg)
检查日志,如果通过
docker logs diaweb
你看不到任何信息,因为日志写入到挂载的文件位置了。
![](https://img.haomeiwen.com/i12729594/cf6fb922293a23cc.jpg)
cat ~/example.log
172.17.0.1 - - [17/Feb/2020:17:02:37 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36 Edg/81.0.416.6" "-"
通过这个案例我们不难发现其实就挂载了这个文件,然后容器将数据可以写到挂载的地方。
--mount type=bind,src=${CONF_SRC},dst=${CONF_DST}
- src是你要挂载的位置,dst是容器当中的位置
我们举个例子
![](https://img.haomeiwen.com/i12729594/702a978637ead806.jpg)
日志的原理也是一样了。而挂载呢,可以是bind,volume或tmpfs。 现在只讨论绑定。
像这个配置文件很重要,不希望容器可以随意修改它。怎么办,只读。
挂载只读
加个参数就可以了。
docker run -d --name diaweb --mount type=bind,src=${CONF_SRC},dst=${CONF_DST},readonly=true --mount type=bind,src=${LOG_SRC},dst=${LOG_DST} -p 80:80 nginx:latest
我们进入该容器试试。
docker exec diaweb /bin/bash
![](https://img.haomeiwen.com/i12729594/b3e49b27fd614caa.jpg)
这下就不能改动啦。