系统学习docker践行DevOps理念04--(Docker的持久化存储和数据共享)

1.docker数据的持久化

    方案:

2.第一种数据持久化的方式Data Volume

    场景;比如说我们的docker启动数据库,数据库会有一些table表的信息,当数据库容器删除的时候想要保住这个表的信息

    查看Volume列表:docker volume ls

    然后启动一个Mysql容器,他有默认的数持久化存放的地址:

docker run -d --name mysqlone -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

   然后查看Volume列表,发现他自动新增了一个Volume

   

  查看volume的详细细节:

  

但是这个volume的名字太长了,想要在容器启动的时候给volume起一个别名。

验证volume是否生效呢?创建一个数据库。

 

 删除mysql的容器,但是volume还在

另外创建一个容器,继续使用上一个容器的volume:

然后会发现上一个容器创建的表在这个容器中显现了出来。

说明mysql的volume起作用了。

那么在我们实际使用的时候就需要在Dockerfile中指定持久化的路径,

也就是说容器运行的时候会产生一些文件,这些文件会存到linux的这个路径。

这种方式主要针对容器是个数据源产生的一些地方,他本身会产生一些数据

2.数据持久化的第二种方式Bind Mouting

就是在容器运行的时候指定本地的这个目录和容器的这个目录一一对应的关系

  首先准备这么一个实验的环境:

 

 看一下这个Dockerfile:

拉取

意思是只当nginx作为一个基本的镜像,然后创建一个工作目录,将本地的index.html放进去,这样nginx启动访问的默认页面就是我们自己的了。

build一下生成镜像:

然后启动容器,访问:

ok没有问题。

好了 然后强制删除我们的容器:

然后我再次启动容器,将容器的数据存储目录映射一下:

docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web wangloveyou/my-nginx

 然后我们进入容器创建目录,那么会创建在映射到的docker host上面

通过一个例子来表明Bind Mouting对我们开发人员来讲是一个利器

Dockerfile:

FROM python:2.7
LABEL maintainer="Peng Xiao<xiaoquwl@gmail.com>"

COPY . /skeleton
WORKDIR /skeleton
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["scripts/dev.sh"]

  源码不展示了

然后build 一下:

 运行容器:

 如果修改了文件:

谷歌浏览器使用了一个插件每隔几秒钟自动刷新页面:

修改源码:

 

使用docker做本地开发环境是我们做devOps的第一步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时空恋旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值