码迷,mamicode.com
首页 > 其他好文 > 详细

Docker 持久化存储, Data Volume

时间:2020-04-11 22:09:39      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:ase   span   image   修改   acl   ash   format   div   pre   

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)

 

Docker 持久化存储, Data Volume

标签:ase   span   image   修改   acl   ash   format   div   pre   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!