目录
前言
一、Docker 数据管理
管理 Docker 容器中数据主要有两种方式:
- 数据卷(Data Volumes):宿主机与容器 共享数据
- 数据卷容器(DataVolumes Containers):容器与容器 共享数据
- 都使用 -v 进行创建
1.1 数据卷
- 数据卷是一个供容器使用的特殊目录,位于容器中。
- 可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。( 相当于把宿主机的目录 挂载到 容器的某个目录(数据卷)中)
- 数据卷的使用类似于Linux下对目录进行的 mount 操作(就是挂载)。
- 修改文件都能看到,数据相互共享。
注意:宿主机本地目录的路径必须是使用 【绝对路径】。如果路径不存在,Docker会自动创建相应的路径。
docker pull centos:7
#将宿主机的目录 /var/www/ 目录挂载到容器中的 /data1/ 目录下
#-v选项:在容器内创建数据卷
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
#进入容器数据卷目录中创建文件,进行验证
docker exec -it 容器ID bash
echo "this is web1" > /data1/abc.txt
exit
#返回宿主机进行查看
exit
cat /var/www/abc.txt
#能看到容器中创建的文件,宿主机也有
注:之前学过的 docker cp
命令也可以在宿主机与容器之间复制数据。
1.2 数据卷容器(–volumes-from)
- 如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。
- 数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。
- 实现了容器间数据的共享。
需要创建两个容器:
(1)创建一个容器作为数据卷容器
#-v 指定两个数据卷
docker run --name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
#exec 进入容器,在不同数据卷写入不同内容
docker exec -it 容器ID bash
echo "this is web2" > /data1/abc.txt
echo "THIS IS WEB2" > /data2/ABC.txt
(2)使用 --volumes-from
来挂载web2容器中的 数据卷 到新的容器