欢迎光临散文网 会员登陆 & 注册

Docker基础——数据持久化

2023-08-15 14:56 作者:没用软件开发日记  | 我要投稿

    因为容器内的文件系统是不互通的,所以不通过额外的配置无法从一个容器访问另一个容器的文件,所以我们需要通过为容器挂载的形式让容器内部空间和主机上的硬盘路径连通,这样多个容器可以通过访问同一个主机地址上的文件达到数据互通的效果。简单的说就是将容器外部的文件系统的一部分挂载进容器内部,内部的变化会体现在外部、外部的变化内部也一样能感受到。

    卷上的数据因为存储在容器之外,所以不会因为容器的销毁而被删除,被重建的容器也能继承到之前容器放在挂载卷位置的数据。

    我们可以通过两种形式使用卷:

    1、先创建卷,在容器启动的时候配置其使用已经创建好的卷。

    2、在创建容器的时候创建临时卷。

    上述代码使用docker volume create创建了一个名为todo-db的卷,在运行容器时使用 --mount属性指定挂载卷的动作,type=volume表示挂载类型为卷,src=todo-db指定了使用的卷名称,target=/etc/todos指定了卷挂载的容器内部文件路径。

    在这个示例中预先创建好的卷就像一个数据桶,我们只需要关心将卷挂载到容器内部的路径就可以正常的使用卷为我们提供的数据持久化能力,我们不必关心卷挂载的主机文件系统路径在哪也不用担心会被误删,docker在帮我们管理。

    上述指令可以让我们查看预定义的卷的信息,Mountpoint是数据在磁盘上的实际位置。在大多数机器上,您可能需要具有从主机访问该目录的根访问权限。

    上述代码是另一种挂载卷的方式,通过将type设置为bind使用绑定的方式将src表示的主机路径与target表示的容器内部路径挂载到一起,这可以视作上一种方式的DIY简化版本。

    这种写法适合在开发阶段调试应用,我们只需要执行以下命令就能获得一个可直接参加开发工作的容器:

    这里新出现的 -w 是Dockerfile中“working directory”的缩写,用于指定应用的运行目录。

    node:18-alpine参数指定了容器的运行环境依赖。

    sh -c 表示使用sh运行可执行脚本,当容器文件准备结束时会自动执行这一命令。

    上述代码通过--mount将当前目录挂载到容器内部,依靠容器内的node环境来执行主机路径上的代码,我们对代码的任何改动都会被node服务实时编译。

Docker基础——数据持久化的评论 (共 条)

分享到微博请遵守国家法律