数据卷与挂载目录

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格式的文件