Docker 数据卷与挂载目录
1、数据卷
数据卷用来保存对容器的修改/数据,可供容器之间共享和重用,数据卷独立于容器,不会随着容器删除而删除。
1)创建数据卷
docker volume create my-vol
提示:默认创建的卷是读写(rw)
2)数据卷列表
docker volume ls
3)查看数据卷具体信息
docker volume inspect my-vol
4)删除卷
- 若有容器在挂载着它,删除时,会提示失败的信息,因此需要删除挂载它的所以容器;
- 删除容器,不会自动删除数据卷,卷的生命周期独立于容器的生命周期外。
- 如果volume卷 没有手动被创建,它将会在首次挂载到某个容器之前被自动创建**,当容器被停止或删除时,这个volume不会随之被删除。多个容器可以同时以rw或ro的方式挂载这个volume。只有手动指定删除volume,它才会被删除。
docker volume rm my-vol
删除所有未被使用的卷
docker volume prune
5)启动一个容器并挂载一个数据卷到容器的/webapp目录
开放Linux端口
firewall-cmd --zone=public --add-port=8001/tcp --permanent
重启防火墙
firewall-cmd --reload
创建并运行一个nginx容器,并挂载了my-vol卷
docker run -d -p 8002:80 --name nginx --mount source=my-vol,target=/webapp nginx
解释:
- 若本次镜像没有naginx,则从公共仓库下载一个
- 启动 nginx 容器,并将容器的 80 端口映射到 host 的 8002 端口。
- 将my-vol卷挂载到容器的/webapp目录
–mount 解释:
- type=bind/volume/tmpfs,(省略该字段则默认为volume)
- 可使用source/src=本机目录文件,(省略该字段则为匿名卷)
- target/destination/dst=容器内的目录。
-p 解释:
- 大写的P时,docker会随机映射一个49000~49900的端口到内部容器开发的网络端口
- 小写的p时,指定要映射的端口号,映射到容器的端口,改宿主的端口一旦绑定给一个容器后,不能再绑定给其他容器。
提示:-v命令与–mount命令区别:
①如果本地数据卷或者本地目录尚未创建,-v命令则会自动创建,–mount则会报错。
②如果是容器里的目录不存在,两者都会自动创建。
6)测试一下两个容器通过数据卷来数据共享
注意:数据卷仅仅保存挂载目录里的数据
容器一:
进入上面我们刚刚创建的nginx容器,到挂载的目录下创建一个文件test
docker exec -it nginx bash cd webapp/ touch test
容器二:
docker run -d -p 8003:80 --name nginx2 --mount src=my-vol,target=/mywebapp nginx
进入nginx2容器,到挂载目录下查看是否有test文件
docker exec -it nginx2 bash cd mywebapp/ ls
2、挂载目录到容器
应用场景,比如将源代码目录 mount 到容器中,在 host 中修改代码就能看到应用的实时效果。再比如将 mysql 容器的数据放在 bind mount 里,这样 host 可以方便地备份和迁移数据。
一般源文件\安装包文件存放在usr/local/src/下,软件安装在、usr/local/下面
创建本地目录,并添加一个html文件
cd /usr/local/ mkdir myweb1 vim index.html
开放防火墙端口
firewall-cmd --zone=public --add-port=8004/tcp --permanent
重启防火墙
firewall-cmd --reload
1)注意检查挂载的路径和文件是否创建
2)注意检查挂载的文件或目录,挂载的目标是否一致,即挂载源是文件,挂载的目标是文件而不能是文件夹
创建并运行容器
docker run -d -p 8004:80 --name=nginxtest \ --mount type=bind,source=/usr/local/myweb1,destination=/usr/share/nginx/html \ nginx:latest
进入该容器,查看目录结构。exit or ctrl+d 退出bash。
docker exec -it nginxtest /bin/bash ls
将/usr/share/nginx/html/index.html 拷贝到宿主机/usr/html/index.html
docker cp
容器id:
/usr/share/nginx/html/index.html /usr/html/index.html
查看下文件内容
vim /usr/html/index.html
解释:
- 将宿主机上的/usr/local/myweb1文件夹挂载到容器中的/usr/share/nginx/html文件夹
- 挂载成功后,容器从/usr/share/nginx/html目录下读取或写入数据,实际上都是从宿主机的 /usr/local/myweb1目录中读取或写入数据。
注意:Nginx配置文件中的 mime.types,例如添加允许访问.obj格式的文件