docker挂在数据卷
容器中管理数据主要有两种方式
一、数据卷(Data Volumes):容器内数据直接映射到本地主机环境;
二、数据卷容器(Data Volume Containers):使用特定容器维护数据卷
挂在相当于:Linux中的mount操作
1、在容器内创建一个数据卷
下面使用training/webapp 镜像创建一个 web 容器,并创建一个数据卷挂载
到容器的/webapp 目录:
$ docker run -d -P --name web -v /webapp training/webapp python app.py
(相当于创建一个webapp目录在容器内部)
-P 是将容器服务暴露的端口,是自动映射到本地主机的临时端口
使用-v 标记也可以指定挂载一个本地的已有目录到容器中去作为数据卷
(推荐方式)
2、将本地某个目录挂在到容器目录中
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
默认是读写rw权限,可以添加 ro指定为只读
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro
training/webapp python app.py
- 挂载一个本地主机文件作为数据卷(不知道怎么直接挂在.txt文件)
-v 标记也可以从主机挂载单个文件到容器中作为数据卷(不推荐)。
$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
这样就可以记录在容器输入过的命令历史了。
注意
如果直接挂载一个文件到容器,使用文件编辑工具,包括 vi或者sed--in-
place 的时候,可能会造成文件 inode 的改变,从 Docker 1.1.0 起,这会导致报错
误信息。所以推荐的方式是直接挂载文件所在的目录
数据卷容器
创建数据卷容器
docker run -it -v /dbdata --name dbdata centos (退出后就结束运行了 不知道怎么再次进入)
挂载数据卷容器
docker run -it --volumes-from dbdata --name db1 centos
docker run -it --volumes-from dbdata --name db2 centos
可以多次使用--volumes-from 参数来从多个容器挂载多个数据卷。还可以
从其他已经挂载了容器卷的容器来挂载数据卷。
注意
使用--volumes-from 参数所挂载数据卷的容器自身并不需要保持在运行状
态。
如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自
动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时
显式使用 docker rm-v 命令来指定同时删除关联的容器。