Docker 持久化存储和数据共享

Docker 的持久化存储和数据共享

一、Docker持久化数据的方案:

  • 基于本地文件系统的Volume。可以再执行Docker create 或 Docker run 时,通过-v 参数将主机的目录作为容器的数据卷。这部分功能便是基于本地文件系统的volume管理。
  • 基于plugin的volume。支持第三方的存储方案,比如NAS,aws。
  • Volume的类型:
    • 受管理的data Volume,由docker后台自动创建。
    • 绑定挂载的Volume,具体挂载位置可以由用户指定。

二、数据持久化(Data Volume):

  • 基本使用语法:

    • Dockerfile 文件:
      • VOLUME ["/var/lib/mysql"]
      • docker run -v mysql:/var/lib/mysql
  • 查看容器日志:

    • docker logs Containers[name]
  • 创建一个Mysql容器并指定环境变量-e

    • docker run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
  • 查看volume:

    • docker volume ls

      [root@localhost ~]# docker volume ls
      DRIVER              VOLUME NAME
      local               c35e826ea5fdb38953f9b3b591feb967617a6d43bf762934faf7176476fb546a
      
  • 删除volume:

    • docker volume rm VOLUME NAME

      [root@localhost ~]# docker volume rm  c35e826ea5fdb38953f9b3b591feb967617a6d
      c35e826ea5fdb38953f9b3b591feb967617a6d
      
  • 查看volume详细信息:

    • docker volume inspect VOLUME NAME

      [root@localhost ~]# docker volume inspect 93de872031ef88cddeb7a2324e134fe9376
      [
          {
              "CreatedAt": "2019-01-12T17:28:11+08:00",
              "Driver": "local",
              "Labels": null,
              "Mountpoint": "/var/lib/docker/volumes/93de872031ef88cddeb7a2324e134fe9376f02ef52884a59781ade39bb30227a/_data",  # 可以看到它的挂载点再哪个目录
              "Name": "93de872031ef88cddeb7a2324e134fe9376f02ef52884a59781ade39bb30227a",
              "Options": null,
              "Scope": "local"
          }
      ]
      
  • 当你删除mysql容器的时候,volume也是存在的。

  • 给volume自定义命名:

    • docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
    • -v 前者的mysql 指的是 docker volume ls 指定的名字: 后面的指的是docker volume inspect mysql时 挂载点存放的名字

示例实现volume的数据存储:

  • 1:创建mysql容器并自定义命名:

    • docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysq
  • 2:进入容器:

    • docker exec -it mysql1
  • 3:进入容器中mysql 数据库的shell模式:

    • mysql -u root

      root@54027808eb47:/# mysql -u root
      Welcome to the MySQL monitor.  Commands end with ; or \g.
      Your MySQL connection id is 8
      Server version: 8.0.13 MySQL Community Server - GPL
      
      Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
      
      Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners.
      
      Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
      
  • 4:再mysql容器shell终端中创建一个数据库:

    • create database docker
  • 5:查看创建的数据库:

    • show databases;

      mysql> show databases;
      +--------------------+
      | Database           |
      +--------------------+
      | docker             |   # 这个就是新创建的数据库
      | information_schema |
      | mysql              |
      | performance_schema |
      | sys                |
      +--------------------+
      5 rows in set (0.00 sec)
      
    • 完成以上操作,exit退出到本机上。

  • 6:删除上面创建的mysql1容器:

    • 1:首先停止mysql1容器:
      • docker stop mysql1
    • 2:删除mysql1容器:
      • docker rm mysql1
  • 7:可以查看一下当前指定的volume

    • docker volume ls

      [root@localhost ~]# docker volume ls
      DRIVER              VOLUME NAME
      local               mysql   # 可以看到volume 还存在
      
  • 8.再创建一个mysql2容器并且指定 使用哪个volume:

    • docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
    • 注意:再-v 后面 前者的mysql名字一定要跟docker volums 中的mysql名字对应上
  • 9.进入mysql2容器中:

    • docker exec -it mysql2 /bin/bash
  • 10.查看mysql2容器中数据库是否有mysql1那时候创建的docker数据库:

    • mysql -u root

    • show databases;

      
      Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
      
      mysql> show databases;
      +--------------------+
      | Database           |
      +--------------------+
      | docker             |  # 有当时mysql1容器创建docker数据库
      | information_schema |
      | mysql              |
      | performance_schema |
      | sys                |
      +--------------------+
      5 rows in set (0.00 sec)
      
      
  • 创建mysql2容器的时候,-v 后面一定要指明用哪个volume

三、数据持久化(Bind Mounting):

  • 基本语法:
    • docker -run -v /home/aaa:/root/aaa

示例实现Mounting的数据存储:

  • 1:首先再文件夹中创建一个Dockerfile 文件:

    [root@localhost docker-nginx]# more Dockerfile 
    FROM nginx:latest
    WORKDIR /usr/share/nginx/html  
    COPY index.html index.html
    
  • 2:创建一个镜像:

    • docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web docker-nginx
    • -v后面就是Bind Mounting 的语法
  • 3:进入刚创建好的web容器:

    • docker exec -it web
  • 4:cd到/usr/share/nginx/html 文件中,可以看到创建的Dockerfile 跟 index.html

  • 5:再该目录中创建一个touch test.txt文件 写入abc:

  • 6:退出该容器,会看到本地也会新创建一个test.txt文件。

猜你喜欢

转载自blog.csdn.net/Fe_cow/article/details/86417196