基于Docker的多容器应用栈

本文搭建一个基于docker容器的简单应用,部分参考《第一本Docker书》。

在本例中,我们会构建一系列的镜像来支持部署多容器的应用。

  • 一个Node容器,用来服务于Node应用,这个容器会连接到。
  • 一个Redis主容器,用于保存和集群化应用状态,这个容器会连接到。
  • 两个Redis副本容器,用于集群化应用状态。
  • 一个日志容器,用于捕获应用日志。



项目相关文件结构

99-1-190-96:dockerlearn luotj$ ls -al
drwxr-xr-x  12 luotj  staff   384  4 28 16:59 .
drwxr-xr-x+ 56 luotj  staff  1792  4 28 16:59 ..
-rw-r--r--@  1 luotj  staff  6148  4 28 16:59 .DS_Store
drwxr-xr-x   5 luotj  staff   160  4 26 17:35 logstash
drwxr-xr-x   6 luotj  staff   192  4 14 19:22 nodejs
drwxr-xr-x   3 luotj  staff    96  4 14 13:50 redis_base
drwxr-xr-x   4 luotj  staff   128  4 14 19:14 redis_primary
drwxr-xr-x   3 luotj  staff    96  4 14 14:03 redis_replica
99-1-190-96:dockerlearn luotj$ cd nodejs/
99-1-190-96:nodejs luotj$ ls -l
total 8
-rw-r--r--  1 luotj  staff  396  4 14 19:22 Dockerfile
drwxr-xr-x  4 luotj  staff  128  4 18 20:22 nodeapp
99-1-190-96:nodejs luotj$ cd ..
99-1-190-96:dockerlearn luotj$ cd redis_base/
99-1-190-96:redis_base luotj$ ls -l
total 8
-rw-r--r--  1 luotj  staff  379  4 14 13:50 Dockerfile
99-1-190-96:redis_base luotj$ cd ..
99-1-190-96:dockerlearn luotj$ cd logstash/
99-1-190-96:logstash luotj$ ls -l
total 24
-rw-r--r--@ 1 luotj  staff  528  4 26 17:35 Dockerfile
-rw-r--r--  1 luotj  staff  528  4 16 18:18 Dockerfile.back
-rw-r--r--  1 luotj  staff  173  4 14 19:39 logstash.conf
99-1-190-96:logstash luotj$ 

Node.js镜像-Dockerfile

FROM ubuntu:14.04
MAINTAINER luotj <741939312@qq.com>
ENV REFRESHED_AT 2018-04-14

RUN apt-get -yqq update
RUN apt-get -yqq install nodejs npm
RUN ln -s /usr/bin/nodejs /usr/bin/node
RUN mkdir -p /var/log/nodeapp

ADD nodeapp /opt/nodeapp/

WORKDIR /opt/nodeapp
RUN npm config set strict-ssl false
RUN npm install

VOLUME [ "/var/log/nodeapp" ]

EXPOSE 3000

ENTRYPOINT [ "nodejs","server.js" ]

Redis基础镜像-Dockerfile

FROM ubuntu:14.04
MAINTAINER luotj <741939312@qq.com>
ENV REFRESHED_AT 2018-04-14

RUN apt-get -yqq update
RUN apt-get install -yqq software-properties-common python-software-properties
RUN add-apt-repository ppa:chris-lea/redis-server
RUN apt-get -yqq update
RUN apt-get -yqq install redis-server redis-tools

VOLUME [ "/var/lib/redis", "/var/log/redis/" ]

EXPOSE 6379
CMD []
Redis主镜像-Dockerfile
FROM luotj/redis
MAINTAINER luotj <741939312@qq.com>

ENV REFRESHED_AT 2018-04-14

COPY redis.conf /usr/local/etc/redis/redis.conf

ENTRYPOINT [ "redis-server", "/usr/local/etc/redis/redis.conf", "--logfile /var/log/redis/redis-server.log" ]
Redis从镜像-Dockerfile
FROM luotj/redis
MAINTAINER luotj <741939312@qq.com>
ENV REFRESHED_AT 2018-04-14

ENTRYPOINT [ "redis-server", "--logfile /var/log/redis/redis-replica.log", "--slaveof redis_primary 6379" ]

捕获应用日志Logstash-Dockerfile

FROM ubuntu:16.04
MAINTAINER luotj <741939312@qq.com>
ENV REFRESHED_AT 2018-04-10

RUN apt-get -qq update
RUN apt-get -qq install wget
RUN wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch |  apt-key add -
RUN echo 'deb http://packages.elasticsearch.org/logstash/1.5/debian stable main' > /etc/apt/sources.list.d/logstash.list
RUN apt-get -qq update
RUN apt-get -qq install logstash default-jdk

ADD logstash.conf /etc/

WORKDIR /opt/logstash

ENTRYPOINT [ "bin/logstash" ]
CMD [ "--config=/etc/logstash.conf" ]

根据以上Dockerfile,创建各个镜像:

docker build -t luotj/nodejs .
docker build -t luotj/redis .
docker build -t luotj/redis_primary .
docker build -t luotj/redis_replica .
docker build -t luotj/logstash .

根据镜像创建容器:

docker network create express

docker run -d -h redis_primary --net express --name redis_primary luotj/redis_primary

docker run -it --rm --volumes-from redis_primary ubuntu cat /var/log/redis/redis-server.log

docker run -d -h redis_replica --name redis_replica1 --net express luotj/redis_replica

docker run -d -h redis_replica --name redis_replica2 --net express luotj/redis_replica

docker run -it --rm --volumes-from redis_replica1 ubuntu cat /var/log/redis/redis-replica.log

docker run -it --rm --volumes-from redis_replica2 ubuntu cat /var/log/redis/redis-replica.log

docker run -d --name nodeapp -p 3000:3000 --net express luotj/nodejs

docker run -d --name logstash --volumes-from redis_primary --volumes-from nodeapp luotj/logstash

docker logs -f logstash

访问 http://localhost:3000 ,查看logstash容器日志输出。

成功~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值