首页 理论教育 微服务运维实战:构建服务镜像

微服务运维实战:构建服务镜像

时间:2023-11-05 理论教育 版权反馈
【摘要】:Docker镜像是通过存储在Dockerfile中的定义构建的。我们不会探讨在定义Dockerfile时用到的所有选项,而仅限于go-demo服务会用到的选项。更多信息请参阅Dockerfile reference。如果服务以状态200响应,则wget命令将返回0,并且Docker将认为服务正常。任何其他响应都将被视为不健康,Docker Engine将执行某些操作来修复这种情况。这种顺序背后的原因在于Docker Engine创建镜像的方式。可以通过带有如下命令的Docker compose运行构建过程:我们将在本书的其余部分使用后一种方式。

微服务运维实战:构建服务镜像

Docker镜像是通过存储在Dockerfile中的定义构建的。除个别情况外,它采用了一种类似于我们定义简单脚本的方式。我们不会探讨在定义Dockerfile时用到的所有选项,而仅限于go-demo服务会用到的选项。更多信息请参阅Dockerfile reference(https://docs.docker.com/engine/reference/builder/)。

go-demo的Dockerfile如下:

每一条语句都将作为一个独立的镜像构建,容器就是堆叠在一起的镜像的集合。

每个Dockerfile都以FROM语句开头,它定义了要使用的基础镜像。大多数情况下,笔者倾向于使用alpine Linux,它的大小约为2 MB,可能是我们使用的最小的发行版。这与容器应该仅含必需的东西并避免任何额外开销的思想一致。

MAINTAINER仅用于提供信息参考。

RUN语句将其参数作为命令执行,笔者不会解释它,因为这取决于我们正在构建的服务。

EXPOSE语句定义服务将要监听的端口。接下来是环境变量DB的定义,它告诉服务器数据库地址,默认值是db,正如你将会看到的那样,它可以在运行时改变。CMD语句表示容器启动时将运行的命令。

HEALTHCHECK命令告诉Docker如何测试容器以检查它是否仍在工作。它可以检测到一些状况,比如,虽然Web服务器的进程仍在运行,但因陷入死循环中而无法处理新的连接。当容器指定健康检查时,除了正常状态外,它还有一个健康状态。这个状态最初是starting。每当健康检查通过时,它就变为健康状态(从之前的任何状态开始)。经过一定次数的连续失败后,它就变成不健康状态。

在我们的例子中,健康检查将每10秒执行一次。该命令向其中一个API端点发送一个简单请求。如果服务以状态200响应,则wget命令将返回0,并且Docker将认为服务正常。任何其他响应都将被视为不健康,Docker Engine将执行某些操作来修复这种情况。

最后将go-demo二进制文件从主机复制到镜像中的/usr/local/bin/目录,并使用chmod命令使其拥有可执行权限。

可能会有人觉得这些语句的顺序看起来不合逻辑,但是这些声明及其顺序背后有一个很好的理由,那些不太可能改变的在那些容易变化的之前定义。由于每次构建镜像时go-demo都会是一个新的二进制文件,因此它被定义在最后。

这种顺序背后的原因在于Docker Engine创建镜像的方式。它从最上面的定义开始,检查自上次构建运行以来定义是否更改。如果没有,则转到下一条定义语句。只要它发现一条会生成新镜像的语句,它以及它后面的所有语句就会构建到Docker镜像中去。通过将不太可能改变的那些语句靠近顶部,就可以节省构建时间,减少对磁盘和带宽的使用。(www.xing528.com)

现在了解了go-demo服务背后的Dockerfile,下面可以构建这些镜像了。

该命令非常简单,如下所示:

使用另外一种方式可以在Docker Compose文件中定义构建参数。在docker-compose-test-local.yml(https://github.com/vfarcic/go-demo/blob/master/docker-compose-test-local.yml)文件中定义的服务如下所示:

在这两种情况下,我们都指定当前目录应该用于构建过程(通过.指定),并且镜像的名称是go-demo。

可以通过带有如下命令的Docker compose运行构建过程:

我们将在本书的其余部分使用后一种方式。

可以通过执行docker images命令来确认镜像确实被构建出来了,如下所示:

输出如下:

如你所见,go-demo是我们在服务器内的镜像之一。

现在镜像已经构建好了,下面可以运行模拟测试,这些测试需要将对应的服务及其依赖项部署到服务器上。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