Docker使用4-Persist the DB

写在前面

主题是Persist the DB,这里是链接。本文主要学习如何持久化容器中的数据。

实践

  1. 使用docker运行一个随机生成1-10000的数的命令。下面是两个命令用&&合并在一起,第一个命令是生成随机数并输出到data.txt,后面的命令是保持容器运行以方便后面查看文件

    docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
    
  2. 执行下面的命令得到生成的数字。exec是交换容器的关键字,后面接上容器id即可访问该容器。执行后会打印出一个数字。

    docker exec <container-id> cat /data.txt
    
  3. 执行下面的命令直接将输入打印出来,并不会存入data.txt文件。其中ls /是相对容器的目录。

    docker run -it ubuntu ls /
    
  4. 执行下面的命令把操作1的容器停止

    docker rm -f <container-id>
    

卷Volumes

启动容器后,在容器内的增删改操作都保留在容器里,当容器关闭后,数据与随之丢失。 Volumes让容器内的路径与主机关联起来,如果挂载了一个容器的目录,容器内的修改同样会对主机造成同样的影响。Volumes有两种方式,一种是mount,另一种是使用docker的volume

创建Volume并启动容器

有一点需要知道,todo app将数据存储在容器内的 /etc/todos/todo.db内。

  1. 创建Volume
    docker volume create todo-db
    
  2. 使用下面命令启动getting-started,src是Volume的名字,target是容器内的路径
    docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started
    
  3. 访问http://localhost:3000,添加几个item
    Docker使用4-Persist the DB_第1张图片
  4. 停止并移除当前容器,使用docker psdocker rm -f 实现
  5. 使用上面的命令重新生成一个容器
    docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started
    
  6. 重新访问http://localhost:3000,会看见item还保留在那里

如何得到Volume存储的位置

执行下面命令得到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"
    }
]

你可能感兴趣的:(docker,数据库,容器)