多容器应用栈
创建一个使用 Express 框架的、带有 Redis 后端的 Node.js 应用,并完全 Docker 化。应用会创建一系列的镜像来部署多容器应用。
- Nodejs 容器,服务于 Node 应用
- Redis 容器,用于保存和集群化应用状态,Redis 会有两个备份容器
- 日志容器,用于捕捉应用日志
Redis 镜像
Redis 基础镜像
构建 Redis 基础镜像,之后会使用基础镜像构建主从 Redis 镜像1docker build -t czero/redis .
构建 Redis 主镜像
|
|
通过 ENTRYPOINT
指令制定了 Redis
服务的启动命令,Redis
服务的日志文件保存到/var/log/redis/redis-server.log
构建 Redis 从镜像
|
|
创建 Redis 后端集群
构建 Redis 主容器
|
|
- 使用
-h
参数用来指定容器的主机名,用来后面从容器正确解析Redisprimary
- 使用
--name
指定容器名
如果想要查看 redis
日志,直接使用docker logs redis_primary
会发现没有任何输出,因为redis
把日志输出到日志文件中,可以运行另外一个容器来查看日志
|
|
- 使用
--rm
参数指定的容器,只会运行一次,进程结束之后便会删除 - 使用
--volumes-from=
参数指定挂载那个容器的所有卷 - 后面便是指定使用某个镜像、执行某些命令
构建 Redis 从容器
|
|
- 使用
-h
参数用来指定容器的主机名 - 使用
--name
指定容器名 - 使用
--link
将redis_primary
以别名Redisprimary
连接到Redis
从容器
查看redis_replica
的log,看看主从时候正常
|
|
Node.js 镜像
|
|
[Nodejs Dockerfile](http://ofc9x1ccn.bkt.clouddn.com/upload/docker/nodejs.tar.gz)
创建 Node 容器
|
|
- 使用
czero/nodejs:latest
镜像创建了一个名为nodeapp
的新容器 - 使用使用
-p
将容器的3000
端口映射到宿主机的3000
端口 - 使用
--link
将redis_primary
以Redisprimary
作为别名连接到新建的nodeapp
容器
查看 Node 应用时候正常
|
|
当Node
应用返回OK
便表示应用正常,浏览器的会话状态会被记录到Redis
主容器redis_primary
中,然后便会同步到两个从容器redis_replica1、redis_replica2
中
捕获应用日志
现在应用已经正常运行,使用logstash
来捕获应用日志。
创建 logstash 镜像
|
|
构建 logstash 容器
|
|
- 使用两次
--volumes-from
挂载nodeapp
、redis_primary
的卷,用来访问Redis
和Node
的日志
|
|
现在 Node 和 Redis 的日志便都输出到 logstash里面了。