Docker数据持久化
docker数据持久化所解决的问题:
- 数据持久性:Docker容器默认是临时的,当容器被删除或重新创建时,容器内部的数据也会丢失。通过数据持久化,可以将数据保存在容器外部,使其在容器的生命周期内保持不变。这样,即使容器被删除或重新创建,数据也不会丢失。
- 应用程序升级和迁移:当应用程序需要升级或迁移到新的环境时,数据持久化非常有用。通过将数据存储在持久化存储介质(如主机目录或数据卷)中,可以确保在应用程序升级或迁移过程中数据的连续性。应用程序容器可以被重新创建或迁移到其他主机,而数据仍然可以访问和使用。
- 多容器共享数据:在某些情况下,多个容器可能需要共享数据。通过使用数据卷或挂载主机目录,可以将数据卷挂载到多个容器中,使它们可以访问相同的数据。这在微服务架构或容器化的分布式应用程序中特别有用。
- 数据备份和恢复:通过将数据持久化到外部存储介质,可以方便地进行数据备份。可以通过备份主机目录或数据卷来保护数据,以防止数据丢失或损坏。在需要时,可以使用备份进行数据恢复,确保数据的完整性和可用性。
- 持久化存储的共享和扩展:通过使用持久化存储解决方案,如分布式文件系统或云存储服务,可以实现容器间的数据共享和扩展。多个容器可以使用相同的数据存储来访问和修改数据,从而提供协作和伸缩性。
Docker进行持久化的方式
docker可以在执行run的时候,通过-v和–mount命令进行挂载,这两个命令效果一样
Volumes 数据卷
数据卷是在宿主机的docker工作路径(/var/lib/docker/volumes)创建一个文件夹,来存放数据的。通过使用数据卷,可以将容器中的数据持久化保存在主机上,不受容器的生命周期影响。
创建数据卷
创建了一个名为Dockerdata的数据卷
docker volume create Dockerdata
Docker在创建volume的时候会在宿主机/var/lib/docker/volume/中创建一个以volume ID为名的目录,并将volume中的内容存储在名为_data的目录下。
查看所有数据卷
docker volume ls
查看数据卷信息
docker volume inspect Dockerdata
删除数据卷
docker volume rm Dockerdata
删除容器时删除相关连的数据卷
docker rm -v dockerID
如果没有-v参数,删除容器并不会删除绑定的数据卷
删除没有使用的数据卷
docker volume prune
挂载
docker run -d -v Dockerdata:/data busybox
docker run -d -v /data busybox #挂载一个随机名字的volume
其实不提前create也可以,因为如何Dockerdata卷不存在的话,会自动创建,也就意味着,一个容器使用volume进行挂载卷,上次这个容器挂载的卷如果存在,仍然还可以继续使用。
bind mount
Bind mounts模式和Volumes非常相似,不同点在于Bind mounts模式是将宿主机上的任意文件或文件夹挂载到容器,而Volumes本质上是将Docker服务管理的一块区域(默认是 /var/lib/docker/volumes 下的文件夹)挂载到容器。
挂载方式
挂载目录
docker run -d -v /src/webapp:/opt/webapp
将本地目录的webapp内容挂载到容器中的opt/webapp中,本地目录必须时绝对路径,如果目录不存在则会创建。
挂载文件
docker run -d -v /home/index.php:/var/www/html/index.php
将宿主机的index.php挂载到容器中去,但是容器启动之后,再次修改宿主机的文件,容器里面竟然没有变化,这个很离谱,不知道为什么,网上也没找到详细的解释,知道的大佬可以在评论下面留言。