zoukankan      html  css  js  c++  java
  • Docker07-数据管理

    将数据保存在容器外部

    容器在运行项目时会产生数据,比如运行的mysql容器,那么一定会有数据产生。
    如果将数据保存在容器内部,那么也就意味着我们改变了原有镜像,这种做法是不可取的,因为在后期的镜像升级将变得不可能了。也就是说,运行的镜像,最好不要改变,如果必须改变,在改变后记得commit提交打成一个新的镜像

    显然,数据是应该保持在容器的外部,也就是说保持在主机上了。那么容器如何读取主机中的数据呢?

    挂载参数 -v

    在create或者run容器时,通过-v参数指定主机的目录,挂载在容器中的某一个目录上,这样容器就在这个目录读写数据了,从而实现了容器和数据的分离。

    案例:运行mysql容器,将mysql的数据放在主机/data/mysql-data中。

    1. 下载mysql镜像
     docker pull mysql:5.5
    
    1. 创建容器
    docker create --name mysql -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.5
    

    参数解释:
    --name mysql: 指定容器的名称为mysql
    -v /data/mysql-data:/var/lib/mysql:将主机目录/data/mysql-data挂载到容器的目录/var/lib/mysql上
    -p 3306:3306 :设置端口映射,前面的端口3306是主机端口,后面的端口3306是容器内部端口
    -e MYSQL_ROOT_PASSWORD=root: 设置容器参数,设置root用户的密码为root
    mysql:5.5:指定镜像名:版本

    1. 启动容器 dockert start <镜像ID>
    root@ubuntu:/home/guanfuchang# docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                     NAMES
    6b0589fb6196        mysql:5.5           "docker-entrypoint.s…"   10 seconds ago      Created                                            mysql
    5f3e056f65d1        hello-world         "/hello"                 3 hours ago         Exited (0) 3 hours ago                             kind_wescoff
    07bf73ec9f73        redis:5.0           "docker-entrypoint.s…"   23 hours ago        Up About a minute        0.0.0.0:16379->6379/tcp   redis
    root@ubuntu:/home/guanfuchang# 
    root@ubuntu:/home/guanfuchang# docker start 6b0589fb6196
    6b0589fb6196
    root@ubuntu:/home/guanfuchang# 
    root@ubuntu:/home/guanfuchang# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
    6b0589fb6196        mysql:5.5           "docker-entrypoint.s…"   57 seconds ago      Up 6 seconds        0.0.0.0:3306->3306/tcp    mysql
    07bf73ec9f73        redis:5.0           "docker-entrypoint.s…"   23 hours ago        Up About a minute   0.0.0.0:16379->6379/tcp   redis
    
    
    1. 测试连接,创建数据


    2. 检查主机上的数据

    root@ubuntu:/home/guanfuchang# 
    root@ubuntu:/home/guanfuchang# ls /data/mysql-data/
    6b0589fb6196.pid  ibdata1  ib_logfile0  ib_logfile1  mt_gff  mysql  performance_schema
    root@ubuntu:/home/guanfuchang# ls /data/mysql-data/mt_gff/
    db.opt  student.frm
    root@ubuntu:/home/guanfuchang# 
    

    通过上面的查询结果可见,在主机目录/data/mysql-data中已经保存了mysql的数据。


    :-:
    微信扫一扫,关注“python测试开发圈”,了解更多测试教程!

  • 相关阅读:
    解决mybatis xml文件代码提示
    SVN cleanup failed–previous operation has not finished; run cleanup if it was interrupted
    有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车?
    mybatis如何在控制台打印执行的sql语句
    Ionic2如何下拉刷新和上拉加载
    Ionic 如何把左上角的按钮去掉?
    Ionic1与Ionic2
    java的四种引用,强弱软虚
    equals变量在前面或者在后面有什么区别吗?这是一个坑点
    Java基础—复用类
  • 原文地址:https://www.cnblogs.com/guanfuchang/p/10831393.html
Copyright © 2011-2022 走看看