8.Docker数据卷:数据交互、数据卷、数据卷容器

【目录导览】
1.Docker入门:什么是Docker?如何安装Docker?
2.Docker入门:Docker命令
3.Docker实战:Docker部署Nginx
4.Docker实战:Docker部署Tomcat
5.Docker实战:Docker部署MySQL
6.Docker镜像:什么是Docker镜像?Docker镜像加载原理?
7.Docker容器:什么是Docker容器?
8.Docker数据卷:数据交互、数据卷、数据卷容器
9.Docker镜像制作:Commit和DockerFile
10.Docker入门学习回顾小结
11.Docker网络:基础原理&示例
12.Docker网络:容器互联之–link
13.Docker网络:容器互联之自定义网络
14.Docker网络:容器互联之不同网络间的容器互联

1.数据交互

1.1从容器中拷贝数据到主机

docker cp [容器ID]:[容器内路径] [主机路径]

1.2从主机中拷贝数据到容器

docker cp [主机路径] [容器ID]:[容器内路径]

以上命令均在宿主机上操作。

2.数据卷

上述两种数据交互的方式均属于手动操作,现在使用-v挂载数据卷,即可实现自动同步数据。

2.1什么是数据卷?

  • 数据卷,又叫数据盘,在Linux操作系统下,数据卷就是一个文件目录;在Windows操作系统下,数据卷就是C盘、D盘等。
  • 在Docker概念中,只有通过-v参数挂载的目录,才能被称为数据卷

2.2如何挂载数据卷?

2.2.1指定挂载

docker run -it -v [主机目录]:[容器目录] [镜像名] /bin/bash
# 命令解释:-it 以交互的方式运行指定镜像;-v 挂载运行后的容器目录到当前主机目录
# 这样操作之后将主机目录和容器目录建立连接,双向绑定,不论容器是运行状态还是停止状态,主机目录和容器目录中的数据会相互同步。
# -v 只能在run命令下可以做数据卷挂载,即目录映射

2.2.2匿名挂载和具名挂载

# 方式1属于直接指定一个目录路径作为数据卷挂载的路径
# 除此之外,还可以使用匿名挂载和具名挂载
# 匿名挂载:
docker run -it -v [容器目录] [镜像名] /bin/bash
# 具名挂载:
docker run -it -v [name]:[容器目录] [镜像名] /bin/bash

# 使用docker volume ls可以查看匿名挂载和具名挂载的数据卷信息,如下:
DRIVER              VOLUME NAME
local               6b6e7567aed0a42645bddc7727a06509ecb43930507c0215555f3be1e5261508
local               test

# 使用docker inspect [VOLUME NAME],可以查看挂载的数据卷的路径,如下:
[root@iZ2zefjrz9szlt99tuu23fZ wy]# docker inspect 6b6e7567aed0a42645bddc7727a06509ecb43930507c0215555f3be1e5261508
[
    {
        "CreatedAt": "2020-08-24T16:30:40+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/6b6e7567aed0a42645bddc7727a06509ecb43930507c0215555f3be1e5261508/_data",
        "Name": "6b6e7567aed0a42645bddc7727a06509ecb43930507c0215555f3be1e5261508",
        "Options": null,
        "Scope": "local"
    }
]
[root@iZ2zefjrz9szlt99tuu23fZ wy]# docker inspect test
[
    {
        "CreatedAt": "2020-08-24T16:30:50+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test/_data",
        "Name": "test",
        "Options": null,
        "Scope": "local"
    }
]

# 默认路径都是在/var/lib/docker/volumes下

2.2.3使用DockerFile挂载

详情参看:[链接]

2.3如何设置数据卷挂载后的读写权限

# 以指定挂载为例

# readonly,该数据卷只能通过宿主机操作,容器内部是无法操作的
docker run -it -v [主机目录]:[容器目录]:ro [镜像名] /bin/bash
# readwrite,可读可写,宿主机和容器都能操作该数据卷
docker run -it -v [主机目录]:[容器目录]:rw [镜像名] /bin/bash

3.数据卷容器

启动容器B时,使用--volumes-from 指定容器A,那么容器A就会成为数据卷容器,数据卷容器中挂载的数据卷,都会被同步到容器B上,同样是双向绑定。

# 运行Image_name镜像为容器,并绑定相同镜像启动的容器docker_name,使docker_name容器成为数据卷容器
docker run -it --volumes-from [docker_name] [image_name]

这里有一点值得注意有两点:

  1. 容器A被其他容器通过–volumes-from参数绑定后,容器A才成为数据卷容器
  2. 容器B绑定数据卷容器A之后,挂载了容器A的数据卷,但是实际上是挂载了“容器A的数据卷挂载的宿主机目录”,这里可以把容器A、B挂载的数据卷与宿主机目录的关系看做Linux硬链接的关系,因此哪怕把容器A删除,容器B的挂载 的数据卷仍然存在(因为它实际挂载是的宿主机的数据卷)。

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值