主题是Persist the DB,这里是链接。本文主要学习如何持久化容器中的数据。
使用docker运行一个随机生成1-10000的数的命令。下面是两个命令用&&
合并在一起,第一个命令是生成随机数并输出到data.txt,后面的命令是保持容器运行以方便后面查看文件
docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
执行下面的命令得到生成的数字。exec
是交换容器的关键字,后面接上容器id即可访问该容器。执行后会打印出一个数字。
docker exec <container-id> cat /data.txt
执行下面的命令直接将输入打印出来,并不会存入data.txt文件。其中ls /
是相对容器的目录。
docker run -it ubuntu ls /
执行下面的命令把操作1的容器停止
docker rm -f <container-id>
启动容器后,在容器内的增删改操作都保留在容器里,当容器关闭后,数据与随之丢失。 Volumes让容器内的路径与主机关联起来,如果挂载了一个容器的目录,容器内的修改同样会对主机造成同样的影响。Volumes有两种方式,一种是mount,另一种是使用docker的volume
有一点需要知道,todo app将数据存储在容器内的 /etc/todos/todo.db
内。
docker volume create todo-db
docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started
http://localhost:3000
,添加几个itemdocker ps
和docker rm -f <id>
实现docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started
http://localhost:3000
,会看见item还保留在那里执行下面命令得到Volume的元数据。其中Mountpoint就是实际的存储路径。
docker volume inspect todo-db
[
{
"CreatedAt": "2019-09-26T02:18:36Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
"Name": "todo-db",
"Options": {},
"Scope": "local"
}
]