适用于Java开发人员的Docker:在Docker上开发

本文是我们学院课程中名为《 面向Java开发人员的Docker教程 》的一部分。

在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Docker的应用程序。 我们涵盖了广泛的主题,从通过命令行的Docker到开发,测试,部署和持续集成。 通过我们简单易懂的教程,您将能够在最短的时间内启动并运行自己的项目。 在这里查看

1.简介

在本教程最后一部分中,我们学习了许多将Java应用程序打包(和运行)为Docker容器的方法。 在这一部分中,我们将更多地关注Docker如何以非常积极的方式影响我们的开发实践。

公平地讲, Docker在很多领域对开发人员都非常有帮助。 我们将重点讨论DockerIDE的集成,将IDE作为Docker容器运行,并了解一些有用的工具来管理和监视Docker环境。

2.在您的IDE中使用Docker

到目前为止,我们已经看到Docker的命令行工具非常强大,其用法非常简单。 但是,我们大多数人(开发人员)大部分时间都花在了我们最喜欢的IDE中 。 在调试会话中途在数十个窗口和终端之间切换,同时在应用程序逻辑中寻找难以重现的错误,可能会适得其反。

幸运的是,所有三个领先的Java开发IDE (即EclipseJetBrains IntelliJ IDEANetBeans)都通过便捷的UI视图或小部件提供了与Docker工具的集成。 让我们快速浏览这些IDE中的每一个,并仔细研究它们所提供的功能。

日食

到目前为止, Eclipse OxygenEclipse IDE的最新发布版本,它具有Linux Tools子项目(作为插件提供)提供的全面的Docker工具支持。 安装后,它将在Docker类别下提供四个其他视图。

Eclipse中的Docker视图

Eclipse中的Docker视图

这些视图中的每一个都公开了有关Docker容器或映像的一些细节,而Docker Explorer是这两者的多合一视图。

Docker Explorer视图

Docker Explorer视图

如果您仅对Docker容器感兴趣,可以使用专用的Docker Containers视图,该视图使用紧凑的基于表的表示形式。

Docker容器视图

Docker容器视图

同样,如果您只想列出Docker映像,则专用的Docker Images视图就在这里,可以满足您的需求。

Docker映像视图

Docker映像视图

最后但并非最不重要的一点是,有一个非常有用的视图称为Docker Image Hierarchy 。 它允许查看已构建图像的所有图层。 例如,在这里,我们可以看到如何jcg/spring-boot-webapp:0.0.1-SNAPSHOT名称为jcg/spring-boot-webapp:0.0.1-SNAPSHOT的标记图像(我们在本教程的上一部分中构建的示例之一)。

Docker映像层次结构

Docker映像层次结构

但是这些观点只是整个故事的一部分。 另一部分是一组新的Docker启动器,您可以使用它们来构建Docker映像并以Docker容器的形式运行Java应用程序(甚至完整的Docker Compose堆栈)。

Eclipse启动器

Eclipse启动器

如果您想了解更多关于上面讨论的所有视图和启动器的信息,以及一般而言,关于Eclipse中可用的Docker工具的更多信息 ,那么官方项目Wiki是一个很好的起点。

IntelliJ IDEA

JetBrains IntelliJ IDEA的最新版本为2017.2.6 ,以官方插件的形式提供Docker工具支持。 它在Ultimate EditionCommunity Edition都可用,我们将在本节中使用它。

安装插件后,新的Docker视图将可用,其中包含有关映像和容器的所有详细信息。

IntelliJ Idea中的Docker

IntelliJ Idea中的Docker

公平地讲,使用一个单一的,结构良好的视图并在附近(在不同的选项卡中)可用的大多数必需部件非常方便。

Oracle NetBeans

自从最新的8.2版本发布以来, NetBeansBase IDE插件中包含了Docker工具(您很可能一开始就将其激活)。 插件激活后,附加的Docker树节点将在“ Services视图中可用。

Netbeans中的Docker

Netbeans中的Docker

关于NetBeans中 Docker集成所需功能的相当不错的摘要和讨论已在官方社区Wiki上发布 。 如果您对此主题感到好奇或感兴趣,请检查一下。

3.在边缘:Docker中的IDE

如我们所见,大多数流行的Java开发IDE所提供的Docker工具已经足够了,甚至可以说是杰出的。 但是,如果我们试图突破极限并在几乎任何地方都可以在Docker中完全运行IDE呢? 如果听起来有点疯狂,那肯定可以,但是…

蚀澈 ,下一代IDE ,是在充分的程度杠杆集装箱化和运行完全上泊坞 。 在后台,它由REST(ful)Web API提供支持,并提供功能丰富的基于浏览器的IDE

日蚀车

日蚀车

这是一个非常有创意的年轻项目,具有极大的潜力,可以改变我们所知道的IDE的概念。 看到未来情况将如何发展将是非常有趣的,但是该技术已经可以评估。

4.那么调试呢?

调试过去,现在并且很可能将在发现,理解和解决程序中的缺陷或问题方面发挥关键作用。 而且,不管喜欢与否,无论Docker多么出色 ,它都无法使我们的应用程序摆脱漏洞。 如果您将Java应用程序作为Docker容器运行,则调试过程会有所改变, 这本出色的文章对此进行了详细说明。 它是如此全面,以至于无需在这里重复,只需选择您使用的IDE并阅读为您准备的精美教程。

5.管理与监测

尽管Docker命令行工具以及Docker Engine API可以让您完成可能遇到的任何任务,但我们许多人仍然更喜欢处理某种Web或图形UI。 显然,这是个人喜好,在本节中,我们将学习有关这方面的许多有趣的选择。

烤盘

