1.什么是Docker?

Docker是一个开源的项目,它是一个在Linux的虚拟机上通过提供抽象化和自动化附加层并且以此来在软件容器内自动部署应用环境的工具。Docker同时还可以打包应用,并且依赖于一个虚拟容器就可以在任何一个Linux服务器上运行。

2. 在Windows上安装Docker

→ 下载Docker - Docker Toolbox.

→ 运行.exe文件并且按步骤安装. 我将它装在了 D:\DockerToolbox.

→ 在其中一步你会被询问选择安装哪些Docker组件。我选择了默认选项:

→ 在安装过程我还同意安装了一些Oracle附加组件。

→ 最终,Docker安装成功!

在安装完Docker Tollbox之后,你会在你的桌面上发现下面三个图标:

当我试着打开Docker Quickstart的时候,由于我没有任何的虚拟机,Docker尝试以我的名义默认安装一个虚拟机,在操作期间,我被提示我的虚拟化被禁用了,为了启用虚拟化,我重新启动了我的电脑进入了BIOS。在启用了虚拟化以后便成功进入了Docker Quickstart Terminal。Docker在做了一些初始化准备工作以后便提醒我一个默认的机器被创建并且在运行中,所以我打开我的Docker虚拟机并且找到了它:

提示: Docker终端并不是运行在标准的Windows环境中,而是运行在一个特殊的bash环境。Bash环境又需要Docker的安装。

再次打开Docker Quickstart终端你会发现和下图类似的窗口:

现在,让我们试着运行一个hello world容器($docker run hello-world),如果你的准备工作都做好了,你会得到下面的结果:

3. 通过Windows的命令提示符创建一个新的Docker

现在,在Windows上安装了一个Docker机器以后,你也许想创建一个新的Docker机器。所以你可以按照以下步骤来操作:


