Docker 容器挂载 Volume

  • 特点:Docker管理宿主机文件系统的一部分 /var/lib/docker/volumes 保存数据的最佳方式

多个运行容器之间共享数据
当容器停止或者被移除后,改卷依然存在
多个容器可以同时挂载相同的卷
当明确删除卷时,卷才会被删除
将容器的数据存储在远程主机或其他存储上
将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷目录/var/lib/docker/volumes

  • 创建数据卷

#查看当前主机数据卷
docker volume ls

#使用数据卷 可以先创建数据卷 如果不创建直接指定会自动给创建
#创建数据卷
docker volume create nginx_vol
docker volume ls
docker volume inspect nginx_vol

#查看数据卷目录
[root@cetus volumes]# docker volume inspect nginx_vol
[
    {
        "CreatedAt": "2019-10-05T09:21:40+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx_vol/_data",
        "Name": "nginx_vol",
        "Options": {},
        "Scope": "local"
    }
]
#Mountpoint 地址就是数据实际地址

  • 创建容器和测试

#创建容器 --mount src指定挂载数据卷   dst网站目录
docker run -d --name nginx1 -p 88:80  --mount src=nginx_vol,dst=/usr/share/nginx/html nginx
#docker run -d --name nginx1 -p 88:80  -v nginx_vol:/usr/share/nginx/html nginx

#查看挂载
docker inspect nginx1 | more
"Mounts": [
            {
                "Type": "volume",
                "Name": "nginx_vol",
                "Source": "/var/lib/docker/volumes/nginx_vol/_data",
                "Destination": "/usr/share/nginx/html",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }

#修改index.html 
/var/lib/docker/volumes/nginx_vol/_data
#测试确实文件被修改
http://192.168.10.243:88/

  • 清理

#清理
docker stop nginx1
docker rm nginx1
docker volume rm nginx_vol
#清除卷的时候必须先清理使用卷的容器
#清理卷之后  /var/lib/docker/volumes/nginx_vol/_data 目录中文件就没有了

### Docker 容器挂载数据卷配置教程 #### 1. 数据卷的概念 Docker 默认情况下,当容器停止或删除时,其内部存储的数据会随之消失。为了实现数据的持久化以及方便容器间的数据共享,引入了 **数据卷 (Volume)** 的概念[^1]。 数据卷的主要作用包括: - 将容器运行过程中产生的数据保存至宿主机上,防止因容器销毁而丢失。 - 提供一种机制让不同容器之间能够安全地共享文件或目录。 - 实现宿主机与容器之间的数据交互。 --- #### 2. 创建并挂载数据卷的方式 ##### 使用 `--mount` 参数创建和挂载数据卷 在启动容器时可以通过 `docker run` 命令中的 `--mount` 标记来定义数据卷及其映射关系[^2]。以下是具体语法: ```bash docker run -itd \ --name <容器名> \ --mount source=<数据卷名称>,target=<目标路径> \ <镜像名> ``` 其中: - `<数据卷名称>` 是预先存在的数据卷或者由 Docker 自动创建的新卷; - `<目标路径>` 表示容器内希望绑定此数据卷的具体位置; 例如,下面的例子展示了如何将名为 `myvolume` 的数据卷挂载到新启动的 Nginx 容器 `/usr/share/nginx/html` 路径下: ```bash docker volume create myvolume docker run -dit --name nginx-container --mount source=myvolume,target=/usr/share/nginx/html nginx ``` ##### 利用 `-v` 简便选项完成相同功能 除了上述较为详细的写法外,还可以采用更简洁的形式即 `-v` 来达到同样效果[^3]: ```bash docker run -dit -v /host/path:/container/path image_name ``` 这里直接指定了宿主机上的某个绝对路径 (`/host/path`) 映射给定容器内的相对应地址(`/container/path`)。 如果仅需声明一个新的匿名卷,则只需省略掉前面部分: ```bash docker run -dit -v /container/path image_name ``` 此时,Docker会在后台自动建立相应的存储空间位于默认位置(`/var/lib/docker/volumes/.../_data`)之中. --- #### 3. 查看已存在数据卷状态 要查看当前系统中存在的所有 volumes 及它们的状态信息,可执行如下指令: ```bash docker volume ls ``` 对于特定的一个volume详情查询则适用命令: ```bash docker inspect <VOLUME_NAME> ``` 这有助于管理员确认各个volume的实际物理存放地点以及其他属性设置情况等重要参数值. --- #### 4. 删除不再使用的数据卷 一旦某些项目结束之后,那些曾经关联过的但如今已经没有任何活动进程依赖着它的Volumes就应该被清理掉了以免占用不必要的磁盘资源. 可以单独针对某几个指定的目标实施操作亦或是批量处理整个环境下的闲置对象们: 单删模式: ```bash docker volume rm <VOLUME_NAME> ``` 全量扫描+移除无主者组合拳出击: ```bash docker volume prune ``` 以上两种方式均能有效减少冗余负担提升整体性能表现水平的同时也保障了长期维护工作的顺利开展下去. --- ### 常见问题解答 Q: 如果忘记提前规划好需要用到哪些外部设备怎么办? A: 不必担心!即使是在实例已经开始正常运作期间也是允许随时动态调整增加额外附加组件进去的哦~只需要重新调用对应的API接口函数即可轻松搞定一切事务啦! Q: 怎样判断我的应用到底有没有成功连接上了预期设定好的那个地方呢? A: 这个时候就可以借助于日志记录分析工具来进行深入挖掘探索真相咯!通过观察程序输出的日志消息里面关于访问路径方面的描述内容就能得出结论来了! Q: 当遇到权限不足无法读取写入等问题该如何应对解决办法有哪些可用措施可供选择考虑采纳实践运用尝试一下看看效果怎样吧朋友们!!! A: 首先应该检查双方各自的SELinux标签是否匹配一致;其次再核实UID/GID数值范围区间是否存在冲突矛盾之处最后记得赋予足够的权利许可授权才行呀亲们😊 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值