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

1:Docker数据持久化数据的方案

方案一:基于本地文件系统的Volume

方案二:基于plugin的Volume,即支持第三方的存储方案

2:数据持久化-Data Volume

解决方案:container容器被删除后 container内的数据也会随之被删除 丢失,例如数据库之类的container,数据持久化放置container被删除而导致数据的丢失

2.1:push mysql:5.6的版本

当然其他版本也是可以的

我可以看到他的Dockerfile中是有这么一句代码的如下图 他的作用就是将数据保存在/var/lib/mysql这个目录下

Docker-Docker的持久化存储和数据共享_第1张图片

docker push mysql:5.6

2.2:启动一个container

docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.6

#--name mysql1 表示该container命名为mysql1
#-d 表示后台运行
#-e MYSQL_ALLOW_EMPTY_PASSWORD=true 设置mysql的环境变量

docker ps/docker container ls 发现这个容器已经被创建好了

 

2.3:volume查看本地文件系统已经创建出了mysql1这个容器的数据

docker volume ls

2.4:创建两个mysql容器

我们发现会产生两个volume 删除mysql1和mysql2两个容器后volume并不会被删除

Docker-Docker的持久化存储和数据共享_第2张图片

2.5:Volume Name太长了 不好记住啊 怎么修改呢?

docker run -d -v mysql1:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.6

#-v mysql1:/var/lib/mysql 强这个volume命名为mysql1并且保存在/var/lib/mysql目录下

查看是否保存成功了

 Docker-Docker的持久化存储和数据共享_第3张图片

2.6:如何引用已经被删除的docker容器留下来的volume

docker run -d -v mysql1:/var/lib/mysql --name mysql3 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.6
#-v mysql1:/var/lib/mysql 如果本地有mysql1这个volume就引用 没有则新建名字叫mysql1的volume

 Docker-Docker的持久化存储和数据共享_第4张图片

3:Bind Mouting方式数据持久化

这种方式的数据持久化是将docker容器指定的文件夹下的所有数据与本地对应文件夹的数据同步,如果本地这个文件夹有改动 docker对应文件夹的内容也会随之改动 反过来也是一样的

3.1:启动docker容器并且设置同步的文件夹

docker run -d -v /root/test:/test --name demo1 centos /bin/sh -c "while true; do echo hello world; sleep 3600; done"

#-v -v /root/test:/test:表示将本地的/root/test目录与docker容器的/test目录同步 这样删除这个contianer后 /test目录下的文件会被同步保存在本地/root/test目录下
#/bin/sh -c "while true; do echo hello world; sleep 3600; done" :这个的目的是防止容器后台运行后立马退出

3.2:验证

在contianer的/test目录下放置任何文件都会被同步到本地的/root/test目录;同样在本地的/root/test目录下放置任何东西都会被同步映射到该容器的/test目录下

你可能感兴趣的:(Docker-Docker的持久化存储和数据共享)