本文是我们学院课程中名为《 面向Java开发人员的Docker教程 》的一部分。
在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Docker的应用程序。 我们涵盖了广泛的主题,从通过命令行的Docker到开发,测试,部署和持续集成。 通过我们简单易懂的教程,您将能够在最短的时间内启动并运行自己的项目。 在这里查看 !
目录
-
1.简介 2.在您的IDE中使用Docker
-
-
2.1。 日食 2.2。 IntelliJ IDEA 2.3。 Oracle NetBeans
3.在边缘:Docker中的IDE 4.那么调试呢? 5.管理与监测
-
-
5.1。 烤盘 5.2。 顾问 5.3。 顶 5.4。 还有更多……
6. Docker Engine指标 7.结论 8.接下来
1.简介
在本教程的最后一部分中,我们学习了许多将Java应用程序打包(和运行)为Docker容器的方法。 在这一部分中,我们将更多地关注Docker如何以非常积极的方式影响我们的开发实践。
公平地讲, Docker在很多领域对开发人员都非常有帮助。 我们将重点讨论Docker与IDE的集成,将IDE作为Docker容器运行,并了解一些有用的工具来管理和监视Docker环境。
2.在您的IDE中使用Docker
到目前为止,我们已经看到Docker的命令行工具非常强大,其用法非常简单。 但是,我们大多数人(开发人员)大部分时间都花在了我们最喜欢的IDE中 。 在调试会话中途在数十个窗口和终端之间切换,同时在应用程序逻辑中寻找难以重现的错误,可能会适得其反。
幸运的是,所有三个领先的Java开发IDE (即Eclipse , JetBrains IntelliJ IDEA和NetBeans)都通过便捷的UI视图或小部件提供了与Docker工具的集成。 让我们快速浏览这些IDE中的每一个,并仔细研究它们所提供的功能。
日食
到目前为止, Eclipse Oxygen是Eclipse IDE的最新发布版本,它具有Linux Tools子项目(作为插件提供)提供的全面的Docker工具支持。 安装后,它将在Docker
类别下提供四个其他视图。
这些视图中的每一个都公开了有关Docker容器或映像的一些细节,而Docker Explorer
是这两者的多合一视图。
如果您仅对Docker容器感兴趣,可以使用专用的Docker Containers
视图,该视图使用紧凑的基于表的表示形式。
同样,如果您只想列出Docker映像,则专用的Docker Images
视图就在这里,可以满足您的需求。
最后但并非最不重要的一点是,有一个非常有用的视图称为Docker Image Hierarchy
。 它允许查看已构建图像的所有图层。 例如,在这里,我们可以看到如何jcg/spring-boot-webapp:0.0.1-SNAPSHOT
名称为jcg/spring-boot-webapp:0.0.1-SNAPSHOT
的标记图像(我们在本教程的上一部分中构建的示例之一)。
但是这些观点只是整个故事的一部分。 另一部分是一组新的Docker启动器,您可以使用它们来构建Docker映像并以Docker容器的形式运行Java应用程序(甚至完整的Docker Compose堆栈)。
如果您想了解更多关于上面讨论的所有视图和启动器的信息,以及一般而言,关于Eclipse中可用的Docker工具的更多信息 ,那么官方项目Wiki是一个很好的起点。
IntelliJ IDEA
JetBrains IntelliJ IDEA的最新版本为2017.2.6
,以官方插件的形式提供Docker工具支持。 它在Ultimate Edition
和Community Edition
都可用,我们将在本节中使用它。
安装插件后,新的Docker
视图将可用,其中包含有关映像和容器的所有详细信息。
公平地讲,使用一个单一的,结构良好的视图并在附近(在不同的选项卡中)可用的大多数必需部件非常方便。
Oracle NetBeans
自从最新的8.2
版本发布以来, NetBeans在Base IDE
插件中包含了Docker工具(您很可能一开始就将其激活)。 插件激活后,附加的Docker
树节点将在“ Services
视图中可用。
关于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环境的多合一视图。 您肯定会识别出左侧列出的所有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://
)。
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仪表板,正是我们想要的。 这是有关它如何显示的偷窥(确实很漂亮)。
乍一看,它看起来可能没有什么意义,但是您可以自由地修改它,甚至可以自己构建,只选择您感兴趣的Docker引擎指标。
7.结论
在本教程的这一部分中,我们讨论了开发人员的好朋友IDE怎样通过提供广泛的Docker工具和支持来与时俱进。 除此之外,我们还提到了一些非常有用的工具,用于管理和监视容器以及Docker引擎本身。
8.接下来
在本教程的下一部分中,我们将讨论使用Docker进行测试,尤其是在对Java应用程序进行集成和端到端测试的情况下。
翻译自: https://www.javacodegeeks.com/2017/12/docker-java-developers-develop-docker.html