Java开发人员:如何穿过Docker现象这片“丛林”

jopen 10年前

    如今我要话要说:一段时间以来,我一直迟迟没有认真打量Docker,原因主要是缺少时间,再加上我们的赞助商兼母公司ZeroTurnaround最近 决定完全退出运维(Ops)行业,致力于开发者工具。作为开发昔日版本自动化工具的工程师,我在关注虚拟化或大型集群管理工具时往往兴趣不太大。

    于是我现在关注Docker领域可能有点晚,不过今天我还是要谈谈Java开发人员如何能够穿过Docker现象这片丛林,更容易了解使用这种热门新技术来简化开发流程的种种好处。

    我们在本文中将探讨你可以用Docker来完成什么以及如何认识Docker这项新兴技术。

    安装和入手

    让人大为意外的是,官方网站就有安装Docker的操作说明(https://docs.docker.com/installation/mac /#installation)。我不想具体介绍获得Docker所需的具体步骤,所以为了让这篇文章立足于更宏观的层面,这一章节将非常简短。

    要是你很幸运,在运行一款直接支持Docker的操作系统(言外之意是一些Linux发行版),你就可以开始上手了。使用你青睐的程序包管理器来安装Docker,然后证实这个命令正常运行:

 Java开发人员:如何穿过Docker现象这片“丛林”


    要是你不是那么幸运,属于运行Windows或OS X的这一类人,那也大可不必担心。boot2docker项目(http://boot2docker.io)会为你启动一个小型的轻量级Linux虚拟机,那样你就能享受使用Docker的乐趣了。

    安装boot2docker的过程很容易,已为我们准备好了针对特定操作系统的安装程序。运行安装程序也很简单,下面列出了面向Mac用户的操作说 明:https://docs.docker.com/installation/mac/#installation。

    使用上述命令证实boot2docker正常运行,通过ssh进入到boot2docker,运行它:

 Java开发人员:如何穿过Docker现象这片“丛林”

    就是这样,我们已运行了第一个Docker应用程序。它没有任何花哨的功能,只是回送一个消息而已,但这是为有用的系统安装基础设施的一个重要步骤。

    那些重要的容器

    虽然我们喜欢Groovy这门语言,但我们根本不是一家使用Groovy的公司,于是我们将着重介绍让Java在容器中运行。

    好消息是,即便在这里,一切工作都为我们做好了。有一个官方软件库:dockerfile/java(https://github.com /dockerfile/java),附有面向Java的Docker映像。确切地说,这些并不是映像,而是告诉Docker如何创建实际映像的 Docker文件(dockerfile)。

    如果你看一下面向Java 8的Docker文件(https://github.com/dockerfile/java/blob/master/oracle-java8 /Dockerfile),立马就会注意到:Java 8映像基于常规的Ubuntu映像,你可以像对待平常的Ubuntu机器那样来安装Java。

    另外,它定义了JAVA_HOME以及需要执行的默认Docker命令:

 Java开发人员:如何穿过Docker现象这片“丛林”

    现在,我们的Docker容器已配备了Java,能够运行Java命令了:

 Java开发人员:如何穿过Docker现象这片“丛林”

    我们可以运行在我们的Docker环境中执行的随机性Java命令。它并不为此使用标准的虚拟机,所以你根本不用担心虚拟机开销问题。

    瞧瞧这有多么简单、多么易于移植?!

    进一步个性化

    我知道你在想什么:这相当酷,但现在我不得不做一个Docker文件,以便下载和安装Maven,克隆我的项目软件库,然后构建它,并且在这个过程中下载 一半的互联网。别担心,Docker可以轻松访问你的主机文件系统,所以除了对Java的访问外,你没必要提供太多的东西。

    的确,你可以拥有它。Linux显然具有作为Docker原生操作系统的优点,所以映射起来非常顺畅无阻。Docker命令只要接收一个参数:-v,即可让目录映射到容器里面的某个对象。

    比如说,下面这个命令将与容器共享我的~/repo目录。

 Java开发人员:如何穿过Docker现象这片“丛林”

    OS X用户也不必担心,因为自boot2docker 1.3.1以来,你的主目录默认情况下就与boot2docker虚拟机共享,所以-v也会正常发挥作用:

 Java开发人员:如何穿过Docker现象这片“丛林”

    Windows用户不用担心,完全有一个版本可以让你确保正常运行(参阅http://www.incrediblemolk.com/sharing- a-windows-folder-with-the-boot2docker-vm/)。简而言之,你不得不安装VirtualBox Guest Additions,并且在你的主机和boot2docker虚拟机之间手动映射一个文件夹。如果你明白自己在做什么,或者遵守实用操作指南,就像上面那 个链接,这部分相当简单直观。

    现在如何在Docker容器里面运行实际的Java应用程序已相当一目了然了。你的源代码位于主机上,你同样可以在主机上编辑源代码;甚至可以在主机上构 建源代码,因为运维活动并不从源代码开始,而是从预制构件开始。之后,它就跟将它放到正确的位置,使用正确的命令来启动它一样简单。

    下面是Java项目的例子,我将使用Spring Boot(http://projects.spring.io/spring-boot/)来启动该应用程序。

    所以通常来说,我在自己的机器上会这样运行它:

 Java开发人员:如何穿过Docker现象这片“丛林”

    另外证实该应用程序在端口8080上运行。想在Docker容器里面运行它,我只要做同样的事情,不过需要提供端口映射,那样我就能从主机访问它:

 Java开发人员:如何穿过Docker现象这片“丛林”

    该命令的输出结果非常容易预测,它启动Spring Boot应用程序,并输出显示所有初始化内容。为了简便起见,这里就不附上了,但它看起来就像这个pastebin。

 Java开发人员:如何穿过Docker现象这片“丛林”

    瞧!我现在可以通过主机浏览器来访问它了!只要使用下面这个命令,就很容易获得确切的IP,boot2docker提供了被映射到docker的接口:

 Java开发人员:如何穿过Docker现象这片“丛林”

    结束语:Docker是一种对开发人员友好的运维工具

    我可以有把握地说,Docker是一种深思熟虑的工具,几乎一切都可以从命令行来加以访问。

    我们在本文中分析了如何从Docker容器入手,以便为Java项目建立一个易于移植的开发环境。这也许可以为新项目减少安装方面的难度,又不必牺牲通常 使用的环境为你提供的好处或性能:平常使用的集成开发环境(IDE)、自动化测试、JRebel(厚着脸皮做下广告)等工具及其他。

    对于Java开发人员而言,Docker有助于在一个干净的环境中隔离我们的应用程序,所以多少缓解了无法预测“是否可以在我的机器上运行”的问题。隔离 之所以很重要,是因为它减小了我们使用的软件环境的复杂性。另外,想得益于使用Docker,你没必要深入钻研容器世界,就可以开始将应用程序部署到成千 上万个节点。与开发人员的机器隔离开来是一大有利条件。

    Docker拥有直观的用户界面,进一步减小了这种复杂性,它已成为任何开发人员的一款出色工具。使用它的额外好处包括,它简化了运维人员的工作,而我们都知道这有多重要。

    本文来源:51CTO  布加迪编译

    英文原文链接:http://zeroturnaround.com/rebellabs/docker-for-java-developers-how-to-sandbox-your-app-in-a-clean-environme