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的第一步!!!