Docker容器中Data volumes详解
Data volumes可以视为容器中的一种特殊的文件路径,用以保存与容器实例生命周期无关的共享数据。1. Data volumes的特性在容器创建的时候初始化作为文件系统的一部分,但是不受Union File System的管理;便于持久化存储数据和共享数据Data volumes的数据是持久化的,删除容器不影响Data volumes的数据对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
更多推荐
所有评论(0)