首页 > 数据库 >3.5 Docker最新入门教程-Docker入门-持久化数据库

3.5 Docker最新入门教程-Docker入门-持久化数据库

时间:2022-11-29 09:34:43浏览次数:78  
标签:容器 todo 入门教程 data 3.5 Docker 数据 docker

3.5 持久化数据库

您是否注意到,每次我们启动容器时,我们的待办事项列表都会被清除干净。为什么是这样?让我们深入了解容器的工作原理。

容器的文件系统

当容器运行时,它使用镜像中的各个层作为其文件系统。每个容器也有自己的“暂存空间”来创建/更新/删除文件。任何更改都不会在另一个容器中看到,即使它们使用的是相同的镜像。

在实践中观察

为查看实际效果,我们将启动两个容器并在每个容器中创建一个文件。您将看到在一个容器中创建的文件在另一个容器中不可用。

  1. 启动一个ubuntu容器,该容器将创建/data.txt文件,写入1 到 10000 之间的随机数。

     $ docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
    

    如果您对命令感到好奇,我们将启动一个 bash shell 并调用两个命令(为什么我们有&&)。第一部分选择一个随机数并将其写入/data.txt. 第二个命令只是监视文件以保持容器运行。

  2. 通过访问容器中的终端验证您是否可以看到输出。为此,请转到Docker Desktop 中的容器,将鼠标悬停在运行ubuntu镜像的容器上,然后选择显示容器操作菜单。从下拉菜单中,选择Open in terminal

    您将在 ubuntu 容器中看到一个运行 shell 的终端。运行以下命令以查看/data.txt文件的内容。之后再次关闭此终端。

     $ cat /data.txt
    

    如果你更喜欢命令行,你可以使用docker exec命令来做同样的事情。您需要获取容器的 ID(用于docker ps获取它)并使用以下命令获取内容。

     $ docker exec <container-id> cat /data.txt
    

    你应该看到一个随机数!

  3. 现在,让我们启动另一个ubuntu容器(相同的镜像),我们将看到我们没有相同的文件。

     $ docker run -it ubuntu ls /
    

    看!那里没有data.txt文件!那是因为它只写入了第一个容器的暂存空间。

  4. 继续并使用docker rm -f <container-id>命令删除第一个容器。

容器数据卷

通过前面的实验,我们看到每个容器每次启动时都是从镜像定义开始的。虽然容器可以创建、更新和删除文件,但当容器被移除并且所有更改都隔离到该容器时,这些更改将丢失。有了数据卷,我们可以改变这一切。

数据卷提供了将容器的特定文件系统路径连接回主机的能力。如果挂载了容器中的目录,则该目录中的更改也会在主机上看到。如果我们在容器重新启动时挂载相同的目录,我们会看到相同的文件。

有两种主要类型的数据卷。我们最终会同时使用两者,但我们将从命名数据卷开始。

持久化待办事项数据

默认情况下,待办事项应用程序将其数据存储在容器文件系统中的SQLite 数据库中的/etc/todos/todo.db,如果您不熟悉 SQLite,不用担心!它只是一个关系数据库,其中所有数据都存储在一个文件中。虽然这不是大型应用程序的最佳选择,但它适用于小型演示。稍后我们将讨论将其切换到不同的数据库引擎。

由于数据库是单个文件,如果我们可以将该文件持久保存在主机上并使其可供下一个容器使用,它应该能够从上一个容器停止的地方继续。通过创建一个数据卷并将其附加(通常称为“挂载”)到数据存储的目录,我们可以持久化数据。当我们的容器写入todo.db文件时,它将持久化数据卷到主机中。

如前所述,我们将使用命名卷。将命名卷简单地视为数据桶。Docker 维护磁盘上的物理位置,您只需要记住卷的名称。每次使用卷时,Docker 都会确保提供正确的数据。

  1. 使用docker volume create命令创建卷。

     $ docker volume create todo-db
    
  2. 在 Dashboard(或使用docker rm -f <id> )中再次停止并删除待办事项应用程序容器,因为它仍在运行而不使用持久卷。

  3. 启动 todo 应用程序容器,但添加-v标志以指定卷安装。我们将使用命名卷并将其挂载到/etc/todos,这将捕获在该路径创建的所有文件。

     $ docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
    
  4. 容器启动后,打开应用程序并将一些项目添加到待办事项列表中。

    添加到待办事项列表的项目

  5. 停止并删除待办事项应用程序的容器。使用仪表板或docker ps获取 ID,然后docker rm -f <id>将其删除。

  6. 使用上面的相同命令启动一个新容器。

  7. 打开应用程序。您应该会看到您的项目仍在您的列表中!

  8. 检查完列表后,继续并移除容器。

