Docker 学习笔记七:持久化数据

简介: 大家好,我是阿萨。每次新启动一个Docker里的容器之后,我们就很容易发现在docker容器里的修改就没有记录下来。如果想了解原因,先学习下容器运行的原理。

一,容器文件系统


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


为了验证这一点我们来做个实验。


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


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"


2.通过在容器中执行,验证是否可以看到输出。为此,打开Dashboard并单击正在运行ubuntu映像的容器的第一个操作。


6c38564857f4497f8611e01aba5e4a85_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.jpg


你会看到在ubuntu容器中运行shell的终端。运行以下命令查看/data.txt文件的内容。之后再次关闭此终端。也可以直接在命令行使用下方命令。


cat /data.txt


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


这时可以看到一个随机数字。


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


docker run -it ubuntu ls /


这里没有data.txt文件。


4.使用docker rm -f 命令删除第一个容器。

 

二,容器Volume


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


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


卷分2种。最终将同时使用两者,将从命名卷开始。


三,保留待办事项数据


默认情况下,待办事项应用程序将其数据存储在容器文件系统中的 /etc/todos/todo.db的 SQLite 数据库中。


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


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


1,使用 docker 卷创建命令创建卷。


docker volume create todo-db


2.在仪表板中再次停止并删除待办事项应用容器(或使用 docker rm -f ),因为它仍在运行,而无需使用持久卷。


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


docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started


4.容器启动后,打开应用并将一些项目添加到待办事项列表中。


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


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


7.使用与上面相同的命令启动新容器。


8.打开应用。应该看到项目仍在列表中!

9.完成待办事项后继续并删除容器。


如果觉得阿萨的内容对你有帮助,欢迎围观点赞。


相关文章
|
1月前
|
关系型数据库 MySQL Docker
【Docker】4、Docker 数据卷
【Docker】4、Docker 数据卷
31 0
|
3月前
|
Docker 容器
Docker学习笔记三:如何运行一个容器?
Docker学习笔记三:如何运行一个容器?
Docker学习笔记三:如何运行一个容器?
|
16天前
|
Ubuntu Linux Shell
docker学习笔记3,从入门到精通
docker学习笔记3,从入门到精通
|
16天前
|
应用服务中间件 Shell nginx
docker学习笔记2,入门到精通
docker学习笔记2,入门到精通
|
16天前
|
Ubuntu 网络协议 Docker
docker学习笔记1,入门到精通
docker学习笔记1,入门到精通
|
1月前
|
数据管理 应用服务中间件 nginx
Docker卷和数据管理
Docker卷和数据管理
15 1
|
2月前
|
存储 机器学习/深度学习 Cloud Native
深入浅出Docker容器数据卷
深入浅出Docker容器数据卷
38 1
|
3月前
|
XML Docker 容器
Docker学习笔记十:docker Compose
Docker学习笔记十:docker Compose
Docker学习笔记十:docker Compose
|
3月前
|
Docker 容器
Docker学习笔记六:如何分享一个镜像
Docker学习笔记六:如何分享一个镜像
Docker学习笔记六:如何分享一个镜像
|
3月前
|
存储 Docker 容器
Docker学习笔记二:如何创建Docker镜像?
Docker学习笔记二:如何创建Docker镜像?