当前位置:云计算技术专区 → 正文

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

责任编辑:editor005 |来源:企业网D1Net  2015-02-13 14:24:06 本文摘自:51CTO

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

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

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

安装和入手

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

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

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world

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

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

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

$ boot2docker ssh ______ o __/ Boot2Docker version 1.3.1, build master : 9a31a68 - Fri Oct 31 03:14:34 UTC 2014 Docker version 1.3.1, build 4e9bbfa docker@boot2docker:~$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world

就是这样,我们已运行了第一个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命令:

# 定义工作目录。
WORKDIR /data # 定义常用的JAVA_HOME变量 ENV JAVA_HOME /usr/lib/jvm/java-8-oracle # 定义默认命令。 CMD ["bash"]

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

docker run -it --rm dockerfile/java:oracle-java8 java -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

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

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

进一步个性化

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

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

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

docker run -v /Users/shelajev/repo:/opt/repo ubuntu ls -la /opt/repo/zt-zip

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

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/)来启动该应用程序。

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

shelajev@shrimp ~/repo/tmp/gs-spring-boot/complete master $ java -jar target/gs-spring-boot-0.1.0.jar

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

docker run -v /Users/shelajev/repo:/opt/repo -p 8080:8080 --rm dockerfile/java:oracle-java8 java -jar /opt/repo/tmp/gs-spring-boot/complete/target/gs-spring-boot-0.1.0.jar

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

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

open http://$(boot2docker ip 2>/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

关键字:DockerJavarepo

本文摘自:51CTO

x Java开发人员:如何穿过Docker现象这片"丛林" 扫一扫
分享本文到朋友圈
当前位置:云计算技术专区 → 正文

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

责任编辑:editor005 |来源:企业网D1Net  2015-02-13 14:24:06 本文摘自:51CTO

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

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

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

安装和入手

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

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

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world

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

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

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

$ boot2docker ssh ______ o __/ Boot2Docker version 1.3.1, build master : 9a31a68 - Fri Oct 31 03:14:34 UTC 2014 Docker version 1.3.1, build 4e9bbfa docker@boot2docker:~$ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world

就是这样,我们已运行了第一个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命令:

# 定义工作目录。
WORKDIR /data # 定义常用的JAVA_HOME变量 ENV JAVA_HOME /usr/lib/jvm/java-8-oracle # 定义默认命令。 CMD ["bash"]

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

docker run -it --rm dockerfile/java:oracle-java8 java -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

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

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

进一步个性化

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

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

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

docker run -v /Users/shelajev/repo:/opt/repo ubuntu ls -la /opt/repo/zt-zip

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

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/)来启动该应用程序。

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

shelajev@shrimp ~/repo/tmp/gs-spring-boot/complete master $ java -jar target/gs-spring-boot-0.1.0.jar

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

docker run -v /Users/shelajev/repo:/opt/repo -p 8080:8080 --rm dockerfile/java:oracle-java8 java -jar /opt/repo/tmp/gs-spring-boot/complete/target/gs-spring-boot-0.1.0.jar

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

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

open http://$(boot2docker ip 2>/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

关键字:DockerJavarepo

本文摘自:51CTO

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^