yanlele / node-index

学习笔记、博文、简书、工作日常踩坑记录以及一些独立作品的汇总目录

Home Page:https://yanlele.github.io/node-index

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[docker] 入门 - 04 docker的持久化存储与数据共享

yanlele opened this issue · comments

docker的持久化存储与数据共享

01、基础概念

如果我们在container 写数据, 那么只限于这个container, 删除就没有了。
有一个这样的需求, 数据库是放在某一个容器里面的, 希望数据不会随着容器的删除而丢失, 希望容器数据库保存的数据可以共享。

Docker持久化数据方案

  • 基于本地文件系统的Volume
  • 基于plugin的Volume, 支持第三方的存储方案, 比如NAS, aws

主要是为第一种方案为主。

Vagrant 插件

如果要把文件弄到虚拟机里面, 最简单的办法就是直接 git clone xxxx 就可以了。

还有一个办法就是使用vagrant 的插件
vagrant plugin list 这个就可以拿到本地 vagrant 的插件有哪些。
通过 vagrant plugin install XXXX 就可以安装查价了。

vagrant plugin install vagrant-scp 去安装插件, 安装这个插件之后, 就可以本地目录拷贝到 vagrant 虚拟机上面了。

插件使用: vagrant scp [local path] [virtualbox-name]:/home/vagrant/labs 就可以把本地目录推送到虚拟机里面去了

02、数据持久化:Data Volume

实际上在创建数据的容器的时候, 就会缠上一个 volume , 用来存放数据库产生的数据

sudo docker run -d --name=mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql 直接启动mysql 容器
sudo docker logs mysql 可以查看日志
sudo docker volume ls 就可以看到刚才创建docker的时候, 就也创建了 volume
sodu docker volume rm [volume ID] 删除创建的volume
sudo docker volume inspect [volume id] 可以看看具体的volume 信息

[vagrant@docker-host ~]$ docker volume inspect c224d6da05a13fe09dd87a75afdf887c203acf72ec3eab545392af0b4f24a39a
[
    {
        "CreatedAt": "2019-06-08T14:20:16Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/c224d6da05a13fe09dd87a75afdf887c203acf72ec3eab545392af0b4f24a39a/_data",
        "Name": "c224d6da05a13fe09dd87a75afdf887c203acf72ec3eab545392af0b4f24a39a",
        "Options": {},
        "Scope": "local"
    }
]

有这样一个信息 "Mountpoint": "/var/lib/docker/volumes/c224d6da05a13fe09dd87a75afdf887c203acf72ec3eab545392af0b4f24a39a/_data", 这个是产生的数据, 就放置的位置。 这个地方是方式在本地位置的。
如果创建两个 mysql 容器, 如果我们删除 创建的mysql 容器, 就会发现一个情况,我们的volume 实际上还是在的。 但是有一个问题,就是volume 的名字很不友好, 是随机生成的。

sudo docker run -d -v mysql:/var/lib/mysql --name=mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql 给volume起别名
如果创建别的数据库的时候, 需要使用到我们的这个volume 的情况, 只需要创建的时候,用一样的别名就OK了

03、数据持久化:Bind Mouting

运行容器的时候, 指定本地目录和容器目录数据存放的一个映射关系。 两个地方地方的容器是同步更新的。

sudo docker run -d -v $(pwd):/var/lib/mysql --name=mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
使用这种方式的前提条件是, mac 要能够映射到 虚拟机。