3.1.为了通过Windows的命令提示符创建一个新的Docker机器,你需要在你的环境变量中设置ssh.exe。ssh.exe在Git\bin文件夹中,通常被安装在C:\Program Files or C:\Program Files(x86,所以我打开了命令提示符并且将ssh.exe添加在了PATH环境变量中。

命令: set PATH=%PATH%; C:\Program Files\Git\bin

3.2.现在,我将使用同样的virtualbox驱动去创建一个新的机器,命名为php-machine。

命令: docker-machine create --driver virtualbox php-machine

3.3. 下一步,就像你在上图看到的一样,我们需要通过刚才创建的php-machine去链接Docker。

命令: docker-machine env my-machine

3.4. 这一步,要执行上图中的一条新命令。

命令: FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd my-machine') DO %i

3.5. 现在,我们可以通过下面的命令列出已经安装的Docker机器。请注意,刚才安装的php-machine已经被添加并且在运行中。

命令: docker-machine ls

你可以很轻易的开启/关闭你的Docker机器:

开启命令: docker-machine start php-machine

关闭命令: docker-machine stop php-machine

提示: 查看所有的docker-machine命令可以用以下方式:

命令: docker-machine --help

4. 在Apache上使用基础docker镜像运行PHP应用

在创建了一个docker机器以后,我们也仅仅只是有了一个操作系统,就像拥有了一个Linux,我们还需要安装相应的环境并且配置正确去运行PHP,就像Apache和PHP这对好搭档一样。在今天讨论的内容中,这种环境和配置需要安装在我们的docker机器中,就是我们的php-machine。Docker允许安装通过镜像安装应用。一个Docker镜像是在一个Dockerfile的基础上建立的,这里有一个文本文件包含了一个用户可能用到的所有创建一个镜像的命令(Dockerfile reference)。通常,我们可以为Apache和PHP创建一个Dockerfile,所以今天让我们从零创建一个Apache和PHP的Docker镜像,我们可以去Docker Hub上寻找,Docker Hub是一个用来让开发者分享和上传他们自己镜像的一个云服务器。幸运的是,我们可以在Docker Hub找到我们所需的镜像文件,或者是一个建立其他镜像的基础文件。其中Docker Hub上就有一个我们所需要的在Apache上运行PHP应用的镜像:tutum/apache-php:。你可以在Docker Hub的主页上搜索这个镜像以及其他的镜像文件。上面所说的镜像文件将会在你的Docker机器中安装Apache和PHP。如果你想使用Docker Hub上的镜像文件,你可以按照以下步骤来安装:

4.1. 通过docker pull命令从Docker Hub上获得镜像

命令: docker pull tutum/apache-php

4.2. 通过docker pull命令就可以在你的php-machine上安装 tutum/apache-php镜像了。在进行下一步之前,我们需要检查tutum/apache-php镜像是否被创建了并且没有容器在运行它。为了完成这一步,使用下面的docker images 和dockers ps命令:

命令: docker images

命令: docker ps

4.3. 现在,让我们来测试一下刚才安装的镜像文件。输入以下命令:

命令: docker run -d -p 80:80 tutum/apache-php

4.4. 打开你的浏览器,并且在地址栏中输入: http://192.168.99.102,你将会看到下面的tutum Hello World!界面:

提示 192.168.99.102是Docker的地址,可能有别与你自己测试时的地址。

4.5. 现在你可以检查一下运行当中的容器,你会发现我们的容器已经在运行中:

命令: docker ps

5. 从Dockerfile创建运行一个Docker镜像并且加载一个典型的PHP应用

Tutum/apache-php镜像同时也可以用来作为一个创建典型PHP应用的镜像,在我们今天得案例中我们将会创建一个简单的 phpinfo()应用。但是首先我们需要创建文件夹(你可以设置你自己的文件夹结构),就像你在下图看见的一样。我在D:\创建了我的PHP应用文件夹:PHPApps,并且包含了Dockerfile文件和sample文件夹。Sample文件夹包含了PHP文件:info.php。

info.php文件会输出一些关于PHP配置的信息:

在我们的D:\PHPApps文件夹中创建一个Dockerfile文件,并且输入以下内容:

Dockerfile:

FROM tutum/apache-php

MAINTAINER Octavia Anghel

# configure /app folder with sample application

ADD sample/ /app

在从上面的Dockerfile文件引入镜像之前,我们需要先建立这样的一个文件。所以我们需要先定位到我们的Dockerfile文件所在的位置(我的是D:\PHPApps\),然后执行下面的命令(镜像的名称是 angheloctavia/phpinfo)。

命令: docker build -t angheloctavia/phpinfo

现在让我们来检查一下angheloctavia/phpinfo是否被成功创建了。运行docker images命令就可以检查了。你可以在下面的图片中看到,我有三个镜像:最近的镜像是 angheloctavia/phpinfo ,另外两个是hello-world和tutum/apache-php。

命令: docker images

现在让我们来测试一下刚才创建的镜像。运行下面的命令:

命令: docker run -d -p 80:80 angheloctavia/phpinfo

打开你的浏览器,在地址栏输入http://192.168.99.102/info.php,你会看到下面图片上的内容:

请注意PHP是运行在Ubuntu上的。

6. 从Docker Hub上推送/获取 angheloctavia/phpinfo的Docker镜像

为了从Docker Hub上获取/推送Docker镜像,我们需要开启我们之前建立的php-machine。就像前文所说的,我们可以通过docker-machine命令来开启docker机器,或者点击你的虚拟机的开始按钮来开启你的php-machine。

在之前的章节中,我们已经创建了一个用来运行PHP脚本的Docker镜像(angheloctavia/phpinfo)。为了和其他用户分享这个镜像,我们需要在Docker Hub上先注册一个账号。确保你的账号ID是你镜像中的第一部分内容,比如我的ID是angheloctavia,你可以在下面的图片中看到。同时确保你提供的正确的邮箱,因为你需要通过邮箱来确认验证。

在你创建了账号并且登录以后,你会跳到创建资料页面。正如你在下图所看到的,我们需要选择一个命名(在本例中命名为angheloctavia)和项目名称(你镜像名称的第二部分,本例中为phpinfo)。如果你喜欢,同样你可以添加一些项目描述,但是这一步你后期也可以添加,然后可以选择你的项目是私人的还是公开的。

在点击了创建按钮以后,你可以看到以下内容:

到了这一步,我们就可以将我们的镜像进行推送了。返回你的php-machine控制台并以这个项目登录。登录时你需要提供你在Docker Hub上的用户名、邮箱以及密码:

在认证结束之后(认证需要花费一些时间),你可以查看你项目中的一些可用的标签名称。当我们推送镜像的时候我们还没有指定标签,所以会产生一个thrlatest标签(指定完标签之后别忘记刷新你的页面):

如你在下图所看到的,想要获取 angheloctavia/phpinfoDocker镜像,你需要输入docker pull angheloctavia/phpinfo命令,就像我们在上文提到的获取 tutum/apache-php镜像一样。确保你在输入命令的时候你的Docker虚拟机处于运行状态。

总结

这篇文章向你展示了如何在Windows上安装Docker,如何创建一个Docker机器,如何从Docker Hub推送/获取一个镜像还有最重要的——如何使用创建的Dockerfile运行PHP脚本文件。