docker数据卷
docker数据卷是经过特殊设计的目录,可以绕过联合文件系统(ufs),为一个或者多个容器提供访问
数据卷设计的目的,在于数据的永久化,它完全独立与容器的生存周期,因此,docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理.
1.docker数据卷独立于docker的存在,与容器生存周期分离
2.docker数据卷存在于docker的宿主机文件系统中
3.docker数据卷可以是目录也可以是文件
4.docker容器和利用数据卷和宿主机资源共享
5.同一个目录或者文件可以支持多个容器的访问,实现了容器间数据的共享和交换
数据卷的特点
1.数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中
2.数据卷可以在容器之间共享和重用
3.可以对数据卷里的内容直接进行修改
4.数据卷的变化不会影响镜像的更新
5.卷会一直存在,即使挂载数据卷的容器已经被删除
在虚拟机192.168.20.201上
一.容器使用独立的数据
运行一个nginx容器
[root@docker ~]# docker run --name web1 -d -p 80:80 nginx
查询
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
8cc57c5e984c nginx:latest "nginx -g 'daemon of About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 443/tcp web1
描述web1容器的元数据信息
[root@docker ~]# docker inspect web1
登录web1容器
[root@docker ~]# docker exec -it web1 /bin/bash
root@8cc57c5e984c:/# cd /usr/share/nginx/html
root@8cc57c5e984c:/usr/share/nginx/html# ls
50x.html index.html
root@8cc57c5e984c:/usr/share/nginx/html# echo "123" > index.html
root@8cc57c5e984c:/usr/share/nginx/html# cat index.html
123
root@8cc57c5e984c:/usr/share/nginx/html#exit
[root@docker201.com ~]
curl 172.17.0.2
123
二.容器使用系统的数据卷
建立卷内容
[root@docker ~]# mkdir /webroot
[root@docker ~]# vim /webroot/ndex.html
hello i host SO
将宿主机的卷共享给容器
[root@docker ~]# docker run --name nginx1 -d -v /webroot:/usr/share/nginx/html nginx /web2/html:/usr/share/nginx/html -v /web2/logs:/var/log/nginx nginx
[root@docker201.com ~]
curl 172.17.0.2
hello i am hostSO
(在宿主机上存网页,在容器里可以访问到,并可共享多个)
容器内部查询
[root@docker201.com ~] docker run --name nginx2 -d -v /webroot:/usr/share/nginx/html nginx
110c897a7acc684db41d1272361dbc248094d5eae87a2fdb85d7cb1e06214866
[root@docker201.com ~]docker run --name nginx3 -d -v /webroot:/usr/share/nginx/html nginx
29966d4ef179964fd7f4750b440151e2af129f7786fd5444563268e8f744ca12
宿主机查询
[root@docker201.com ~]
curl 172.17.0.3
hello i am hostSO
[root@docker201.com ~]
curl 172.17.0.4
hello i am hostSO
在宿主机上改首页webroot,映射的容器页会改变
卷全部宕掉不受影响
[root@docker201.com ~]
docker rm -f nginx1
nginx1
[root@docker201.com ~]
docker rm -f nginx2
nginx2
[root@docker201.com ~]
docker rm -f nginx3
nginx3
[root@docker201.com ~]
cat /webroot/index.html
hell i am hostSO
关闭所有容器
[root@docker ~]# docker ps -a | grep -v 'CONTAINER' |awk '{print $1}' |xargs docker rm -f
50d7933c408e
8cc57c5e984c
50a00c9e46a1
删除所有的容器
docker rm -f `docker ps --all | awk 'NR!=1{print $1}'`
关闭某一个容器
[root@docker ~]# docker rm -f `docker ps -a -q`
8cc57c5e984c
三、数据卷容器
实现容器之间共享数据
导入centos-6.4-docker.tar.bz2镜像
[root@docker ~]# docker load < /docker/docker-images/centos-6.4-docker.tar.bz2
[root@docker ~]# docker run -it -v /dbdata --name dbdata centos /bin/bash
[root@docker ~]# docker images
539c0211cd76 3.098309 years ago 313.8 MB
[root@docker ~]# docker tag 539c0211cd76 centos6
[root@docker ~]# docker images
centos6 latest 539c0211cd76 3.098311 years ago 313.8 MB
1.创建数据卷容器
[root@docker ~]# docker run -it -d -v /dbdata --name dbdata centos7.6 /bin/bash
bash-4.1# ls
bin dbdata etc lib media opt root selinux sys usr
boot dev home lib64 mnt proc sbin srv tmp var
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8e8ca62ac4e centos6:latest "/bin/bash" 36 seconds ago Exited (0) 1 seconds ago dbdata
登录
docker exec -it dbdata /bin/bash
[root@f6ba57f46da2 /]# cd /data
[root@f6ba57f46da2 data]# ls
[root@f6ba57f46da2 data]# touch aa.txt
[root@f6ba57f46da2 data]# echo 1432 >> aa.txt
[root@f6ba57f46da2 data]# exit
2.使用数据卷容器
[root@docker ~]# docker run -it -d --volumes-from dbdata --name web1 centos7.6 /bin/bash
docker exec -it web1 /bin/bash
[root@b6a6fc01befc /]# ls /
anaconda-post.log data dev home lib64 mnt proc run srv tmp var
bin data1 etc lib media opt root sbin sys usr
[root@b6a6fc01befc /]# ls /data
[root@b6a6fc01befc /]# exit
登录
docker exec -it web1 /bin/bash
[root@b6a6fc01befc /]# cd /data
[root@b6a6fc01befc data]# ls
aa.txt
[root@b6a6fc01befc data]# exit
[root@docker ~]# docker run -it -d --volumes-from dbdata --name web2 centos6 /bin/bash
bash-4.1# ls
bin dbdata etc lib media opt root selinux sys usr
boot dev home lib64 mnt proc sbin srv tmp var
bash-4.1# echo test > dbdata/index.html
bash-4.1# cat dbdata/index.html
test