当前位置: 首页 > 科技观察

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

时间:2023-03-17 17:07:47 科技观察

Java开发人员:如何在Docker现象的“丛林”中导航赞助商和母公司ZeroTurnaround最近决定完全退出操作和维护(Ops)行业,转而使用开发工具。作为过去开发自动化工具的工程师,我往往对虚拟化或大型集群管理工具不太感兴趣。所以我关注Docker空间可能有点晚,但今天我想谈谈Java开发人员如何穿越Docker现象的丛林,并更容易地理解使用这种热门新技术简化开发过程的好处.在本文中,我们将探讨您可以使用Docker做什么以及如何了解这项新兴技术。安装和上手比较意外的是官网有安装Docker的说明(https://docs.docker.com/installation/mac/#installation)。我不想详细介绍获取Docker所需的具体步骤,因此本节将非常简短,以使本文着眼于大局。如果您有幸运行直接支持Docker的操作系统(并且暗示某些Linux发行版),您就可以开始了。使用您最喜欢的包管理器安装Docker,然后验证此命令是否有效:$sudodockerrunubuntu:14.04/bin/echo'Helloworld'Helloworld如果您不那么幸运并且属于运行Windows或OSX的人的类别,则有不用担心。boot2docker项目(http://boot2docker.io)将为您启动一个小型、轻量级的Linux虚拟机,以便您可以享受使用Docker的乐趣。安装boot2docker的过程很简单,有为我们准备的特定于操作系统的安装程序。运行安装程序也很简单,此处列出了适用于Mac用户的说明:https://docs.docker.com/installation/mac/#installation。使用以上命令验证boot2docker是否正常运行,通过ssh进入boot2docker,运行:$boot2dockerssh##.######==#########===/""""""""""""""""\___/===~~~{~~~~~~~~~~~~~~~~/===-~~~\______o__/\\__/\____\______/________||________||_|___\__||______||________|'_\/_\/_\|__|__)/_`|/_\/__||//_\'__|||_)|(_)|(_)||_/__/(_||(_)|(__|<__/||_.__/\___/\___/\_|_____\__,_|\___/\___|_|\_\___|_|Boot2Dockerversion1.3.1,buildmaster:9a31a68-FriOct3103:14:34UTC2014Dockerversion1.3.1,build4e9bbfadocker@boot2docker:~$sudodockerrunubuntu:14.04/bin/echo'Helloworld'Helloworld就是这样,我们已经运行了我们的第一个Docker应用程序。它没有做任何花哨的事情,它只是回显一条消息,但这是为一个有用的基础设施设置的重要一步系统。那些重要的容器我们喜欢Groovy作为一种语言,但我们根本不是Groovy公司,所以我们将专注于让Java在容器中运行。好消息是即使在这里,一切都已完成我们。e官方存储库:dockerfile/java(https://github.com/dockerfile/java),带有用于Java的Docker映像。这些不完全是图像,而是告诉Docker如何创建实际图像(dockerfile)的Docker文件。如果您查看Java8的Dockerfile(https://github.com/dockerfile/java/blob/master/oracle-java8/Dockerfile),您会立即注意到:Java8映像基于常规的Ubuntu映像,你的Java可以像普通的Ubuntu机器一样安装。另外,它定义了JAVA_HOME和需要执行的默认Docker命令:#Definetheworkingdirectory。WORKDIR/data#定义常用的JAVA_HOME变量ENVJAVA_HOME/usr/lib/jvm/java-8-oracle#定义默认命令。CMD["bash"]现在,我们的Docker容器配备了Java,可以运行Java命令:dockerrun-it--rmdockerfile/java:oracle-java8java-versionjavaversion"1.8.0_25"Java(TM)SERuntimeEnvironment(build1.8.0_25-b17)JavaHotSpot(TM)64-BitServerVM(build25.25-b02,mixedmode)我们可以运行在我们的Docker环境中执行的随机Java命令。它不为此使用标准VM,因此您根本不必担心VM开销。看看这有多简单,有多便携?!进一步个性化我知道你在想什么:这很酷,但现在我必须制作一个Docker文件才能下载和安装Maven,克隆我的项目repo,然后构建它,并在此过程中下载一半的互联网。别担心,Docker可以轻松访问您的主机文件系统,因此您无需提供除访问Java之外的太多内容。确实,你可以拥有它。Linux显然具有作为Docker原生操作系统的优势,因此映射非常顺畅且无忧无虑。Docker命令只要接收一个参数:-v,就可以将目录映射到容器中的一个对象。例如,以下命令将与容器共享我的~/repo目录。dockerrun-v/Users/shelajev/repo:/opt/repoubuntuls-la/opt/repo/zt-zipOSX用户也不必担心,因为从boot2docker1.3.1开始,您的主目录默认链接到boot2docker虚拟机共享,所以-v也可以工作:Windows用户不用担心,有一个版本可以让你确保它工作(参见http://www.incrediblemolk.com/sharing-a-windows-folder-with-the-boot2docker-vm/)。简而言之,您必须安装VirtualBoxGuestAdditions并在您的主机和boot2dockerVM之间手动映射一个文件夹。如果您了解自己在做什么,或者遵循像上面的链接这样的实用操作指南,这部分就相当简单直观。现在已经很清楚如何在Docker容器中运行实际的Java应用程序了。你的源码在主机上,你也可以在主机上编辑源码;你甚至可以在主机上构建源代码,因为运维活动不是从源代码开始,而是从预制的工件开始。之后,只要将它放在正确的位置并使用正确的命令启动它就很简单了。下面是一个Java项目示例,我将使用SpringBoot(http://projects.spring.io/spring-boot/)来启动应用程序。所以通常,我在我的机器上像这样运行它:shelajev@shrimp~/repo/tmp/gs-spring-boot/complete?master?$java-jartarget/gs-spring-boot-0.1.0。jar还确认应用程序正在端口8080上运行。要在Docker容器内运行它,我只是做同样的事情,但提供端口映射以便我可以从主机访问它:dockerrun-v/Users/shelajev/repo:/opt/repo-p8080:8080--rmdockerfile/java:oracle-java8java-jar/opt/repo/tmp/gs-spring-boot/complete/target/gs-spring-boot-0.1.0.jar该命令的输出非常可预测,它启动了SpringBoot应用程序,输出显示所有初始化内容。为简洁起见,它没有附在这里,但它看起来像这个pastebin。看!我现在可以通过主机浏览器访问它了!只需使用以下命令,很容易得到准确的IP,boot2docker提供了映射到docker的接口:openhttp://$(boot2dockerip2>/dev/null)/结论:Docker是一个对开发者友好的传输我可以可以肯定地说,Docker是一个经过深思熟虑的工具,几乎所有东西都可以从命令行访问。在本文中,我们将分析如何从Docker容器入手,为Java项目建立一个易于移植的开发环境。这可以简化新项目的安装,而不会牺牲您通常使用的环境为您提供的好处或性能:您通常使用的集成开发环境(IDE)、自动化测试、JRebel(厚颜无耻地做广告)等等。对于Java开发人员来说,Docker有助于将我们的应用程序隔离在一个干净的环境中,因此在一定程度上缓解了不可预测的“它会不会在我的机器上运行”的问题。隔离很重要,因为它降低了我们使用的软件环境的复杂性。此外,要从使用Docker中获益,您无需深入研究容器世界即可开始将应用程序部署到数千个节点。与开发人员的机器隔离是一大优势。Docker通过其直观的用户界面进一步降低了这种复杂性,使其成为任何开发人员的绝佳工具。使用它的额外好处是它简化了操作人员的工作,我们都知道这有多么重要。英文原文链接:http://zeroturnaround.com/rebellabs/docker-for-java-developers-how-to-sandbox-your-app-in-a-clean-environme