ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker 持久化存储, Data Volume

2020-04-11 22:03:37  阅读:233  来源: 互联网

标签:volume docker4 miller local Volume mysql Docker Data docker


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

Data Volume  

 

 

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

 

[miller@docker4 ~]$ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
daocloud.io/library/mysql          latest              9228ee8bac7a        11 days ago         547MB
[miller@docker4 ~]$ 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  这里有一些参数的详解。 也可以设置密码。

[miller@docker4 ~]$ docker volume ls   # 会在主机上找个地方存  数据
DRIVER              VOLUME NAME
local               283f5d6584642ae6d32d5e02fd1330855b501dd891ddf38c5b40428183c652c8  # 这个是redis的
local               330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919   # 这个是mysql的

 

[miller@docker4 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的名字不友好, 可以自己定义:起别名:

[miller@docker4 ~]$ 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] 一样就可以了。
[miller@docker4 ~]$ docker volume ls
DRIVER              VOLUME NAME
local               330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919   # redis的
local               mysql  # 刚刚创建的 mysql 容器的   volume 

 

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

[miller@docker4 ~]$ docker exec  -it mysql1 /bin/bash
root@c057b8fbb3ad:/# 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容器, 再删除容器。

[miller@docker4 ~]$ 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
[miller@docker4 ~]$ docker rm -f mysql1   # 停止这个容器 并且删除
mysql1
[miller@docker4 ~]$ docker volume ls
DRIVER              VOLUME NAME
local               330b65bda64c22b0929443d9eaa2db28c3a2468f76876b706c8efdbcbf6e4919
local               mysql   # volume 是还在的。  后面再创建一个  容器 然后依然使用这个  volume

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

[miller@docker4 ~]$ docker run -d --name=mysql2 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true daocloud.io/library/mysql
f9cfe55e7e6d85a6c44bc177fb324051e5735e80dbf30c5224cbfd0c7f844181
[miller@docker4 ~]$ 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)

 

标签:volume,docker4,miller,local,Volume,mysql,Docker,Data,docker
来源: https://www.cnblogs.com/chengege/p/12682501.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有