zoukankan      html  css  js  c++  java
  • docker--持久化存储

    前戏

    假设我们启动了一个mysql容器,我们添加的数据都是在容器里面的,当容器挂掉之后我们的数据也会丢失。我们可以把容器内部的数据存放到宿主机上,当容器挂掉之后也不影响我们的数据。

    可以在执行Docker create或者docker run时,通过-v参数 将主机的目录作为容器的数据卷,这部分的功能是基于本地文件系统的volume管理。

    数据持久化 Data Volume

    如果你看过mysql的Dockerfile,里面有一行是这样的 VOLUME [/var/lib/mysql] ,意思就是启动一个mysql的容器时,会将容器里面的/var/lib/mysql里的文件挂载到宿主机上

    启动mysql5.7的镜像

    docker run -d --name mydb -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

    -e MYSQL_ALLOW_EMPTY_PASSWORD=true 表示密码可以为空

    查看 volume

    docker volume ls

    上面的VOLUME NAME对应的我们挂载的名字,那他的路径是在哪里?我们可以通过 docker volume inspect <VOLUME NAME>来查看

    docker volume inspect 自己的VOLUME NAME

    如果删除容器,volume是不会删除的

    删除volume,通过docker volume rm <VOLUME NAME>

    docker volume rm 6c6de0ab3191ee293b

    这个默认的VOLUME NAME太不好记了,我们也可以在启动容器的时候,加个 -v参数自己指定

    docker run -d --name mydb -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

    其中的mysql就是VOLUME NAME的值,:后面的是mysql容器里存放数据的地方

    我们进入到容器内部创建一个zouzou的数据库

    docker exec -it mydb /bin/bash
    mysql -uroot -p

    删除mydb容器,在创建一个新的mysql容器,指定-v参数,挂载到之前VOLUME NAME 为mysql的上面

    进入到容器内部,查看刚才我们新建的zouzou数据库是否存在

    可以看到,我们创建的zouzou数据库是存在的,这样的话,当我们的容器出现事故之后,只需要重新启动一个,挂载到之前的VOLUME NAME上就可以了

    数据持久化 Bind Mouting

    data volume 需要在 Dockerfile 定义 Volume

    bind mounting 只需要 -v 指明 容器外部文件夹和容器映射文件夹的对应关系即可 将本地的文件映射到容器内

    还是用mysql镜像举例,使用 bind mouting

    docker run -d --name db -v /tmp/test:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

    进入到宿主机的/tmp/test目录下。ls

    bind mouting还有一个好处,我们可以把宿主机的代码挂载到容器内部,当我们修改宿主机的代码之后,就可以看到效果了,方便我们调试代码

  • 相关阅读:
    python __path__ 变量
    mysql-5.7.9 shutdown 语法详解
    scikit-learn随机森林调参小结
    supervisor安装部署文档和管理实例
    随机森林种类及区别--g1
    决策树算法原理--good blog
    各种排序算法的时间复杂度
    【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别
    使用Apollo做配置中心
    lock in share mode 和 select for update
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/12150204.html
Copyright © 2011-2022 走看看