Docker容器技术:数据持久化(下)

62 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

第二种实现:Bind Mouting

第一种是需要在Dockerfile里面定义Volume,这种方式不需要。

需要下述命令来进行目录同步的映射:

搭建环境

首先我们进到虚拟机里面,进入labs/docker-nginx/目录

这里我们了解一下nginx首页的布置,上述可以看一下Dockerfile的内容,基于nginx的baseImage,同时设置工作目录,并将本地文件夹的index.html拷贝过去作为首页。然后基于此build一个image。

docker run -d -p 80:80 --name web xiaopeng163/my-nginx

做了一个端口映射,可以本地访问一下:

使用bind mounting

这里我们把之前例子删除,这里我们希望基于该技术,可以把本地文件夹的index.html文件映射到WORKDIR指定的目录:

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

pwd值是当前目录。

我们可以看到这两个目录里面文件同步了,我们在容器里面新增的text文件,外部虚拟机也有了。

当然不仅仅只能用于两点打通,目录a打通目录b,目录b打通目录c,那么目录a和目录c也是打通的。

bind mount 实例 -- 提高开发效率

这里我们通过一个实际项目来给大家看一下bind mount的实际应用。

项目源码

这个是一个python-flask项目,比之前要复杂很多。

看一下Dockerfile:

这是基于python2.7镜像的,我们把当前目录的源代码全部拷贝到/skeleton里面去,然后通过RUN安装依赖,监听5000端口。然后有一个启动脚本:

环境搭建

这里直接在mac上面进行镜像build:

然后创建容器:

docker run -d -p 80:5000 --name flask xiaopeng163/flask-skeleton

然后访问本地(做了映射)

这里假设你是开发者,我对程序修改之后想看到效果,当然我可以重新build-run,但是太繁琐了。

使用bind-mount

这里就可以通过bind-mount实时同步源代码,实时看到效果!

docker rm -f flask

重新创建:

docker run -d -p 80:5000 -v $(pwd):/skeleton --name flask xiaopeng163/flask-skeleton

同时我们用了一个chrome插件,每个一段时间就会刷新页面。

接着我们进去本机同步的源代码目录,我们修改一下:

页面完成了自动刷新以及源码实现,方便了开发调试~

同时这种通过docker启动的环境是非常独立的,不会影响本机的生产环境,使用docker作为开发环境也是Devops的第一步~