如今,每个人似乎都在使用Docker。 随着Microsoft致力于将其集成到Windows中,整个主题变得更加有吸引力。 由于许多中间件开发人员都在运行Windows,所以我想自己尝试一下,并在使用Docker容器,主机和来宾以及命令行选项的过程中,尽可能减少构建和运行映像的过程中提供更多提示。 。 Arun在最近的博客文章中对Docker进行了很好的介绍 。 我在这里跳过了这个,直接进入了它。
安装Boot2Docker
Docker Engine使用特定于Linux的内核功能,因此要在Windows上运行它,我们需要使用轻量级虚拟机。 有一个名为Boot2Docker的助手应用程序,它可以使安装和运行一切变得非常简单。 第一步是下载最新版本的二进制安装程序并执行它。 它将安装Oracle VirtualBox , MSYS-git ,boot2docker Linux ISO和Boot2Docker管理工具。 下一步是运行Boot2Docker启动脚本(安装后桌面上会有一个小鲸鱼图标)。 它将设置Docker主机并通过ssh连接到主机。 如果要在以后的状态下再次执行此操作,只需键入:boot2docker ssh。
目前没有基于Windows的系统的Docker客户端。 因此,ssh基本上是一种解决方法,它可以很好地工作,并且可能也是一种众所周知的方法。 随着微软最近宣布与Docker建立新的合作伙伴关系,这种情况可能很快就会改变。 如果要构建自己的Docker客户端,请在Khalid Mouss的博客文章中找到有关此信息的更多信息。
给您的一些提示。 您需要在PATH中具有%MSYS-git_INSTALL%/ bin目录。 它包含一个cmd行ssh客户端。 如果要使用PUTTY,请确保使用用户“ root”和密码“ tcuser”连接到Docker主机。
如果您正在运行任何类型的VPN客户端,则绝对会遇到麻烦。 Docker通常以仅主机模式运行,并且已安装的VPN客户端将其转换为NAT。 转到VirtualBox管理控制台,打开boot2docker-vm的设置,并为Docker API添加端口转发规则。 我们稍后将需要它。
一个小警告:默认的Docker API端口是2375。在我的情况下,这不是真的,因此我必须首先找出Docker API正在侦听的端口。 使用主机上的netstat执行此操作。 因此,在此示例中,我基本上使用了直接来宾来托管2376上的映射。 全做完了。 现在,您可以启动hello world示例了。 只需键入“ docker run hello-world”,然后等待“来自Docker的Hello”即可。 现在您可以开始了。
如果您需要Boot2Docker的完整参考,这是一个非常有用的网站 。
为什么我们确实要使用Docker?
最近关于Docker的炒作是什么? 它有一段历史,从长远来看,它可能仅通过定义可以部署的完整软件包就可以支持微服务部署。 包括基础架构要求。 将Docker容器视为可以运行定义的映像的应用程序服务器。 并将映像视为大型Maven存档,其中不仅包含您的应用程序,还包含操作系统以及运行应用程序所需的所有部件。 不管喜欢与否,但是每个人都在玩弄它,并且归根结底,这是解决一些问题的一种方法。 我并不是在告诉您,我立即爱上了它,但至少我希望它能帮助我进行演示和展示。 而且,我只需要在Java EE应用程序中定义一堆依赖项和Maven插件,然后神奇地运行的一切就是我喜欢的东西。 但是,让我们看看它需要什么以及如何去做。
已经可用的图像–例如WildFly
说到图像:有一堆图像准备就绪。 在JBoss,我们为您准备了一个特殊的微型站点,其中包含我们准备运行的所有Docker映像 。 如果要使用它们中的任何一个,基本上只需将它们安装在容器中并启动它。 这样,您就可以运行任何组件,基本上就像在计算机上本地运行该组件一样。 唯一的区别是,它运行在您的“ Docker主机”中。 如果要启动WildFly,只需执行以下Docker命令:
docker run -it -p 9990:99 jboss/wildfly
Docker自动提取相关位(可能要花一些时间),然后从该映像启动一个容器。 端口映射实际上是在主机和容器之间。 还记得上面的VPN问题吗? 如果您想尝试,也请确保在VirtualBox中添加端口映射。 结果非常清楚:您现在在容器中运行了WildFly。 映射所需的端口并像通常使用远程实例一样使用它。 如果您想要更多图像,则可以浏览和搜索Docker Hub 。 已经有很多了。
那样使用Docker并不是其背后的想法。 实际上,映像不仅应包含基本组件,而且还应包含完整配置的应用程序。
建立自己的图像–各种方式
因此,您需要构建自己的图像。 有不同的方法可以做到这一点。 您可以更新从图像创建的容器,然后将结果提交到图像。 或创建自己的Dockerfile来指定创建映像的说明,或者可以使用Maven之类的构建工具来创建映像。 Dockerfile方法非常强大,并且需要大量的输入和可视化处理。 我一直在寻找一种从Maven创建图像的简单方法。 因为,这还是我用于项目的方式。
使用Maven构建Docker映像
有很多不同的Maven插件可以提供我一直在寻找的这种功能。 在这一天结束时,Fabric8团队使用了Maven的多克-插件通过由罗兰·胡斯 。 该插件可以构建和发布图像,还可以启动和停止容器以进行集成测试和开发。 我在设置它时有些挣扎,但我仍在尝试将其集成到我的应用程序中的最佳方法,因此,这基本上是我的发现和解决方案的第一列表,并且没有完整的用户指南。 请查看示例和插件的官方用户指南以获取更多详细信息。 我将在我的下一篇博客文章中构建一个完整的示例,并逐步引导您。
DOCKER_HOST环境变量
这个插件正常工作的第一件事显然是DOCKER_HOST环境变量。 由于Windows的整体体验目前还比较笨拙,因此在启动vm时未设置此变量。 好消息是,您已经通过安装和执行端口映射了解了所有需要了解的内容。 因此,您基本上只需进行设置即可:
set DOCKER_HOST=tcp://127.0.0.1:2376
确保将maven-docker-plugin中的常规<configuration>部分指向相同的
<dockerHost>https://127.0.0.1:2376</dockerHost>
证书和HTTPS连接
从1.3.0版本开始,与boot2docker一起使用时,Docker远程API需要通过SSL和证书进行身份验证进行通信。 因此,您需要配置证书。 在.boot2docker / certs文件夹中找到它们,并确保也将此路径添加到您的插件配置中。
<certPath>C:/Users/myfear/.boot2docker/certs/boot2docker-vm</certPath>
现在就这样。 如果您也有关于如何在Windows上使用Docker的经验,请告诉我。