Docker 数据卷与挂载目录

1、数据卷

数据卷用来保存对容器的修改/数据,可供容器之间共享和重用,数据卷独立于容器,不会随着容器删除而删除。

1)创建数据卷
docker volume create my-vol

提示:默认创建的卷是读写(rw)

2)数据卷列表
docker volume ls
3)查看数据卷具体信息
docker volume inspect my-vol

4)删除卷

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

解释

  1. 若本次镜像没有naginx,则从公共仓库下载一个
  2. 启动 nginx 容器,并将容器的 80 端口映射到 host 的 8002 端口。
  3. 将my-vol卷挂载到容器的/webapp目录

–mount 解释:

  1. type=bind/volume/tmpfs,(省略该字段则默认为volume)
  2. 可使用source/src=本机目录文件,(省略该字段则为匿名卷)
  3. target/destination/dst=容器内的目录。

-p 解释:

  1. 大写的P时,docker会随机映射一个49000~49900的端口到内部容器开发的网络端口
  2. 小写的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

解释

注意:Nginx配置文件中的 mime.types,例如添加允许访问.obj格式的文件