Docker之数据存储
1. Docker数据存储
写时复制
docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层并在镜像栈顶部添加一个读写层。
如果运行中的容器修改了一个已存在的文件,那该文件将会从读写层的下面的只读层复制到读写层,该文件的只读版本仍然存在,只是被读写层的副本隐藏,此时成为写时复制。
1. docker提供三种不同方式
volumes 存储位置/var/lib/docker/volumes
bind mounts 可以存储在宿主机系统的任意位置
tmpfs 挂载宿主机系统的内存中,而不会写入宿主机系统的文件系统
        
2. volume
1. 创建一个数据卷
docker volume create nginx-test
会在/var/lib/docker/volumes目录下,创建一个子目录nginx-test
2. 使用数据卷创建一个容器
docker run -d -it -p 8080:80 --name=nginx-test --mount type=volume,src=nginx-test,dst=/usr/share/nginx/html hub.c.163.com/library/nginx
3. 多个容器可以共享一个数据卷
4. 删除数据卷
docker volume rm nginx-test
5. 数据卷分为命名卷和匿名卷
6. 查看数据卷
docker volume ls
7. 查看数据卷详情
docker volume inspect 数据卷名称
注意: 使用volumes方式挂载时,如果容器中的挂载目录已经存在文件,那么会被同步到volume中。这给我们带来了很大的便利性,我们可以不用手动去把文件从容器中拷贝出来。
当该容器被删除时volume依然会存在,它可以被重新挂载到其他容器中,这保证了存储与容器的解耦,实现了我们需要的数据持久化功能。
3. bind mount volume
1. 挂载任意存在的目录到容器内
docker run -d -it -p 8080:80 --name=nginx-test --mount type=bind,src=/test,dst=/usr/share/nginx/html hub.c.163.com/library/nginx
注意: bind mount的方式与Linux mount类似,挂载后容器中相关目录的内容将会被隐藏,此时只会展示bind mount目录的内容,这点与volume明显不同。
4. 数据卷容器
1. 创建数据卷容器
docker run -d -it --name moban -v /var/volum1 hub.c.163.com/library/nginx
2. 挂载数据卷容器
docker run -it --name nginx --volumes-from moban nginx1
注意:即使删除掉初始的数据卷容器,nginx1容器内的数据也不会丢失
3. 备份数据卷
1. 创建数据卷
docker run -t -i -v /var/volume1 -v /var/volume2 --name wang docker.io/centos /bin/bash
2. 备份/var/volume1
docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup1.tar /var/volume1
3. 备份/var/volume2
docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup2.tar /var/volume2
4. 同时备份两个数据卷
docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup.tar /var/volume1 /var/volume2
4. 还原数据卷
1. 还原到同一个容器
docker run --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /
2. 还原到其他容器
创建一个新的容器
docker run -t -i -v /var/volume1 -v /var/volume2 --name huihui docker.io/centos /bin/bash
还原
docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /
2. 修改默认存储位置
第一种方法
1. 修改docker.service
vim /usr/lib/systemd/system/docker.service #在里面的EXECStart的后面增加--graph /home/docker: ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph /home/docker
2. 保存退出
systemctl enable docker systemctl daemon-reload systemctl restart docker
第二种方法
1. 编辑/etc/docker/daemon.json,添加内容:data-root
vim /etc/docker/daemon.json
 
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "data-root": "/data/docker"
  "log-driver":"json-file",
  "log-opts": {"max-size":"100m"}
}
2. 重启docker
第三种方法
1. 使用软链接
ln -s /home/docker /var/lib
systemctl restart docker
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号