本文搭建一个基于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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 .
根据镜像创建容器:
扫描二维码关注公众号,回复:
101418 查看本文章
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容器日志输出。
成功~