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

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

目录

1.简介 2. Linux容器:大爆炸 3. Docker:大众化的容器
3.1。 建筑 3.2。 图片 3.3。 货柜 3.4。 登记处 3.5。 图像是新的RPM
4. Moby:Docker的未来 5.迈向互操作性 6. Docker和Java 7.结论 8.接下来

1.简介

如果您还没有听说过Docker ,那么您可能在过去几年中在太阳系的其他星球上度过了。 Docker席卷了我们的行业,并且立即改变了许多公认的软件开发以及运营实践和模式。 如今,几乎每个组织都在使用Docker (或等效的Docker ),甚至在生产中也使用勇敢的Docker ,并且它的采用正以惊人的速度增长。

在本教程中,我们将讨论Docker如何帮助我们Java开发人员完成日常任务。 本教程包括几个部分,我们将探讨Docker的不同方面及其在Java应用程序开发中的适用性。

我们将从学习基础知识开始:

  • 为什么我们应该花时间学习Docker
  • 了解Docker命令行工具
  • 使用REST外观与Docker对话

然后,我们将紧接着在Java应用程序的上下文中继续讨论与Docker相关的主题:

  • 建造
  • 发展
  • 测试中
  • 部署中
  • 持续集成/交付

我们将通过的材料假定您对Docker有一定的基本了解,并且至少已经在计算机上安装了17.06.1-ce版本(如果您本身在Linux,Windows或Mac上,这并不重要)。

2. Linux容器:大爆炸

这个故事使Docker和朋友成为可能,这个故事可以追溯到2006年,当时Google的几个很棒的工程师以“过程容器”的名义开始了对该功能的研究。 后来将其更名为“控制组”(或我们今天所知的cgroup ),并从2008年1月发布的2.6.24版本开始将其合并到Linux内核中。

本质上, cgroups是一种Linux内核功能,可限制,说明,区分优先级和隔离进程的资源使用 (CPU,内存,磁盘I / O,网络等)。 最重要的是,要支持所有Linux内核 ,无需启动任何虚拟机或虚拟机 管理程序 。 cgroup与命名空间 ( Linux内核的另一个非常强大的功能)一起,是容器的基本构建块:操作系统级虚拟化。

基于容器的虚拟化非常轻巧(与传统虚拟机相比 ),几乎没有开销,共享相同的操作系统内核,并且不需要特殊的硬件支持即可有效执行。 换句话说,容器成为包装应用程序的新模型,因此它们可以在共享操作系统上独立运行。 尽管并非没有局限性,但使用容器已成为当今虚拟化领域的主流。

公平地说,并非所有Linux / Unix发行版都使用相同的机制进行操作系统级虚拟化。 举几个例子, FreeBSD为此目的设有监狱 ,而Solaris具有zone的概念。

那么,如何开始使用容器呢? 好吧,您可能已经听说过LXC或LXD之类的缩写,它们实际上是大多数Linux / Unix发行版中容器管理的切入点。 事实是,这些内容有些底层并且不容易入门。 但是幸运的是,我们拥有以应用程序为中心的容器管理引擎Docker和rkt ,它们从一开始就成为全球应用程序开发人员的事实上的选择。

3. Docker:大众化的容器

那么, Docker本质上是什么? 它起初是一个功能强大且易于使用的容器引擎,但是如今,可以称其为成熟的容器管理平台将是很公平的。 它用Go编写,并利用Linux内核功能(主要是名称空间和cgroups )来完成这项工作。 社区版可免费下载,而企业版也可通过订阅产品获得。 为了解决这个问题,在本教程中,我们将仅使用社区版的功能。

建筑

从架构的角度来看, Docker由三个主要部分组成。 守护进程dockerd位于Docker的中心。 反过来, dockerd依赖于另一个容器容器守护进程作为抽象层,以与Linux内核名称空间和cgroups接口。 最后一个难题是一组称为Docker CLI的命令行工具(例如docker和docker-compose ),它们能够通过其公开的Docker Engine API与dockerd守护程序进行通信 。

上面提到的每个Docker组件都应该拥有自己的教程,因此它们提供了许多有趣的特性和功能,尽管我们的重点将主要集中在Docker引擎API和Docker CLI系列( docker和docker-compose )上。

选择Docker的最有力论据之一是,它可以在大多数Linux发行版中本地运行,但并不止于此。 还很好地支持了macOS和Windows操作系统, 但需要注意一些警告 。

为了了解Docker的工作方式,我们必须公开其内部模型。 在任何时候,如果您觉得没有找到足够的有关该主题的详细信息,请随时查阅官方文档 。

图片

在Docker中 ,您所做的一切都是管理特定对象。 图像和容器可以说是最重要的,但是还有其他一些,例如卷,网络和插件。 我们将在本教程的不同部分中看到所有这些内容,并立即从图像和容器开始。

