在本文中我们学习,我将详细介绍基于Docker的示例工作流的一些概念。对于这个例子,我有一个非常简单的Node.js应用程序,用于递增存储在Redis上的计数器。我将Redis和Node应用程序独立开,因为我希望能够根据负载来扩展节点应用程序。首先,我有3个运行该应用程序的节点服务器实例。还有一个Nginx节点位于应用程序之前,用于节点实例的负载均衡。
我们可以想象得到我们的容器结构:
- 1个Redis容器
- 3个Node容器
- 1个Nginx容器
我们的业务架构应该如下图所示:
我们可以使用Docker命令从头开始构建容器,但为了更容易,我们将写一个Dockerfile,它可以为我构建容器。后面我们也会用到Docker Compose来编排我们应用程序的Docker容器。
Redis 容器
让我们使用来自DockerHub的官方Redis镜像作为Redis容器。它预先安装了Redis服务器,并在默认端口6379上运行。因此,只要您确定了默认设置,就不需要配置任何设置。您可以直接从Redis映像创建并运行容器:
docker run -d --name redis -p 6379:6379 redis
你也可以从基础Ubuntu映像构建Redis映像,Dockerfile将如下所示:
# Set the base image to Ubuntu
FROM ubuntu
# File Author / Maintainer
MAINTAINER Anand Mani Sankar
# Update the repository and install Redis Server
RUN apt-get update && apt-get install -y redis-server
# Expose Redis port 6379
EXPOSE 6379
# Run Redis Server
ENTRYPOINT ["/usr/bin/redis-server"]
Node.js 容器
我们先来搭建一个Node应用程序。这里就不过多解释Node.js程序编写了。这里的示例代码将用Redis 的INCR命令完成访问次数统计的功能。我使用node-redis模块和hiredis来获得更好的性能。