挂载是什么
Docker中的挂载即数据卷。
数据卷特点
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
- 数据卷 可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 数据卷默认会一直存在,即使容器被删除
如何知道镜像有哪些挂载点
这里以oracle镜像registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g为例
[root@master ~]# docker inspect registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g|grep Volumes -C2
"Cmd": null,
"Image": "helowin/oracle_cmd",
"Volumes": {
"/home/oracle/app/oracle/oradata": {}
},
--
"Cmd": null,
"Image": "",
"Volumes": {
"/home/oracle/app/oracle/oradata": {}
},
[root@master ~]#
如何使用挂载
挂载按用户类型分为两类
- 容器中以root运行的,如:mysql
- 容器中不以root运行的,如:oracle
对于以root运行的,直接-v挂载即可,以非root运行的则要注意目录或文件权限。(下面以非第一次运行介绍)
不明确定制挂载点时,挂载点的数据存哪
- 启动容器
docker run -d -p 11521:1521 --privileged=true --name oracle11g_test registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g - 查看
[root@master ~]# docker inspect oracle11g_test|grep Mounts -A10
"Mounts": [
{
"Type": "volume",
"Name": "832f27bc76c7b9875d2f8e8c3687a2a31ed5f01e2ec91d8c1227dc0dccb1f965", #卷轴名
#卷轴宿主目录
"Source": "/data/docker/volumes/832f27bc76c7b9875d2f8e8c3687a2a31ed5f01e2ec91d8c1227dc0dccb1f965/_data",
"Destination": "/home/oracle/app/oracle/oradata",#卷轴容器目录
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
[root@master ~]#
当启动时非使用挂载点,而后想调整成指定外部挂载
以oracle为例
命令
①启动容器
②docker cp oracle11g:/home/oracle/app/oracle/oradata/ /data/docker_data/oracle/oracle11
③chown -R 500:500 /data/docker_data/oracle/oracle11
④systemctl stop docker.socket
⑤config.v2.json【参考上图】
⑥systemctl start docker
⑦docker volume prune #清除之前默认挂载点,即【不明确定制挂载点时,挂载点的数据存哪】中查找到的目录