可以将图像视为有关如何创建容器的一组说明。 在Docker中 ,一个映像可以从另一个映像继承(或基于),在基本映像的基础上添加其他指令。 每个图像由多层组成,这些层实际上是不可变的。 在底层 ,这些层由专用文件系统支持(默认情况下为UnionFS ,但也可以插入其他文件系统),从而使它们非常轻巧,快速。

那么……您如何才能根据自己的需要创建此类图像? 实际上,这很简单,要在Docker中构建自己的映像,您需要创建一个Dockerfile ,它只是一个文本文件,定义了组装映像(并在以后运行)所需的一组步骤(或指令)。 在此过程中,您可能会决定自己创建完全自定义的映像,或者在大多数情况下,请参考由他人创建的映像,这些映像将在注册表中发布。 为了让您快速了解Dockerfile的外观,这是一个简单的示例:

FROM alpine:3.6
CMD ["uname", "-a"]

Dockerfile中的每条指令都会创建一个新层,因此最后,每个映像都有一个不可变层的列表,这些不可变层相互堆叠,表示文件系统的差异。

在接下来的部分中,我们将按照最佳实践和建议编写大量不同的Dockerfile 。

货柜

准备好图像后,就可以将它们变为现实了。 容器出现在舞台上的位置是:它们是图像的可运行实例。 假设目标主机(安装了Docker的主机)具有足够的资源,则可以根据需要运行任意数量的主机。 所有这些都是可行的,因为至少在默认情况下,容器彼此之间具有良好的隔离性(但是您可以控制很多选项)。

当Docker创建容器的实例时它还会在基础图像层堆栈的顶部添加一个新的可写层 ,通常称为容器层 。 对运行中的容器所做的所有更改(例如,创建,删除或修改文件)都将写入此薄层。

将容器视为短暂的容器非常重要:容器终止(停止并卸下)后,其状态的任何更改都将消失(除非将它们存储在持久性存储中)。

到目前为止, Docker内部使用其自己的映像格式,并严重依赖libcontainer和runc来生成和运行容器。

登记处

Docker体系结构中注册表的目的是存储映像,以便它们可以共享并用作基础映像。 Docker Hub和Docker Cloud是任何人都可以使用的著名公共注册表。 为了简单起见 ,默认情况下,将Docker配置为在Docker Hub上查找图像。

您还可以考虑选择托管自己的一个或多个私有Docker注册中心的选项。 这样做有很多充分的理由,尤其是在企业界。 最关键的问题之一是安全性,因为公共映像不经过全面的安全审核,并且可能具有已知的安全漏洞或暴露 。 但是,随着越来越多的公司维护所谓的官方存储库 (这些存储库经过精心策划并遵循更高的标准),情况变得越来越好。

为了使事情更加吸引人,新玩家最近加入了注册表游戏。 旗舰Docker产品Docker Store已宣布将全面上市。

图像是新的RPM

随着Docker和其他容器引擎变得越来越流行和广泛,我们用来打包和分发应用程序的方式也在发生巨大变化。 从字面上看,该映像成为一种“新RPM”,您可以将其分发到支持所选容器引擎的任何平台上(稍后再介绍),并将其作为容器运行。 它确实很容易,简单且强大。

4. Moby:Docker的未来

Docker最近发生了很多变化。 在将Docker分解为模块化组件并整合其所有开源协作的计划的推动下, Moby Project诞生了。

Moby项目是一个新的开源项目,旨在推进软件容器化运动并帮助生态系统将容器主流化。 它提供了一个组件库,一个将它们组装到基于容器的定制系统中的框架,以及一个供所有容器爱好者进行实验和交流思想的场所。 https://blog.docker.com/2017/04/introducing-the-moby-project/

随着Docker继续拆分为更多组件, Moby Project也将成为这些组件的所在地,因此让我们密切关注它,并期待激动人心的公告。

5.迈向互操作性

当前有多个以应用程序为中心的容器引擎可用,即Docker和rkt (将来很可能会出现更多),显而易见的问题是:如何选择一个? 如果您在此期间不得不切换到另一个,那会发生什么呢?

的确,目前,如果您选择一个容器引擎而不是另一个,那么您可能必须坚持使用它,因为事实证明转向替代引擎很困难。 但是,由于开放容器倡议 (或只是OCI )的存在,希望有足够的参与者支持通用规范,容器引擎的互操作性将大大改善。

前面我们已经提到 ,目前Docker使用自己的图像格式。 幸运的是,最近随着OCI Runtime和Image规范的首次发布,实现了该领域内开放性的重要里程碑。

6. Docker和Java

最近在容器内使用Java时,关于任何法律后果或许可方面的考虑,已经进行了很多讨论。 问答部分很好地总结了Oracle在此问题上的立场:

是否有Docker特有的Oracle Java SE许可考虑因素?

否。Docker是一个容器化平台,与任何操作系统,虚拟化或打包格式相比,使用或重新分发的许可证没有特别或特殊的限制。 Oracle JDK在Docker生态系统中被广泛使用和采用。 https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

尽管答案仅涉及Docker ,但它同样也适用于其他基于容器的虚拟化引擎。

