Docker 持久化存储, Data Volume

docker容器, 再启动之后 我们可以对其进行 修改删除等等。
如果是一个数据库的容器, 里面的数据 不想随着这个容器的消失, 而消失。  就需要持久化数据存储。

Data Volume  

这是 docker hub 上面  mysql 的Dockerfile 这里的 VOLUME 意思就是, 将产生的数据 写入到当前主机的 /var/lib/mysql 里面。

[[email protected] ~]$ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
daocloud.io/library/mysql          latest              9228ee8bac7a        11 days ago         547MB
[[email protected] ~]$ docker run -d --name=mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true daocloud.io/library/mysql
e7945f20bc456038a110a9798299356c8e7912a22eceaaf4e2bd29880460ab6f
-e MYSQL_ALLOW_EMPTY_PASSWORD=true  告诉mysql 没有密码也可以用。

https://hub.docker.com/_/mysql  这里有一些参数的详解。 也可以设置密码。

[[email protected] ~]$ docker volume ls   # 会在主机上找个地方存  数据
DRIVER              VOLUME NAME
local               283f5d6584642ae6d32d5e02fd1330855b501dd891ddf38c5b40428183c652c8  # 这个是redis的
local               330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919   # 这个是mysql的
[[email protected] docker]$ docker volume inspect 330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919
[
    {
        "CreatedAt": "2020-04-11T20:26:36+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919/_data",
        "Name": "330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919",
        "Options": null,
        "Scope": "local"
    }
]
"Mountpoint": "/var/lib/docker/volumes/330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919/_data"  这个路径就是安装docker这台主机上的文件路径。  数据库产生的数据  都会存储到这里。  volume 是不会因为容器的删除  而消失。

由于volume的名字不友好, 可以自己定义:起别名:

[[email protected] ~]$ docker run -d --name=mysql1 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true daocloud.io/library/mysql
7b006082d7d9c1cc8f17dfaefda26afea6d2adb0c89b216eafe193fa9420c917
 -v mysql:/var/lib/mysql  就这一段参数。根mysql的 Dockerfile 中 Volume [/var/lib/mysql] 一样就可以了。
[[email protected] ~]$ docker volume ls
DRIVER              VOLUME NAME
local               330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919   # redis的
local               mysql  # 刚刚创建的 mysql 容器的   volume 

可以进到 MySQL 容器中,登录客户端。

[[email protected] ~]$ docker exec  -it mysql1 /bin/bash
[email protected]:/# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2020, 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.

mysql> 

在这个数据库里面,  创建一个库 然后, 停止mysql容器, 再删除容器。

[[email protected] ~]$ docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                 NAMES
c057b8fbb3ad        daocloud.io/library/mysql   "docker-entrypoint.s…"   4 minutes ago       Up 4 minutes        3306/tcp, 33060/tcp   mysql1
[[email protected] ~]$ docker rm -f mysql1   # 停止这个容器 并且删除
mysql1
[[email protected] ~]$ docker volume ls
DRIVER              VOLUME NAME
local               330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919
local               mysql   # volume 是还在的。  后面再创建一个  容器 然后依然使用这个  volume

# 可以看到, 再次重新创建一个 容器。 依然使用同一个  volume 的话。 还能继续使用原来的数据。 是没有丢的。

[[email protected] ~]$ docker run -d --name=mysql2 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true daocloud.io/library/mysql
f9cfe55e7e6d85a6c44bc177fb324051e5735e80dbf30c5224cbfd0c7f844181
[[email protected] ~]$ docker exec -it mysql2 mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, 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.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| docker             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

原文地址:https://www.cnblogs.com/chengege/p/12682501.html

时间: 2024-10-08 10:46:02

Docker 持久化存储, Data Volume的相关文章

Docker持久化存储之数据共享

持久化存储 Data volume 要知道容器是有生命周期的.docker默认的存储方式:存储类型:(strage driver:overlay2.xfs) data volume有两种挂载方式: 1)bind mount(用户管理):将宿主机上的某个目录或文件(不可以是没有格式化的磁盘文件),挂载到容器中,默认在容器内对此目录是有读写权限的,如果只需要向容器内添加文件,不希望覆盖目录,需要注意源文件必须存在,否则会被当做一个目录bind mount给容器.2)docker manager vo

Docker持久化存储与数据共享

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

docker 持久化存储

[[email protected] ~]# docker run --name mysql -p 3306:3306 -v /mysql(主机上的目录):/var/lib/mysql(容器内部目录) -d hub.c.163.com/public/centos:6.7-tools [[email protected] ~]# docker exec -it mysql /bin/bash [[email protected] /]# yum -y install mysql mysql-ser

如何实现跨 Docker 主机存储?- 每天5分钟玩转 Docker 容器技术(73)

从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静态页面的 web 服务器. 有状态是指容器需要保存数据,而且数据会发生变化,访问的结果依赖之前请求的处理结果,最典型的就是数据库服务器. 简单来讲,状态(state)就是数据,如果容器需要处理并存储数据,它就是有状态的,反之则无状态. 对于有状态的容器,如何保存数据呢? 前面在 Docker 存储章节我们学习

Data Volume 之 bind mount - 每天5分钟玩转 Docker 容器技术(39)

storage driver 和 data volume 是容器存放数据的两种方式,上一节我们学习了 storage driver,本节开始讨论 Data Volume. Data Volume 本质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中.Data Volume 有以下特点: Data Volume 是目录或文件,而非没有格式化的磁盘(块设备). 容器可以读写 volume 中的数据. volume 数据可以被永久的保存,即使使用它的容器

Swift - 使用Core Data进行数据持久化存储

一,Core Data介绍 1,Core Data是iOS5之后才出现的一个数据持久化存储框架,它提供了对象-关系映射(ORM)的功能,即能够将对象转化成数据,也能够将保存在数据库中的数据还原成对象. 2,虽然其底层也是由类似于SQL的技术来实现,但我们不需要编写任何SQL语句,有点像Java开发中的Hibernate持久化框架 3,Core Data数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型. 4,与SQLite区别:只能取出整个实体记录,然后分解,

docker 使用Data Volume 共享文件

Adding a data volume You can add a data volume to a container using the -v flag with the docker run command. You can use the -v multiple times in a single docker run to mount multiple data volumes. Let's mount a single volume now in our web applicati

docker的持久化存储和共享存储和网络架构

1.持久化存储docker容器中一般不保存数据,只封装系统和环境,这样就存在一个问题,一个docker容器的数据内容不能持久化,且不能共享出来,在生产中,不能很好地提供服务.为了解决这个问题,就要涉及到docker的持久化存储和共享存储的技术了.所谓持久化,就是将真实机目录挂载到容器中,让容器运行时所产生的数据都写入到真实机的目录中,以此来提供持久存储. mkdir /var/webroot docker run -d -p 80:80 -v /var/webroot:/var/www/html

44_自定义镜像及仓库、持久化存储 、 Docker网络架构

1. 制作自定义镜像(base基础镜像,搭建共性环境)基于centos镜像使用commit创建新的镜像文件基于centos镜像使用Dockerfile文件创建一个新的镜像文件 1.1 使用镜像启动容器 1)在该容器基础上修改yum源docker_images]# docker run -it centos345 /]# rm -rf /etc/yum.repos.d/*  345 /]# vi /etc/yum.repos.d/dvd.repo[dvd]name=dvdbaseurl=ftp:/