基于Docker的多容器应用栈
程序员文章站
2022-03-11 23:29:47
...
本文搭建一个基于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 ..
aaa@qq.com 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
aaa@qq.com 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 <aaa@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 <aaa@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主镜像-DockerfileFROM luotj/redis
MAINTAINER luotj <aaa@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从镜像-DockerfileFROM luotj/redis
MAINTAINER luotj <aaa@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 <aaa@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容器日志输出。
成功~
上一篇: Copying Books (二分法)
下一篇: 『贪心·二分答案』排序
推荐阅读
-
Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
-
Docker容器内应用服务自启动的方法示例
-
Docker容器的应用中,10个要不得的坏习惯
-
基于阿里的Node全栈之路(一)部署Docker
-
技术文章 | 基于阿里的Node全栈之路(一)部署Docker
-
docker容器间跨宿主机通信-基于overlay的实现方法
-
基于vue-cli3多页面开发apicloud应用的教程详解第1/2页
-
基于Docker+Selenium Grid的测试技术应用示例代码
-
Docker 镜像、容器、仓库的概念及应用详解
-
基于 Spring 构建应用的多环境感知方案