为了证明这一点, Oracle已将正式的Oracle Java 8 SE(服务器JRE)映像发布到Docker商店中 ,这是查找可信任的商业和免费软件(以Docker映像形式分发)的地方之一。

7.结论

在本教程的介绍性部分中,我们对Linux / Unix操作系统中虚拟化机制的演变进行了一些研究。 我们已经从高层次上了解了什么是映像,容器,它们与传统虚拟机相比的优势以及如何开始使用它们。

8.接下来

我们仅在简单列出事实和术语的过程中没有做太多工作。 但是,请袖手旁观,在下一节中,我们将通过学习Docker容器引擎的工具和命令来对其进行仔细研究。

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

面向Java开发人员的Docker:简介相关推荐

  1. 面向 Java 开发人员的区块链链代码

    面向 Java 开发人员的链代码简介 点击查看视频演示查看抄本 您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用.本教程将帮助大家解惑.我将分步展示如何使用 Hyperledger F ...

  2. 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序

    面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序 Ajax 为更好的 Web 应用程序铺平了道路 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java™ ...

  3. [转载]面向 Java 开发人员的 db4o 指南: 超越简单对象

    面向 Java 开发人员的 db4o 指南: 超越简单对象 2007 年 7 月 09 日 到目前为止,我们在 db4o 中创建并操作对象看起来都比较简单 -- 事实上,甚至有点太简单了.本文中,热心 ...

  4. 面向 Java 开发人员的 Scala 指南: 深入了解 Scala 并发性

    http://www.ibm.com/developerworks/cn/java/j-scala04109.html http://www.ibm.com/developerworks/cn/jav ...

  5. 适用于Java开发人员的Elasticsearch:Elasticsearch生态系统

    本文是我们学院课程的一部分,该课程的标题为Java开发人员的Elasticsearch教程 . 在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Elasticsearch的应用程序. 我们涵 ...

  6. 适用于Java开发人员的微服务:管理安全性和机密

    关于麦洛 麦洛是 Java 开发者和技术爱好者. 对 Java 相关技术特别感兴趣,包括 javaee. Spring系列. 微服务等 作者:Andrey Redko 原文:Microservices ...

  7. 高级java开发_适用于高级Java开发人员的十大书籍

    高级java开发 Java是当今最流行的编程语言之一. 有很多适合初学者的书籍. 但是对于那些使用Java进行过一段时间编程的人来说,其中有些人看起来有些简单和多余. 初学者的书没有带来新鲜有趣的想法 ...

  8. Java开发人员访谈的MindMap

    多年来,我曾在许多Java开发人员访谈中担任小组成员. 之前,我曾写过一篇标题为"成功进行软件工程师技术面试的7大技巧"的文章,其中涵盖了很少的一般准则. 在本文中,我将分享一个思 ...

  9. 适用于高级Java开发人员的十大书籍

    Java是当今最流行的编程语言之一. 有很多适合初学者的书籍. 但是对于那些使用Java进行过一段时间编程的人来说,其中有些人看起来有些简单和多余. 初学者的书没有带来新鲜有趣的想法. 但是,高级Ja ...

最新文章

  1. JQuery Ajax 与 Knockout.js的结合
  2. STM32 DMA正常模式等待传输完成和开始下一次传输
  3. Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题
  4. splitter 使用
  5. 为什么SpringBoot如此受欢迎,以及如何有效地学习SpringBoot?
  6. vue.js python_使用Python和Vue.js自动化报告过程
  7. 极简的 PNG 编码函数 svpng(),用来学习C语言,真的很爽
  8. python特效电子相册_用Python和Conky做个电子相册,美化你的Linux桌面
  9. boost学习之BOOST_PP_REPEAT
  10. python selenium实现百度搜索
  11. 物联网卡就是流量卡 这说法正确吗
  12. java用Calendar计算年龄的问题
  13. atom对比 vscode_Atom、Sublime Text、VSCode 三者比较
  14. 什么是归并排序 mergeSort
  15. 昂达v891w可以用u盘linux,想用啥用啥!昂达V891w双系统版平板评测
  16. 【信息系统项目管理师】第十二十三章 项目采购合同管理(考点汇总篇)
  17. 几个例子理解博弈论与纳什均衡
  18. WIN7wifi显示无法承载
  19. MarkdownPad 2 安装配置及常见问题
  20. Oracle作业第四章

热门文章

  1. 【OpenCV】Python的Opencv环境配置(可自选对应版本)
  2. 監測Android APP 佔用系統資源的情況 (純代碼獲取)
  3. 正则匹配数字逗号字符串,并转为Integer数组
  4. 如何在家远程控制公司电脑使办公更加方便呢?
  5. openwrt 清除ipset ip缓存
  6. ⚡python写一个不起床让你后悔的闹钟⚡
  7. 开好迭代回顾会议的5个原则
  8. PIPIOJ 1286: PIPI运货 最短路径
  9. wow服务器合并信息,魔兽世界WOW:跨服战场!合并服务器!
  10. python函数之可变默认参数