Maison >développement back-end >tutoriel php >Docker for Windows安装与Linux+PHP开发环境搭建(一)
Docker是什么?
简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。
Docker的好处
Docker的优点:运行快、部署敏捷、灵活、轻量、开源免费。
Boot2Docker是一个专为Docker而设计的轻量级Linux发行包,解决Windows或者OS X用户不能安装Docker的问题。Boot2Docker完全运行于内存中,24M大小,启动仅5-6秒。Boot2Docker需要运行在 VirtualBox中。
Docker for Windows的安装使用步骤
检查系统版本与硬件虚拟化
首先,检查Windows操作系统版本号
Boot2Docker的运行,要求操作系统至少为Windows 7.1,8/8.1。实测Windows 7 旗舰版(Windows 7 Ultimate)也支持。
其次,需要确保你的系统支持硬件虚拟化,且虚拟化为已启用状态。
开启虚拟化技术支持,需几个方面的条件支持:芯片组自身支持、BIOS提供支持、处理器自身支持、操作系统支持。
操作系统方面,主流操作系统均支持VMM管理,因此无需考虑。而芯片组方面,从Intel 945(除上网本外)时代开始均已经支持,因此也无需考虑。CPU方面,可以通过Intel官方网站进行查询或者第三方检测软件进行判断。因此,更多的是查看BIOS方面是否支持。
对于Windows 8/8.1系统,打开任务管理器-“性能”选项卡-CPU,可以看到虚拟化的开启状态。如下图:
如果为“未启用”状态,需要到主板BIOS进行开启。
进入BIOS的方法:在计算机开机启动中,当屏幕下方出现“Press DEL to enter SETUP”提示时,立即按“Del”键就能进入BIOS设置程序。有些类型的BIOS,则需要在开启启动Logo画面按F2或F10键进入,具体根据屏幕提示操作就可以。
举例,找到Intel Virtual Technology设置项,将Disabled更改为Enabled。然后保存退出,即可开启VT功能。如下图:
对于Windows 7系统,需要安装微软的硬件虚拟化检测工具(Microsoft? Hardware-Assisted Virtualization Detection Tool)来判断处理器是否支持虚拟化,以及虚拟化是否已开启。下载安装HAV detection tool,检测结果遵照屏幕提示,然后参考HAV Detection Tool User Guide 进行下一步操作。
下载地址:
HAV Detection Tool
http://download.microsoft.com/download/1/9/F/19FD407F-A7E9-4393-A845-D0B1F539678E/havdetectiontool.exe
HAV Detection Tool User Guide
http://download.microsoft.com/download/1/9/F/19FD407F-A7E9-4393-A845-D0B1F539678E/HAV%20Detection%20Tool%20-%20User%20Guide.mht
如果屏幕提示如下图,则表明当前计算机处理器支持硬件虚拟化并已经启用。
安装Boot2Docker
接下来需要安装Boot2Docker与一些辅助性软件。具体包括:
Docker Client for Windows
Boot2Docker management tool and ISO
Oracle VM VirtualBox
Git MSYS-git UNIX tools
首先点击下载Boot2Docker for Windows。
下载地址:
https://s3.amazonaws.com/github-cloud/releases/18047765/825908bc-15b8-11e5-96cb-9a42a043cc39.exe?response-content-disposition=attachment%3B%20filename%3Ddocker-install.exe&response-content-type=application/octet-stream&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1437386585&Signature=wM%2BTTYN4yqc8fhh7WAEeZw7A5cE%3D
接着双击已下载的docker-install.exe安装文件,开始安装。安装过程最好提前关闭计算机的相关安全软件。
官方下载速度比较慢,可以尝试到国内的DaoCloud下载http://get.daocloud.io/
验证是否安装成功
安装完成后启动Boot2Docker。
打开Boot2Docker终端后,如果系统出现用户账户控制(User Account Control)提示,请选择“是(Yes)”,以确保虚拟机VirtualBox 完成一些计算机配置的更改。若无提示,一般无需设置。
注:用户账户控制(UAC)是Windows Vista的一个新增的安全功能。它可以防止恶意软件获取特权,就算用户是以管理员帐户登录也可以起到保护作用。可在控制面板修改UAC,以Win7旗舰版为例是:控制面板(Control Panel ) → 所有控制面板项(All Control Panel Items) → 用户账户(User Account) → 更改用户账户控制设置(Change User Account Control setting)。
终端需要一定初始化时间来启动Boot2Docker,执行Docker运行所需的环境变量bash脚本,如果成功启动,会出现一$提示符。
使用boot2docker ssh命令可以进入VM。稍后需要用到该命令进行一些基础配置。
现在可以直接使用docker命令了。
在终端执行命令docker run hello-world,回车。若运行正常,会输出如下内容:
<code>$ docker run hello-world Unable <span>to</span> find image <span>'hello-world:latest'</span> locally Pulling repository hello-world <span>91</span>c95931e552: Download complete a8219747be10: Download complete Status: Downloaded newer image <span>for</span> hello-world:latest Hello <span>from</span> Docker. This message shows that your installation appears <span>to</span> be working correctly. To generate this message, Docker took <span>the</span> following steps: <span>1.</span> The Docker client contacted <span>the</span> Docker daemon. <span>2.</span> The Docker daemon pulled <span>the</span><span>"hello-world"</span> image <span>from</span><span>the</span> Docker Hub. (Assuming <span>it</span> was <span>not</span> already locally available.) <span>3.</span> The Docker daemon created <span>a</span><span>new</span> container <span>from</span> that image which runs <span>the</span> executable that produces <span>the</span> output you are currently reading. <span>4.</span> The Docker daemon streamed that output <span>to</span><span>the</span> Docker client, which sent <span>it</span><span>to</span> your terminal. To <span>try</span> something more ambitious, you can run <span>an</span> Ubuntu container <span>with</span>: $ docker run -<span>it</span> ubuntu bash For more examples <span>and</span> ideas, visit: <span>http</span>://docs.docker.com/userguide/ </code>
了解容器与镜像
以命令docker run hello-world 为例:
容器就是一个简化版的Linux操作系统,镜像就是装载到容器中的软件集合,此命令执行后,Docker会按照顺序发生以下行为:
a. 检查是否已安装hello-world镜像
b. 若未安装,则从Docker远程仓库(Docker Hub)下载该镜像
c. 加载该镜像到容器中,并运行。
创建Doker PHP容器,启用PHP开发环境
Docker Hub中有个人开发者提供的镜像,也有公司、组织结构上传的官方镜像,你可以使用Docker Hub的镜像,也可以使用自己本地私有的镜像(如local.registry.com:5000/php)。以PHP开发环境的搭建为例,继续说明Docker命令的使用方法。
这里使用的是自建私有镜像(已经集成Linux+PHP+Apache),私有镜像地址为:172.16.100.71:5000/php
1、设置Windows系统、boot2docker VM的host
a. 设置Windows系统本地host
设置Windows系统本地host主要是为方便在CMD命令提示符中进行操作。若是在Git Bash中操作则可以选择略过Windows系统本地host设置。
位置:C:\Windows\System32\drivers\etc\hosts
在文件中增加一行 172.16.100.71 local.registry.com
b. 设置boot2docker虚拟机的host
通过boot2docker ssh命令进入虚拟机,然后执行命令:
sudo vi /etc/hosts
在文件中增加一行: 172.16.100.71 local.registry.com
exit
也可使用组合命令:
<code>boot2docker ssh <span>"echo $'172.16.100.71 local.registry.com' | sudo tee -a /etc/hosts"</span></code>
2、检查设置环境变量
在Git Bash中输入:
<code><span>export</span></code>
查看是否已自动设置环境变量:DOCKER_HOST,DOCKER_CERT_PATH,DOCKER_TLS_VERIFY
boot2docker shellinit 可以显示Docker客户端的环境变量,所以可使用以下命令自动设置环境变量
<code><span>eval</span><span>"<span>$(boot2docker shellinit)</span>"</span></code>
若此命令不能成功设置,需要输入以下命令手动添加:
<code><span>export</span> DOCKER_HOST=tcp:<span>//192.168.59.103:2376</span><span>export</span> DOCKER_CERT_PATH=/c/Users/Administrator/.boot2docker/certs/boot2docker-vm <span>export</span> DOCKER_TLS_VERIFY=<span>1</span></code>
执行后输入export 查看是否写入成功。
若要使得Windows自身的CMD中也可以操作Docker命令,在cmd中键入以下命令:
<code><span>set</span> DOCKER_HOST<span>=</span>tcp:<span>//192.168.59.103:2376</span><span>set</span> DOCKER_CERT_PATH<span>=</span>C:/Users/Administrator<span>/</span><span>.</span>boot2docker/certs/boot2docker<span>-vm</span><span>set</span> DOCKER_TLS_VERIFY<span>=</span><span>1</span></code>
执行后输入set 查看是否写入成功。
不过通过set命令设置的环境变量是临时有效的,当关闭cmd命令行窗口后就不再起作用。
永久性环境变量的设置方法是:“计算机-属性-高级系统设置-高级-环境变量”,新建上述三个系统变量并填写对应值。设置完成后重新打开CMD即可生效。
另外,如果想在CMD要运行boot2docker ssh等命令,还需要设置Git相关的环境变量。方法是:
<code>set PATH=<span>%PATH</span><span>%;</span><span>"C:\Program Files (x86)\Git\bin"</span></code>
永久环境变量设置方法同上,在系统变量PATH字段追加以下目录(具体目录根据自己Git安装目录进行添加)
;C:\Program Files (x86)\Git\bin;
然后重新启动cmd即生效。
3、设置–insecure-registry选项
从docker 1.3.1开始,连接不安全的私有镜像,默认是不允许的。现在我们要下载自建的私有镜像,需要通过以下方式设置:
<code>boot2docker ssh <span>sudo</span> vi /var/lib/boot2docker/profile</code>
增加一行
<code><span>EXTRA_ARGS=<span><span>"--insecure-registry local.registry.com:5000"</span></span></span></code>
保存,然后重启docker服务:
<code><span>sudo</span> /etc/init.d/docker restart</code>
也可以在Git Bash合并操作:
<code>boot2docker ssh <span>"echo $'EXTRA_ARGS=\"</span>--insecure-registry local.registry.com:<span>5000</span>\<span>"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"</span></code>
说明:local.registry.com:5000这样的私有镜像地址也可用IP地址代替。
tee命令参数 -a为追加内容到文件,视情况使用。
sudo /etc/init.d/docker restart命令有时会重启失败,所以我们可以通过以下命令观察docker进程的信息:
<code>ps -ef <span>|grep docker</span></code>
若docker主进程(/usr/local/bin/docker)PID比较小,且运行时间比较久,那么说明没有重启成功。需要强制杀死该进程后再重启。
<code><span>sudo</span> kill -<span>9</span> pid <span>sudo</span> /etc/init.d/docker restart</code>
最后通过ps -ef |grep docker命令再检查一遍进程号和运行时间,保证docker重启成功。
<code>ps -ef |<span>grep</span> docker <span>exit</span></code>
4、将私有镜像下载到本地
<code>docker pull local<span>.registry</span><span>.com</span>:<span>5000</span>/php</code>
在镜像运行前,先将其下载到本地,如果报错,参照之前步骤或错误处理进行解决,解决后继续执行后续步骤
5、检查、设置虚拟机共享文件夹
VirtualBox默认将宿主机目录C:\Users作为共享文件夹,并自动挂载到虚拟机c/Users路径。所以一般情况下我们通常选择将数据放在宿主机C:\Users目录,然后通过docker命令挂载到容器。但作为Windows用户,大家的C盘常作为系统盘,关键数据放在C盘是比较危险的,一旦Windows系统损坏无法启动有可能造成数据丢失。
所以,我们想到:能不能自己添加其他盘符下的共享文件夹,挂载到容器?
当然可以!!!步骤有些繁琐,继续往下看。
经过尝试,在C:\Users目录创建指向其他盘符共享文件夹的快捷方式这个方法是行不通的。
下面是正确的操作步骤:
打开boot2docker虚拟机GUI,点击“设置”-“共享文件夹”,在“固定分配”菜单右键“添加共享文件夹”,如图:
a. 执行boot2docker ssh 进入虚拟机,先确定要挂载到的目录,若目录不存在需要手动创建:
<code>boot2docker ssh <span>sudo</span> mkdir -p /f/projects/phpdev</code>
b. 创建要挂载到的目录后,执行以下命令进行共享文件夹挂载。
<code><span>sudo</span> mount -t vboxsf f/projects/phpdev /f/projects/phpdev</code>
或
<code>sudo mount <span>-t</span> vboxsf <span>-o</span> uid<span>=</span><span>1000</span>,gid<span>=</span><span>50</span> f/projects/phpdev /f/projects/phpdev</code>
如下图:
mount完成后退出, boot2docker ssh重新进入虚拟机,查看宿主机共享文件夹是否同步到挂载目录。
从图中可以看到,宿主机本地目录F:\projects\phpdev下的文件/文件夹已经同步显示到当前虚拟机挂载目录下,即/f/projects/phpdev路径下。
由于下文步骤六的docker容器是将/f/projects/phpdev挂载到容器Linux环境的/var/www/html路径,这一步操作就是为了接下来步骤做准备。
我们一般情况下,为了保证数据安全性和完整性,不会在docker创建的容器环境中永久保存数据。常见的方法是将本地宿主机的文件系统映射到容器环境的文件系统,这样能确保容器环境中生成的数据直接保存在用户主机的磁盘,而不会由于容器损坏或未及时将容器持久化而造成数据丢失。
根据boot2docker官方(https://github.com/boot2docker/boot2docker)的描述,boot2docker内置了一个专门用于虚拟机文件夹共享的客户端增强包(VirtualBox Guest Additions)。
若以下共享文件夹名称存在,则该共享文件夹则自动挂载到以下位置:
Users 挂载到 /Users
/Users挂载到 /Users
c/Users挂载到 /c/Users
/c/Users挂载到 /c/Users
c:/Users挂载到 /c/Users
如果需要共享其他文件路径,则需要执行以下命令:
<code>boot2docker ssh sudo mount <span>-t</span> vboxsf your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location</code>
或
<code>boot2docker ssh mount <span>-t</span> vboxsf <span>-o</span> uid<span>=</span><span>1000</span>,gid<span>=</span><span>50</span> your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location</code>
注:Linux命令id可查看用户的UID(对应/etc/passwd)和GID(对应/etc/group)
不过,如果重启Windows,这些设置会被清除,需要再次进行挂载操作(当然,直接重启boot2docker-vm同样会清除所有配置数据)。如果你不想每一次都手动挂载,可以在/etc/fstab中添加一项
<code>your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location vboxsf rw,gid<span>=</span><span>100</span>,uid<span>=</span><span>1000</span>,auto <span>0</span><span>0</span></code>
或
<code>your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location vboxsf defaults <span>0</span><span>0</span></code>
这样就能够自动挂载了(需要安装客户端增强包VirtualBox Guest Additions)。
执行完手动挂载命令,正常情况下,/some/mount/location目录下已经可以显示共享文件夹的内容了。
由于boot2docker本身是虚拟机,docker也作为虚拟机环境,要使用docker run -v path1:path2成功挂载,实际需要进行两步映射:共享文件夹先由宿主机挂载到boot2docker虚拟机,再由boot2docker虚拟机挂载到docker容器环境。
挂载前先建立挂载目录:
<code><span>sudo</span> mkdir -p /some/mount/location</code>
然后再执行上述mount挂载命令。
卸载共享文件夹,使用命令sudo umount -f /f/projects/phpdev
注意:
卸载共享文件夹需要先退出挂载目录,再卸载,否则会报错:
umount: can’t forcibly umount /f/projects/phpdev: No such file or directory
同时要注意卸载目录一定要写对,注意盘符F前的斜线/,如果要卸载的目录没有挂载过,则会报错:
umount: can’t forcibly umount /f/projects/phpdev: Invalid argument
6、根据所提供镜像,创建并运行一个容器
根据拉到本地的私有镜像(Linux+Apache+PHP集成镜像),创建并运行一个容器:
<code>docker run <span>-d</span><span>-p</span><span>8000</span>:<span>80</span><span>-p</span><span>2222</span>:<span>22</span><span>--</span>name php <span>-v</span> /f/projects/phpdev:/<span>var</span>/www/html <span>local</span><span>.</span>registry<span>.</span>com:<span>5000</span>/php</code>
其中80端口是HTTP/Nginx默认端口,22端口是Linux SSH默认端口。以后台运行方式,将宿主机本地目录/f/projects/phpdev挂载到容器。
注意:
若在Windows系统的Git bash下执行会挂载失败报错,因为msysgit会将/c/Users这样的目录自动转为c:\Users,所以需要使用双斜线,Git bash中输入命令为:
<code>docker run <span>-d</span><span>-p</span><span>8000</span>:<span>80</span><span>-p</span><span>2222</span>:<span>22</span><span>--</span>name php <span>-v</span><span>//f//projects//phpdev:/var/www/html local.registry.com:5000/php</span></code>
然后,通过docker ps 命令,可以查看当前运行中的容器。
<code><span>$ </span>boot2docker.exe ip <span>192.168</span>.<span>59.103</span></code>
我们可以通过ssh进入到当前php容器,也可使用XShell等SSH工具连接。
SSH登录命令为:
<code>ssh -p <span>2222</span> root<span>@192</span>.<span>168.59</span>.<span>103</span></code>
注:boot2docker ssh的账号密码为user/docker ,私有镜像为root/hellonihao
SSH登录后就可以看到我们熟悉的Linux目录结构了。
如果本地没有phpdev文件夹将会自动创建,在该目录下新建个phpinfo.php测试文件,用于输出php配置信息。
Docker的宿主机是boot2docker的虚拟机,因此需要使用虚拟机的ip进行访问,获取ip方式为boot2docker ip。
所以上述phpinfo.php文件访问地址:192.168.59.103:8000/phpinfo.php
举例,仅根据centos基础镜像建立一个容器,并建立一个数据卷/data,命令如下
<code><span>$</span><span>docker</span><span>run</span><span>-</span><span>it</span><span>-</span><span>-</span><span>rm</span><span>-</span><span>-</span><span>name</span><span>centos</span><span>-</span><span>-</span><span>volume=/data</span><span>local</span><span>.</span><span>registry</span><span>.</span><span>com:5000/centos</span><span>/bin/bash</span></code>
注意:在Git Bash需要用双斜线,执行
<code><span>$</span><span>docker</span><span>run</span><span>-</span><span>it</span><span>-</span><span>-</span><span>rm</span><span>-</span><span>-</span><span>name</span><span>centos</span><span>-</span><span>-</span><span>volume=//data</span><span>local</span><span>.</span><span>registry</span><span>.</span><span>com:5000/ce</span><span>ntos</span><span>//bin//bash</span></code>
将宿主机目录挂载到数据卷,命令如下:
<code>$ docker run <span>-it</span><span>--</span>rm <span>--</span>name centos <span>-v</span> /c/Users/phpdev:/<span>data</span><span>local</span><span>.</span>registry<span>.</span>com:<span>5000</span>/centos /bin/bash </code>
注意:在Git Bash下需要用双斜线,即:
<code><span>$ </span>docker run -it --rm --name centos -v /<span>/c/</span><span>/Users/</span><span>/phpdev:/data</span> local.registry.<span>com:</span><span>5000</span>/centos /<span>/bin/</span><span>/bash </span></code>
附其他常用命令:
docker rm -f php
docker ps -l
docker images -a
docker rmi
docker stop
docker run
docker kill
以上是docker for Windows版本的安装方法和docker使用步骤的介绍。如果有错误疏漏,欢迎留言指正,一起探讨学习docker。
下一篇会分享介绍docker安装使用中常见错误的处理方法。
参考文章:
http://docs.docker.com/userguide/ “docker官方文档-用户指南”
https://github.com/boot2docker/boot2docker “Boot2docker官方文档”
http://blog.pavelsklenar.com/5-useful-docker-tip-and-tricks-on-windows/
本文来自于CSDN博客,转载请注明出处,谢谢!
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了Docker for Windows安装与Linux+PHP开发环境搭建(一),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。