数据卷
数据卷就是将宿主机的某个目录挂载到应用容器里面作为容器的数据存储目录, 直接用于应用容器和本地主机之间的数据同步
数据卷操作
docker run itd --name [容器名称] -v [宿主机文件]:[容器文件]:[镜像名称]
示例:
创建测试文件:
echo ‘test111’ > /tmp/test111.txt
启动一个容器,挂载数据卷(将/tmp 目录挂载到容器内部):
docker run -itd --name test1 -v /tmp:/test1 nginx (使用nginx这个镜像,启动一个名叫test1的容器,将本地/tmp目录挂载到容器内的test1目录)
进入容器内部查看挂载是否成功
[root@localhost ~]# docker exec -it test1 /bin/bash
root@49ef67457ee2:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv test1 usr
boot docker-entrypoint.d etc lib media opt root sbin sys tmp var
root@49ef67457ee2:/# ls test1/
file1.txt vmware-root_659-4013788787 vmware-root_662-2689143848 yum.log
ks-script-EwBdjf vmware-root_660-2697467306 vmware-root_666-2731021219 yum_save_tx.2021-06-27.22-20.HGDtHL.yumtx
test111.txt vmware-root_661-4013919860 vmware-root_685-4013788754
root@49ef67457ee2:/# cat test1/test111.txt
test111
在容器内部对挂载的目录中的文件进行操作,看在宿主机上是否能看到改变
root@49ef67457ee2:/# echo 'hahaha' > test1/test111.txt
root@49ef67457ee2:/# cat test1/test111.txt
hahaha
[root@localhost ~]# cat /tmp/test111.txt (宿主机上面操作)
hahaha
数据卷容器
将宿主机的某个目录,使用容器的方式来表示,然后其他应用容器将数据保存在这个容器中,可以达到大批量应用数据同时存储的目的
数据卷容器操作
1,创建数据卷容器
docker create -v [宿主机文件]:[容器数据卷目录] --name [容器名称] [镜像名称] [命令(可选)]
2,使用数据卷容器
docker run --volumes-from [数据卷容器名字] -d --name[容器名称] [镜像名称][命令(可选)]
示例:
创建数据卷容器
[root@localhost ~]# docker create -v /data:/con_chare --name vc-1 nginx
(使用nginx这个镜像启动一个数据卷容器,其中本地目录为/data,容器数据卷目录为con_share,容器名称为vc-1)
将数据卷容器挂载到应用容器中
[root@localhost ~]# docker run -d --volumes-from vc-1 --name nginx-1 nginx
[root@localhost ~]# docker run -d --volumes-from vc-1 --name nginx-2 nginx
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f381fb0b12ea nginx “/docker-entrypoint.…” 4 seconds ago Up 3 seconds 80/tcp nginx-2
8fb85868c5fb nginx “/docker-entrypoint.…” 25 seconds ago Up 24 seconds 80/tcp nginx-1
进入应用容器nginx-1中查看挂载情况(可以看到con_share目录存在)
[root@localhost ~]# docker exec -it nginx-1 /bin/bash
root@8fb85868c5fb:/# ls
bin con_chare docker-entrypoint.d etc lib media opt root sbin sys usr
boot dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
在容器nginx-1的con_share目录中创建一个文件,看在容器nginx-2和宿主机中是否可见
root@8fb85868c5fb:/# echo nginx-1 > con_chare/nginx1.txt
宿主机
[root@localhost ~]# cat /data/nginx1.txt
nginx-1
容器nginx-2
root@f381fb0b12ea:/# cat con_chare/nginx1.txt
nginx-1
删除运行中的容器
docker rm -f $(docker ps -a -q)