前言:
如今朋友们对“nginx19mongo”大体比较关怀,小伙伴们都需要分析一些“nginx19mongo”的相关内容。那么小编在网络上收集了一些对于“nginx19mongo””的相关内容,希望我们能喜欢,咱们一起来了解一下吧!Docker支持
在第一部分之前文中已经讨论了微服务架构和Spring Cloud 项目的基础知识:在第二部分中则研究了微服务架构中最常见的元素,并演示了如何使用Spring Cloud实现它们。到目前为止,我们已经详细介绍了与微服务迁移相关的一些重要主题,如集中式日志记录、分布式跟踪、安全性和自动化测试等。在掌握了这些知识之后,现在我们可以进入本书的最后一部分内容, 讨论微服务作为云原生态开发方法的真正威力。例如,能够使用容器化工具将应用程序彼此隔离,在软件交付过程中实现持续部署(Continuous Deployment)以及轻松扩展应用程序的能力,所有这些优点都有助于微服务的快速普及。
在前面的章节中,我们使用过Docker 镜像(Image) 在本地计算机上运行第三方工具和解决方案。以此为切入点,本章将介绍Docker的主要概念,如它的基本命令和用例。此信息将有助于开发人员运行前面章节中提供的示例。然后,我们将讨论如何使用SpringBoot应用程序示例构建镜像,以及如何在本地计算机上的容器内运行它们。我们将使用简单的Docker命令以及更高级的工具,如Jenkins服务器(它可以帮助开发人员执行完整、持续的交付),并在组织中启用持续集成(Continuous Integration, CI)过程。最后,我们将介绍用于部署、扩展和管理容器化应用程序自动化的最流行的工具之一:Kubernetes。
我们的所有示例都将通过Minikube 在单节点Kubernetes集群上以本地方式运行。
本章将要讨论的主题包括:
口最实用的 Docker命令。
口构建包含SpringBoot微服务的Docker容器。
口在 Docker.上运行Spring Cloud组件。
口使用 Jenkins和Docker进行持续集成/持续交付。
口在Minikube上部署和运行微服务。
关于Docker
Docker是一个工具,可以帮助开发人员使用容器创建、部署和运行应用程序。它的设计旨在使开发人员和系统管理员按照DevOps理念受益。Docker通过解决与之相关的一些重要问题,帮助改进软件交付流程。其中一个问题是不可变交付( Immutable Delivery)的想法,这与人们认为软件要“对我有用”的认识有关。特别重要的是,开发人员在Docker中进行测试所使用的镜像与在生产模式中所使用的镜像相同,应该看到的唯一区别是在配置期间。对于基于微服务的系统,以不可变交付模式进行的软件交付似乎特别重要,因为有许多独立部署的应用程序。由于Docker的存在,开发人员现在可以专注于编写代码而无须担心目标操作系统(应用程序启动的地方)。因此,该操作可以使用相同的接口来部署、启动和维护所有应用程序。
Docker越来越受欢迎还有很多其他原因。毕竟,容器化理念在信息技术领域并不是什么新鲜事。Linux容器是在很多年前推出的,自2008年以来一直是其内核的一部分。但是,Docker 已经引入了其他技术所没有的若干新内容和解决方案。
首先,它提供了一个简单的接口,允许开发人员轻松将应用程序及其依赖项打包到单个容器中,然后跨Linux内核的不同版本和实现运行它。容器可以在任何支持Docker的服务器上以本地方式或远程运行,每个容器都可以在几秒钟内启动。开发人员也可以轻松地在其上运行每个命令而无须进入容器内部。此外,Docker 镜像的共享和分发机制允许开发人员提交他们的更改,并以与共享源代码相同的方式推送和提取镜像,如使用Git。目前,几乎所有最流行的软件工具都作为镜像在Docker Hub.上发布,其中有一些我们已成功用于运行示例应用程序所需的工具。
Docker架构由一些基本定义和元素组成,最重要的就是容器(Container) 。容器在单个计算机上运行,并与该计算机共享操作系统内核。它们包含在机器代码上运行特定软件所需的一切:运行时( Runtime)、系统工具、系统库和设置。容器是根据Docker镜像中的指令创建的。镜像就像是一-种配方或模板,它定义了在容器上安装和运行必要软件的步骤。容器也可以与虚拟机进行比较,因为它们具有类似的资源隔离和分配优势。但是,它们虚拟化的是操作系统而不是硬件,这使得它们比虚拟机更具可移植性和效率。图14.1说明了Docker容器和虚拟机之间的架构差异。
所有容器都在称为Docker主机( Docker Host)的物理或虚拟机器上启动。反过来,Docker主机运行一个Docker守护程序( Docker Daemon),它将监听Docker客户端通过Docker API发送的命令。Docker客户端可能是命令行工具或其他软件,如Kinematic.除了运行守护进程外,Docker主机还负责存储缓存镜像和从这些镜像创建的容器。每个镜像都是从一组图层构建的。每个图层仅包含与父图层的增量差异。这样的镜像并不小,所以需要存储在别处,这个地方叫作Docker 注册表(Docker Registry) 。开发人员可以创建自己的私有存储库,也可以使用Web.上提供的现有公共存储库。最受欢迎的存储库是DockerHub,它包含几乎所有必需的镜像。
安装Docker
适用于Linux 的Docker 安装说明和每个发行版本(https:/docs. docker.com/install/#supported-platforms)有关。但是,有时开发人员必须在安装后运行Docker守护程序,可以通过调用以下命令来执行此操作。
dockerd --host=unix:///var/ run/docker . sock --host tcp://0.0.0.0:2375
本节将重点介绍Windows平台的说明。一般来说,在Windows或Mac上安装Docker社区版(Community Edition, CE)时,有两个可用选项。最快最简单的方法是使用Docker for Windows,它可以在htps:/www docker .com/docker-windows上找到,这是一个原生Windows应用程序,它为构建、交付和运行容器化应用程序提供了易于使用的开发环境。
这绝对是最佳选择,因为它使用Windows原生的Hyper-V虚拟化和网络。但是,它也有一个缺点, 那就是它仅适用于Microsoft Windows 10 Professional或Enterprise 64位。早期版本的Windows 应使用Docker Toolbox, 开发人员可以访问hts://docs.docker .com/toolbo/oolbox_ install windows/地址并 下载。该工具箱包括Docker 平台、带Docker Machine的命令行、Docker Compose、Kitematic 和VirtualBox 等。请注意,开发人员无法使用Docker Toolbox在Windows.上以原生方式运行Docker Engine,因为它使用了特定于Linux 的内核功能。相反,开发人员必须使用Docker Machine命令(docker- machine) , 该命令将在本地计算机上创建Linux虚拟机并使用Virtual Box运行它。开发人员的计算机可以使用虚拟地址( 默认情况下为192.168.99.100) 访问此虚拟机。之前讨论的所有示例都与该IP地址提供的Docker工具集成在一起。
常用的Docker命令
在Windows.上安装Docker Toolbox后,开发人员应该运行Docker Quickstart Terminal.它可以完成所需的一切,包括创建和启动Docker Machine以及提供命令行界面。如果输入没有任何参数的Docker命令,则现在应该能够看到包含说明的可用Docker客户端命令的完整列表。以下是我们将要看到的命令类型。
口运行和停止容器
口列出并删除容器
口提取和推送镜像
口构建镜像
口创建网络
运行和停止容器
在安装Docker之后,运行的第一个Docker命令通常是docker run。如前文所述,此命令是以前示例中最常用的命令之一。此命令执行两项操作:它从注册表中提取并下载镜像定义(以防它未在本地缓存),并启动容器。可以为此命令设置许多选项,要了解这些选项,可以运行docker run --help命令并进行查看。某些选项具有单字母快捷键,这通常是最常用的选项。例如,选项-d可以在后台运行一个容器,而选项-i则可以保持stdin打开,即使它没有附加。如果容器必须对外公开任何端口,则可以使用激活选项-p和定义<port_ _outside_ container>:<port inside_ container>. 某些镜像需要其他配置,这些配置一般来说可以通过使用-c选项覆盖的环境变量来完成。使用-name 选项可以为容器设置友好名称,这通常也很有用,它可以为在其上运行其他命令提供方便。
在以下Docker命令示例中,启动了包含Postgres数据库的容器,并且创建了带密码的数据库用户,然后将它公开在端口55432 上。现在,该Postgres 数据库的地址为192. 168.99.100:55432。
$ docker run -d --name Pg -e POSTGRES PASSHORD =123456 -e
POSTGRES USER-piomin -e POSTGRES DB=example -P 55432:5432 postgres
带Postgres数据库的容器可以持久保存数据。对于存储数据的容器来说,外部应用程序如果要访问其数据,推荐机制是通过卷(Volume) 。可以使用-v选项将卷传递给容器,其中的值可以由冒号(:)分隔的字段组成。第一个字段是卷的名称,而第二个字段则是路径,即该文件或目录在容器中安装的位置。下一个有趣的选项是使用-m选项限制为容器分配的最大RAM的能力。以下是创建新卷并将其装入已启动容器的命令。最大RAM容量设置为500MB。在停止使用激活的选项--rm之后,容器会自动删除,如下所示。
$ docker volume create pgdata
$ docker run --rm -it -e -m 500M -v pgdata:/vax/1ib/postgresq1/data -P
55432:5432 postgres
可以使用docker stop 命令停止每一个正在运行的容器。我们已经为容器设置了一个名称,因而可以轻松地将其用作标签,如下所示。
$ docker stop pg
由于容器的整个状态被写入磁盘,因而开发人员可以使用与停止之前完全相同的数据集再次运行它,如下所示。
$ docker start pg
如果只想重新启动容器,则可以使用以下命令而不是停止/启动容器。
$ docker restart pg
列出并删除容器
如果已经启动某些容器,则可能需要考虑在Docker计算机上显示所有正在运行的容器列表,此时应该使用dockerps命令,如图14.2所示。此命令将显示有关容器的一些基本信息,如公开端口列表和源镜像的名称。此命令仅打印当前启动的容器。如果希望查看已停止或处于非活动状态的容器,则可以在Docker命令中使用选项-a。
如果不再需要容器,则可以使用docker rm命令将其删除。有时需要删除正在运行的容器,默认情况下不允许这样做。要强制使用此选项,则应该在Docker 命令上设置-f选项,如下所示。
$ docker rm -f Pg
开发人员应该记住,dockerps命令仅删除容器。创建它的镜像仍然在本地缓存。这样的镜像可能占用大量空间,范围从数兆字节到几百兆字节。可以使用docker rmi命令删除每个镜像,并将镜像ID或名称作为参数,如下所示。
$ docker rmi 875263695ab8
虽然我们还没有创建任何Docker镜像,但在镜像创建过程中生成大量不需要的或未命名的镜像并不罕见。这些镜像可以很容易识别,因为它们会使用名称<none>表示。在Docker术语中,这些被称为悬空镜像/无效镜像(Dangling Image),可以使用以下命令轻松删除。此外,还可以使用docker images命令显示所有当前缓存镜像的列表,如下所示。
$ docker rmi $ (docker images -q -王dangling=true)
提取和推送镜像
我们已经讨论过Docker Hub,它是目前网。上最大、最受欢迎的Docker存储库。它可以在htpt:/hb.docker.com 上找到。默认情况下,Docker 客户端将尝试提取该存储库的所有镜像。有许多经过认证的官方镜像可用于常见软件,如Redis、Java、Nginx或Mongo,但开发人员也可以找到其他人创建的数十万个镜像。如果使用命令dockerrun,则会从存储库中提取镜像,以防它未在本地缓存。还可以运行以下命令docker pull,它仅负责下载镜像。
$ docker pull postgres
上述命令将下载最新版本的镜像( 使用最新标记的名称)。如果开发人员想使用旧版本的Postgres Docker镜像,则应附加具有特定版本号的标签。可用版本的完整列表通常发布在镜像的站点上,在以下示例中则没有区别。开发人员可以访问htpt:/hub.docker. com/r/library/postgres/tags/以获取可用标签的列表。
$ docker pull postgres:9.3
运行并验证镜像后,开发人员应该考虑远程保存它。最适合它的地方当然是Docker Hub。但是,有时开发人员可能希望将镜像存储在备用存储( 如私有存储库)中。在推送镜像之前,必须使用注册表用户名、镜像名称及其版本号对其进行标记。以下命令将从Postgres源镜像创建一个名为piomin//postgres和1.0版本标记的新镜像。
$ docker tag postgres piomin/postgres:1.0
现在,如果运行docker images 命令,则将看到两个具有相同ID的镜像。第一个名称为Postgres,具有最新的标签;第二个名称为piomin/postgres,标签为1.0。重要的是,piomin是笔者在Docker Hub上的用户名。所以,在继续任何其他操作之前,我们应该先在那里注册镜像。
之后,我们还应该使用docker login命令登录我们的Docker客户端。在这里,系统将提示输入用于注册的用户名、密码和电子邮件地址。最后,可以使用以下docker push命令推送带标记的镜像。
$ docker push pi omin/postgres:1。0
现在剩下要做的就是使用Web浏览器登录开发人员自己的DockerHub账户,检查推送的镜像是否已经出现。如果一切正常,将看到一个新的公共存储库,其中包含开发人员自己的镜像。图14.3显示了当前推送到Docker Hub账户的镜像。
构建镜像
之前,我们将Postgres Docker镜像的副本推送到Docker Hub注册表。一般来说,我们推送的是从Dockerfile 文件创建的自己的镜像,该文件定义了在容器上安装和配置软件时所需的所有指令。有关Dockerfile结构的细节将在后面讨论。目前重要的是用于构建Docker镜像的命令: docker build.此命令应在Dockerfile所在的同一目录中运行。构建新镜像时,建议使用-t选项设置其名称和标记。以下命令将创建镜像piomin/order-service,标记为1.0版本。该镜像可能会像上一个包含Postgres 的镜像一样 被推送到开发人员的Docker Hub账户,如下所示。
$ docker build -七pi omin/order-service:1.0
创建网络
创建网络是Docker架构的一个重要方面,因为开发人员经常要在不同容器上运行的应用程序之间提供通信。常见用例是需要访问数据库的Web应用程序。我们现在将参考“消息驱动的微服务”中已经介绍的另一个示例。它是Apache Kafka 和ZooKeeper之间的通信。Kafka 需要ZooKeeper,因为它将各种配置存储为ZK数据树中的键/值对,并在整个集群中使用它。如前文所述,开发人员首先必须创建一个自定义网络并在那里运行这两个容器。以下命令可用于在Docker主机上创建用户定义的网络。
$ docker network create kafka -network
在上述命令运行完毕之后,可以使用以下命令检查可用网络列表。默认情况下,Docker会创建3个网络,因而开发人员应该看到4个网络,其名称分别为bridge、host、none和kafka-network.
$ docker network 1s
下一步是将网络名称传递给使用dockerrun命令创建的容器。它可以通过-network参数实现,如下例所示。如果为两个不同的容器设置相同的网络名称,那么它们将在同一网络上启动。现在来分析一下这在实践中意味着什么。如果在一个容器中,那么开发人员可以通过其名称而不是使用其IP地址调用它,这就是为什么在使用ApacheKafka启动容器时可以将环境变量ZOOKEEPER_ IP设置为ZooKeeper。在此容器内启动的Kafka将连接默认端口.上的ZooKeeper实例,如下所示。
$ docker run -d --name zookeeper - -network kafka-net zookeeper:3.4
$ docker run -d --name kafka --network kafka-net -e
ZOOKEEPER IP=zookeeper ches/kafka
本文给大家讲解的内容是Docker支持和Spring Cloud平台
1.下篇文章给大家讲解的是创建具有微服务的Docker镜像;
2.觉得文章不错的朋友可以转发此文关注小编,有需要的可以私信小编获取资料;
3.感谢大家的支持!
标签: #nginx19mongo