万岁!您现在已经了解了如何持久化数据!

笔记

虽然命名卷和绑定挂载(我们将在一分钟内讨论)是默认 Docker 引擎安装支持的两种主要类型的数据卷,但有许多数据卷驱动程序插件可用于支持 NFS、SFTP、NetApp 等!一旦您开始在使用 Swarm、Kubernetes 等的集群环境中的多个主机上运行容器,这一点将尤为重要。

深入数据卷

很多人经常问“当我使用命名卷时, Docker实际上将我的数据存储在哪里?” 如果你想知道,你可以使用docker volume inspect命令。

$ docker volume inspect todo-db
[
    {
        "CreatedAt": "2022-11-16T02:18:36Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
        "Name": "todo-db",
        "Options": {},
        "Scope": "local"
    }
]

Mountpoint是磁盘上存储数据的实际位置。请注意,在大多数机器上,您需要具有根访问权限才能从主机访问此目录。但是,那就是它所在的地方!

直接在 Docker Desktop 上访问数据卷数据

在 Docker Desktop 中运行时,Docker 命令实际上是在您机器上的小型 VM 中运行。如果您想查看 Mountpoint 目录的实际内容,您需要先进入 VM 内部。




个人写的小程序,有需求的可以看看:

全网热门头像馆
热门头像|个性头像|高清头像|性感壁纸|美女壁纸|炫酷壁纸|省电壁纸|唯美壁纸
海量资源 应用尽有 免费下载

标签:容器,todo,入门教程,data,3.5,Docker,数据,docker
From: https://www.cnblogs.com/eyesstar/p/16934452.html

相关文章

  • Dockerfile
    DockerfileFROM:指定基础镜像WORKDIR:指定工作目录,不存在则自动创建COPY:将源路径的文件复制到镜像目标路径,类似的有ADD命令ENV:用来设置编译阶段需要的环境变量RUN:执行命......
  • docker 离线迁移镜像
    制作离线镜像包我们需要在有网的docker下制作离线镜像包,这里我们用hello-world镜像演示在有网的docker下拉取镜像dockerpullhello-world将镜像压缩成tar文件(......
  • ubuntu docker离线安装教程
    离线安装包下载docker离线安装时需要三个安装包:containerd.io包、docker-ce-cli包,docker-ce包,下载地址:https://download.docker.com/linux/ubuntu/dists/xenial/pool/stab......
  • centos7 docker离线安装教程
    离线安装包下载docker离线安装时需要两个安装包:selinux包、docker包,下载地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/selinux包下载https:/......
  • 正则表达式30分钟入门教程
     正则表达式30分钟入门教程版本:v2.3(2008-4-13)作者:​​deerchao​​​转载请注明来源目录​​跳过目录​​​​本文目标​​​​如何使用本教程​​​​正则表达......
  • CentOS7一键脚本安装docker并创建ES集群(docker版本)
    ​CentOS7一键脚本安装docker并创建ES集群(docker版本)原创 yuanfan2012 WalkingCloud 2022-11-2819:59 发表于浙江收录于合集#Linux学习笔记288个#CentOS......
  • Docker 搭建Redis集群(哨兵模式)
    一、简介Redis集群的哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而......
  • 【2022-11-28】Docker部署搭建Yapi
    一、环境准备1.准备一台虚拟机\或者购买服务器2.虚拟机硬件要求2.1内存2-4G2.2CPU2核2G2.3硬盘至少20G3.系统镜像 centos7.9二、安装docker#......
  • 轻松掌握Docker使用-进阶操作(二)
    前言在上一节《​​轻松掌握Docker使用-基础入门(一)​​》中我们了解到:Docker是什么?Docker的镜像管理&基础命令Docker容器的基本操作这一节,我们来学习:如何定制Docker镜......
  • Centos7.X下Docker环境安装并配置加速镜像
    1、安装yuminstall-ydocker2、开启Docker服务systemctlstartdocker.service3、查看安装版本dockerversion4、设置开机启动systemctlenabledocker.servi......