挂载绑定

2020-02-18  本文已影响0人  深圳邱道长

https://docs.docker.com/storage/bind-mounts/

image-20200218004657709

从图可以看出,绑定挂载,就是挂载了一个本地的文件系统,然后docker可以管理它。

mount使用案例

案例来自docker in action 2th。

image-20200218010427984
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

访问http://localhost

image-20200218010245857

检查日志,如果通过

docker logs diaweb

你看不到任何信息,因为日志写入到挂载的文件位置了。

image-20200218010636024
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}

我们举个例子

image-20200218011235214

日志的原理也是一样了。而挂载呢,可以是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
image-20200218012013155

这下就不能改动啦。

上一篇 下一篇

猜你喜欢

热点阅读