持续创作,加速成长!这是我参与「掘金日新计划 · 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的第一步~