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

1.docker数据的持久化

    方案:

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

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

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

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

    查看Volume列表:docker volume ls

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

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

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

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

  查看volume的详细细节:

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

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

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

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

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

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

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

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

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

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

说明mysql的volume起作用了。

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

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

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

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

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

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

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

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

 看一下这个Dockerfile:

系统学习docker践行DevOps理念04--(Docker的持久化存储和数据共享)_第11张图片拉取

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

build一下生成镜像:

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

然后启动容器,访问:

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

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

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"

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

  源码不展示了

然后build 一下:

 运行容器:

 如果修改了文件:

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

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

修改源码:

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

 

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

你可能感兴趣的:(docker)