1、文档目的
1.通过docker的跨平台容器性质,来实现windows、osx以及linux多平台开发环境的本地搭建。
下文谨以Windows环境的搭建来进行详细介绍
2.docker可以创建自己的仓库体系用来管理镜像文件,当cacti的环境需要改善的时候,例如增加插件等和linux的环境有关的问题时,可以通过仓库上传来共享给整个团队,以达到同步开发环境的功能。
3.拥有自己的开发环境之后可以实现版本控制,以提高开发效率。
2、部署结构拓扑
本地的php项目的svn代码管理仓库+一个DockerToolbox工具。
1. Svn上的Php项目提供代码的支持。
2. DockerToolbox提供docker容器服务,容器中为已经部署完成的cacti项目运行所需环境(apache,php和mysql以及cacti插件等服务)
3、下载svn代码
cacti的项目源代码地址http://192.168.1.100/repos/zznet/znms/03_code/trunk,
请用svn工具进行下载。
目录下面的文件如下
其中tar文件分别为cacti以及spine插件的安装包。
目录为两个tar包的解压缩后的文件
cacti目录是主要的开发目录,现代码已经完成cacti的install,可以直接进入console控制台。
4、docker安装
参考文档: https://docs.docker.com/windows/step_one/
- 检查系统版本,确认为windows7及以上的版本.
- 安装Docker Toolbox
Docker Toolbox的安装文件在svn的document目录下.。
详细路径: http://192.168.1.100/repos/zznet/znms/07_document/开发环境部署
安装过程均按照默认系统选项即可。安装之后出现三个可执行程序
1)点击Docker Quickstart 运行docker环境
直到运行如下界面,代表docker
2)在terminal终端中输入
docker run hello-world
直到显示如下,代表安装成功,如果输出有问题请参考附录1。
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository hello-world
91c95931e552: Download complete
a8219747be10: Download complete
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.
5、Docker的使用
5.1 docker的简单介绍
docker是一个用来构建你的应用的开放平台,可以在多平台下部署你在其他平台上搭建好的应用环境。
docker可以简单分为5部分
1. docker engine:即docker的服务引擎,用来提供docker的基础服务。
2. docker client :docker的客户端,用来连接远程的docker服务端。
3. docker 容器 :docker的容器,一个客户端可以运行多个容器,每个容器按照官方的规范的话应该是代表一个应用(例如:一个redis数据库或者mysql数据库),可以很好的管理应用的生命周期等。
4. docker 镜像 :docker容器的基础,可以理解为镜像就是系统镜像文件,而容器可以看作是一台机器。
5. registry :docker仓库,用来管理docker镜像文件
5.2 项目中使用docker的流程
由于cacti的环境搭建比较复杂,所以为了每个人能够在自己的机器上有一套单独的开发环境,
可以使用docker的容器管理服务。
通过构建一个通用的docker镜像文件(image文件),镜像文件中是所搭好的cacti环境,上传到我们自己构建的docker仓库中。然后本地docker客户端拉下镜像文件,使用容器运行,然后通过docker自己文件挂载技术,把php项目文件挂载到virtual box虚拟机的路径上,然后通过virtual box虚拟机和windows系统共享文件夹最终达到容器可以访问windows本地磁盘的目的,这样就可以实现我们本地开发,编辑php文件,然后可以用自己本地的cacti服务器来实时去测试代码。
我们自己构建的docker仓库地址是:192.168.1.26:5000
5.3 项目中使用docker的详细过程
note:安装完之后的terminal有两个,一个是quickstart这个只能进行docker操作的终端docker,还有一个virtual box可以进行所有操作的终端,具体选择视实际情况而定。其实可以不启动quickstart这个应用,但是启动quickstart之后会默认帮你开启虚拟机。
下文中会把quickstart称为docker client,virtual box的虚拟机ternimal称为docker engine。以便区分。
5.3.1 虚拟机 virtual box的配置
- 配置虚拟机和windows的共享文件夹
打开virtual box,如果此时docker环境已经启动,那么virtual box中就会有一个default的正在启动的虚拟机,如下图所示
选择default虚拟机并且点击上方的设置按钮,选择共享文件夹选项卡并进行共享文件夹配置。如下图所示:
这里名称为 在虚拟机中的路径名称 路径是windows系统下映射的路径,默认的配置是c/Users
意思是windows系统中的c盘下的user目录 映射成虚拟机中的c/user路径
此处要配置的就是php代码的存放地址(当然不一定要设置在c盘)
例如,我的svn的代码目录为C:\Users\znms\07_document\03_code\trunk
和下面运行容器的时候命令添加的参数有关,下文会详细介绍
- 配置虚拟机和本地window主机的网络连接协议
修改为bridge桥接,如下图
5.3.2 配置仓库http协议地址:
右键选择显示,出现docker engine所在虚拟机
在terminal中输入
$ vi /var/lib/boot2docker/profile
回车后,输入i,进行文件编辑,然后添加红线位置所示参数,按键esc,退出编辑模式,输入 :wq+回车 来保存。
重新启动docker服务,在docker engine下执行命令
/etc/init.d/docker restart
服务启动完毕后进行操作2
5.3.3 下载cacti环境image(镜像)
如果上述docker仓库地址配置成功,在docker engine中运行命令,显示如下代表镜像pull成功
$ docker pull 192.168.1.26:5000/cacti
5.3.4 运行以cacti镜像为环境的容器
在docker engine中执行命令:
$ docker run -i -d -v /c/Users/znms/03_code/trunk:/var/www/html -p 1880:80 -p 13306:3306 cacti:latest
参数以及说明:
序号 | 参数指令 | 作用 |
---|---|---|
1 | run | 运行容器 |
2 | i | 让容器的标准输入打开 |
3 | v | 指定挂载文件夹对应关系。宿主机文件夹:容器挂载文件夹 |
4 | p | 指定对宿主机(这里指的是docker engine,也就是virtual box的机器)暴露端口映射关系。 宿主机映射端口:容器暴露端口 |
5 | cacti:latest | cacti代表镜像文件的库 latest代表镜像文件的tag,可以当作是版本 |
针对第4个参数:
本文中我的svn代码所放置的目录为C:\Users\znms\07_document\03_code\trunk
共享文件夹的设置为
所以我的docker engine(也就是virtual box所启动的虚拟机中的路径就是)/c/Users/znms/03_code/trunk。
要挂载在php项目的文件夹下面,也就是/var/www/html
所以最终v多对应参数为/c/Users/znms/03_code/trunk:/var/www/html
具体值视真实情况而定
5.3.5 测试本地开发环境
1.查询virtual box运行的虚拟机的IP地址
进入到虚拟机的terminal,然后执行命令:ip addr 本次测试显示的docker engine的ip为192.168.1.24
2.打开浏览器输入
http://192.168.1.24:1880/cacti/ (ip为你的docker engine所在ip)
出现下图所示,代表环境搭建成功
3.测试修改本地代码时apache的热部署功能
在svn的代码目录03_code/trunk/cacti/下创建php文件a.php
输入如下内容
<?php
phpinfo();
?>
在浏览器中打开http://192.168.1.24:1880/cacti/aaa.php
如果出现php的版本信息代表热部署环境搭建完成。
6附录
- docker 命令执行不了:可能是虚拟机docker engine还未启动好,也就是docker服务还没启动好
- docker操作的指令(本次开发可能不会经常用到)
指令作用 | 指令详细 | 指令描述 |
---|---|---|
运行容器 | docker run -i -d -v /c/Users/znms/03_code/trunk:/var/www/html -p 1880:80 -p 13306:3306 centos:cacti_v2 | 请参照5.3.4 |
查询正在运行的容器 | docker ps | 可以通过这条指令查到容器的id |
查询所有的容器 | docker ps -a | |
停止容器 | docker stop cid | 可以根据容器的id(cid)停止指定容器 |
删除容器 | docker rm cid | 可以根据容器的id(cid)删除指定的容器 |
查询docker中的所有镜像 | docker images | 可以查询到镜像的name以及tag |
移除镜像 | docker rmi name:tag | 根据镜像的name以及tag来删除镜像 |
进入正在运行的容器 | docker exec -ti cid /bin/bash | |
查看容器运行产生的日志记录 | docker logs cid | 经常用于容器启动不了时候的排错 |