docker中的数据交互
数据卷(data volumes)
容器与宿主之间的数据交互
数据卷的操作类似于linux中对文件和目录的mount操作。在宿主主机于docker容器之间,数据卷的交互类似于在容器中新建一个文件目录,将宿主机器的某个文件目录挂载到容器的
数据卷操作
--------------------------
# 查看宿主目录
[root@VM_191_181_centos docker]# pwd
/doc/docker
# 在宿主目录中新建文件
[root@VM_191_181_centos docker]# echo "this is a docker volumes document" >> vol.md
[root@VM_191_181_centos docker]# ls
vol.md
# 创建容器和数据卷
# --name指定容器名字 -d表示后台运行 -v声明数据卷
[root@VM_191_181_centos docker]# docker run -d -i --name data_volumes_test -v /doc/docker:/web_data ubuntu /bin/bash
ff1e3dffb525bc61eaa1f0e927225934aa6d15960f753d6e7f49fdb2cc8e666e
# 查看容器运行情况
[root@VM_191_181_centos docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ff1e3dffb525 ubuntu "/bin/bash" 3 seconds ago Up 2 seconds data_volumes_test
# 进入容器
[root@VM_191_181_centos docker]# docker exec -it ff1e3dffb525 /bin/bash
# 查看容器中数据卷中的数据,可以看到与宿主/doc/docker中的文件相同
root@ff1e3dffb525:/# pwd
/
root@ff1e3dffb525:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var web_data
root@ff1e3dffb525:/# cd web_data
root@ff1e3dffb525:/web_data# ls
vol.md
root@ff1e3dffb525:/web_data# cat vol.md
this is a docker volumes document
# 将宿主中的.bash_history挂载到docker的数据卷,在容器中就可以实时查看宿主主机的命令操作
docker run -d -i --name history -v /root/.bash_history:/root/.bash_history ubuntu /bin/bash
--------------------------
数据卷容器(data volumes dontainers)
容器与容器之前的数据交互
新建一个只用来数据交互的容器,其他容器之间的数据交互全都通过这个数据卷容器
数据卷容器操作
--------------------------
# 新建数据卷容器
[root@VM_191_181_centos docker]# docker run -it --name dbdata -v /dbdata ubuntu
root@cd8e0d1da82c:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# 新建db1和db2容器
# 并用 --volumes-from 来挂载dbdata容器中的数据卷
[root@VM_191_181_centos docker]# docker run -di --volumes-from dbdata --name db1 ubuntu
a1ef927dc105617bc3a732ce66e389085780c51a91dde40dc0b2e741be614305
[root@VM_191_181_centos docker]# docker run -di --volumes-from dbdata --name db2 ubuntu
02430c33161fe6288fdab8a556c2c90917ad3585ed0a7433c8d73b10ea690954
# 查看后台运行的容器
[root@VM_191_181_centos docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
02430c33161f ubuntu "/bin/bash" 28 seconds ago Up 28 seconds db2
a1ef927dc105 ubuntu "/bin/bash" 34 seconds ago Up 33 seconds db1
# 进入db1容器,并查看是否已挂载dbdata
[root@VM_191_181_centos docker]# docker exec -it 02430c33161f /bin/bash
root@02430c33161f:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# 进入db2容器,并查看是否已挂载dbdata
[root@VM_191_181_centos docker]# docker exec -it a1ef927dc105 /bin/bash
root@a1ef927dc105:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# 在db1的数据卷中新建文件
root@02430c33161f:/# cd dbdata/
root@02430c33161f:/dbdata# ls
root@02430c33161f:/dbdata# echo "create vol-db1.md in db1" >> vol-db1.md
# 在db2的数据卷中查看
root@a1ef927dc105:/dbdata# ls
vol-db1.md
root@a1ef927dc105:/dbdata# cat vol-db1.md
create vol-db1.md in db1
# 删除容器,并在删除最后一个容器是用 -v 参数删除数据卷
[root@VM_191_181_centos docker]# docker rm 02430c33161f
02430c33161f
[root@VM_191_181_centos docker]# docker rm a1ef927dc105
a1ef927dc105
[root@VM_191_181_centos docker]# docker rm -v cd8e0d1da82c
cd8e0d1da82c
--------------------------