我们要看的第一个工具是Portainer ,这是一个开放源代码的轻量级管理UI,可以轻松管理不同的Docker环境(例如Docker主机或Docker Swarm集群)。 Portainer本身作为轻量级Docker容器运行也就不足为奇了。 让我们运行一个:

$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

在Windows计算机上,命令看起来有些不同:

$ docker run -d -p 9000:9000 portainer/portainer

Portainer容器启动并运行后,您将可以通过位于http:// localhost:9000的漂亮简洁的Web UI对其进行访问(或者,如果您使用的是非本地Docker安装,则可以使用http://<docker-machine>:9000 )。

烤盘仪表板

烤盘仪表板

设置步骤完成后(如有必要),从简单的仪表板页面开始,您将导航到所讨论的Docker环境的多合一视图。 您肯定会识别出左侧列出的所有Docker对象(例如卷,网络,容器,图像等),因此您可以选择其中的任意一个以将其重定向到专用视图。

Portainer通过直观的Web界面公开的受支持的Docker功能列表令人惊讶。 如果您更喜欢UI工具而不是命令行工具, 那么Portainer可以为您提供一站式服务。

顾问

通常,在开发应用程序时,有必要获得关于容器正在发生的事情的更多见解,无论是谈论CPU,内存还是网络利用率。 幸运的是,这里有很多选择,我们将要讨论的非常有用的工具之一是cAdvisor (或完整版的容器顾问),它分析正在运行的容器的资源使用情况和性能特征。

cAdvisor 使容器用户了解其运行中的容器的资源使用情况和性能特征。 它是一个正在运行的守护程序,用于收集,聚合,处理和导出有关正在运行的容器的信息。 具体来说,对于每个容器,它保留资源隔离参数,历史资源使用情况,完整历史资源使用情况的直方图和网络统计信息。 此数据按容器和机器范围导出。 ” – https://github.com/google/cadvisor

有趣的是, cAdvisor不仅限于Docker ,还应支持几乎所有其他类型的容器。 对于Windows用户,可悲的是, cAdvisor在此平台上的支持有限 。 当然,尝试cAdvisor的最佳方法是将其作为Docker容器运行。

sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest

容器启动并运行后,您可以通过http:// localhost:8080访问cAdvisor Web UI(或者,如果您使用的是非本地Docker安装,则可以访问http://<docker-machine>:8080 )。

顾问

顾问

Web UI非常简单,但信息量非常丰富。 收集了许多有关每个正在运行的Docker容器的资源和进程以及Docker主机本身(CPU,内存,网络,存储等)的详细信息。 无论如何,它是了解您的容器在运行时如何消耗和管理资源的宝贵工具。

最后但并非最不重要的一点是,我们将使用ctop工具进行总结, 工具在一个类似top的界面中,为多个容器的实时指标提供了简洁明了的概述。

顶

ctop不仅具有摘要视图,而且还支持选择并集中于任何单个容器的选项。

还有更多……

Docker工具领域确实蓬勃发展,每天都有新的有趣项目涌现。 我们刚刚介绍了几个著名的,成熟的和有用的工具,但是还有很多发现的地方,因此,如果您有兴趣,请仔细观察此空间。

6. Docker Engine指标

Docker引擎以与Prometheus完全兼容的格式公开了许多有趣的指标, Prometheus是非常流行的开源监视和警报解决方案。 尽管此功能在很早以前就已普遍可用,但了解它的人并不多,因此,很少有人使用它。

该功能仍被认为是实验性功能,因此默认情况下不可用,需要进行一些配置调整。 官方文档彻底描述了要在运行Docker的操作系统上执行的所有必要步骤。 但实际上,第一步是修改daemon.json并在其中添加以下属性。

{
  "metrics-addr" : "localhost:9323",
  "experimental" : true
}

为了使此更改生效,应重新启动Docker守护程序。 此后,指标应在http:// localhost:9323 / metrics端点上可用。 下一步是准备Prometheus配置prometheus.yml ,以便抓取Docker引擎指标。

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'docker'
    static_configs:
      - targets: ['localhost:9323']

有了这个最小的配置,我们可以将Prometheus服务器(在撰写本文时已达到2.0版)作为Docker容器启动:

docker run -p 9090:9090 \
    -v prometheus.yml:/etc/prometheus/prometheus.yml \
    prom/Prometheus

启动容器后, Prometheus Web UI应可从http:// localhost:9090获得 。 让我们导航到该URL并检查是否可以访问我们配置的所有目标。

普罗米修斯目标

普罗米修斯目标

坦白地说, Prometheus Web UI能够绘制不同的指标,但是另一个开源项目Grafana是用于查询,可视化,警告和了解指标的最新平台。

docker run -d -p 3000:3000 \
    -e "GF_SECURITY_ADMIN_PASSWORD=pa$$w0rd" \
    grafana/grafana

Grafana拥有大量的预建仪表板,其中之一,就是Docker Engine Metrics仪表板,正是我们想要的。 这是有关它如何显示的偷窥(确实很漂亮)。

Grafana Docker引擎仪表板

Grafana Docker引擎仪表板

乍一看,它看起来可能没有什么意义,但是您可以自由地修改它,甚至可以自己构建,只选择您感兴趣的Docker引擎指标。

7.结论

在本教程的这一部分中,我们讨论了开发人员的好朋友IDE怎样通过提供广泛的Docker工具和支持来与时俱进。 除此之外,我们还提到了一些非常有用的工具,用于管理和监视容器以及Docker引擎本身。

8.接下来

在本教程的下一部分中,我们将讨论使用Docker进行测试,尤其是在对Java应用程序进行集成和端到端测试的情况下。

翻译自: https://www.javacodegeeks.com/2017/12/docker-java-developers-develop-docker.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值