Docker容器中Data volumes详解

Data volumes可以视为容器中的一种特殊的文件路径,用以保存与容器实例生命周期无关的共享数据。

1. Data volumes的特性

  • 在容器创建的时候初始化
  • 作为文件系统的一部分,但是不受Union File System的管理;
  • 便于持久化存储数据和共享数据
  • Data volumes的数据是持久化的,删除容器不影响Data volumes的数据
  • 对Data volumes的操作立刻直接生效
  • 可以在多个容器之间共享

 

2. 根据Data volumes定义的方式不同,可以分为如下3种:

 

  • Dockerfile中定义的固定Data volumes
  • docker run -v定义的临时Data volumes
  • docker run --volumes-from定义的公共共享Data volumes

 

3. Data volumes的用法
 

1) 在Dockerfile中,使用VOLUME语句直接将Data volumes添加到镜像中

 

VOLUME /path/in/container
VOLUME ["/etc/gitlab", "/var/opt/gitlab", "/var/log/gitlab"]

可以在一个VOLUME语句中声明多个Data volumes。

 

 

2) 在容器启动时,通过-v /path/to/volume参数为容器指定一个或多个Data volumes

  • 为已有的容器添加一个Data volume

docker run -d --name web -v /webapp training/webapp python app.py
docker run -d --name web -v /src/webapp:/webapp training/webapp python app.py
docker run -d --name web -v ~/src/webapp:/webapp training/webapp python app.py
docker run -v c:\<path>:c:\<container path>

  • 为已有的容器添加多个Data volumes

docker run -d --name web -v /webapp1 -v /webapp2 training/webapp python app.py

  • 为已有的容器添加一个只读的volume

docker run -d --name web -v /src/webapp:/webapp:ro training/webapp python app.py

  • 为已有的容器添加一个高效读取的volume

docker run -d --name web -v /src/webapp:/webapp:cached training/webapp python app.py

  • 将一个文件作为data volume,可以在容器和宿主之间共享数据,特别适合日志文件

docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash
 

3) 在容器启动时,通过--volumes-from=a_data_volume_container参数为容器指定一个或多个Data volumes

创建数据容器(供其他应用容器引用):

docker create -v /dbdata --name dbstorecontainer 

在启动应用容器时,直接引用数据容器:

docker run -d --volumes-from dbstorecontainer --name app1container ubuntu

在启动应用容器时,间接引用数据容器:

docker run -d --name app3container --volumes-from app1container ubuntu

4. 查看当前系统中定义的Data volumes

  • docker volume ls
  • docker volume inspect

查看一个容器中的Data volume

执行命令docker inspect mycontainer

        ...
        "Mounts": [
            {
                "Source": "/mnt/ba",
                "Destination": "/opt/server/tem1",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        ...

5. 删除一个容器中的Data volumes

 

如果在启动容器的时候使用--rm选项,则在容器退出时自动删除容器中的匿名Data volumes。

docker run --rm -v /myvolume --volumes-from mydatacontainer myappcontainer

此外,还可以通过如下方式删除Data volumes:

  • docker rm -v mycontainer
  • docker volume rm -f myvolume1 myvolume2

删除所有未用的Data volumes

  • docker volume prune
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值