docker快速部署pg/redis/kafka/elasticsearch(es)/nginx等中间件
使用docker快速部署pg/redis/kafka/es/zooleeper等中间件
一、前言
在项目开发中我们经常要用到各种各样的中间件,比如postgresql(pg)数据库,Redis、elasticsearch(es)等等。使用docker来搭建这样一些服务非常的方便快捷,可以供我们开发使用。如果在自己的Windows电脑上开发,建议先创建一个Linux虚拟机,然后在上面部署这些服务,并设置docker开机启动,每次开发只需要启动下这个虚拟机,这些服务就可以使用了。
本例中我们使用docker一起搭建pg,Redis、es、consul、zookeeper、kafka、nginx等服务
二、镜像准备工作
我们提前把所需的服务镜像pull到服务器,这样部署的时候速度会更快
consul image:
docker pull docker.io/consul:1.5.0
elasticsearch image :
docker pull docker.io/elasticsearch:6.4.0
postgresql image:
docker pull docker.io/postgres:9.6-alpine
redis image:
docker pull docker.io/redis:5.0.4
zookeeper image:
docker pull zookeeper:3.4.10
kafka image:
docker pull docker.io/wurstmeister/kafka
三、容器部署
1. pg数据库的部署
直接使用docker run命令进行创建一个单独的数据库容器
PG的搭建
docker run -d \
-p 5432:5432 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=admin \
-v /home/admin/midware/pg:/var/lib/postgresql/data \
--name pg \
--restart always \
docker.io/postgres:9.6-alpine
-p port 映射端口,可以通过宿主机的端口访问到容器内的服务
-d 是detach 保持程序后台运行的意思
-e environment 设置环境变量
-v volume 文件或者文件夹的挂载
2、redis容器的创建
cd /home/admin/midware/redis/conf
创建redis.conf 内容如下:
port 6379
notify-keyspace-events "Ex"
save 900 1
save 300 10
save 60 10000
rdbcompression yes
创建redis容器:
docker run -d -ti -p 6379:6379 -p 16379:16379 \
-v /home/admin/midware/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw \
-v /home/admin/midware/redis/data:/data:rw \
--restart always --name redis \
--sysctl net.core.somaxconn=1024 \
docker.io/redis:5.0.4 /usr/local/etc/redis/redis.conf
3、consul 容器的搭建,使用单机版的,只有一个server
docker run --name consul -d \
-p 8500:8500 \
-p 8300:8300 \
-p 8301:8301 \
-p 8302:8302 \
-p 8600:8600 \
--restart always \
docker.io/consul:1.5.0 \
agent -server -bootstrap-expect 1 \
-ui -bind=0.0.0.0 \
-client=0.0.0.0
注:consul容器自带监控面板,输入 http://192.168.40.128:8500/ui/dc1/services 如果出现如下页面证明容器启动成功
4、创建zookeeper和kafka 容器
docker run 创建zookeeper容器
docker run -d \
-p 2181:2181 \
--name zk \
--restart always \
-v /home/admin/midware/zk/data:/data \
-v /home/admin/midware/zk/datalog:/datalog \
-t zookeeper:3.4.10
创建kafka容器
docker run -d \
-p 9092:9092 \
-v /home/admin/midware/kafka:/kafka \
--name kafka \
--restart always \
--link zk \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.28.200:2181 \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.28.200 \
--env KAFKA_ADVERTISED_PORT=9092 \
docker.io/wurstmeister/kafka
5、elasticsearch(ES) 服务的搭建
问题:1、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
vim /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p 使之生效
问题2 、文件没有权限,解决方法,为挂载文件夹赋予权限
chmod -R 777 ./es
创建容器:
docker run -d -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms64m -Xmx64m" \
-v /home/admin/midware/es/data:/usr/share/elasticsearch/data \
-v /home/admin/midware/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
--restart always \
--name es \
docker.io/elasticsearch:6.4.0
搭建好的ES集群可以浏览器上的head插件进行查看和管理,界面如下:
连接信息输入自己Linux服务器或者虚拟机的IP:9200, http://{IP}:9200/
6、Elasticsearch分析工具kibana工具的搭建
注意kibana的版本一定要和es的版本相匹配才行,版本不匹配是不能够使用的,IP地址更换成自己ES安装的IP地址。首先拉取kibana的镜像: docker pull kibana:6.2.3 / kibana:6.4.0
使用docker安装kibana
docker run -d \
-e ELASTICSEARCH_URL=http://192.168.*.*:9200 \
-p 5601:5601 \
--name kibana \
--restart always \
kibana:6.2.3
kibana访问地址: http://192.168.*.*:5601
elasticsearch监控工具cerebro工具搭建与使用:
docker pull lmenezes/cerebro
docker run -d --name cerebro --restart always -p 9100:9000 lmenezes/cerebro
7、nginx的搭建
docker run -d \
-p 80:80 \
-p 443:443 \
-v /home/admin/midware/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/admin/midware/nginx/conf.d:/etc/nginx/conf.d \
--name nginx \
--net host \
--restart always \
docker.io/nginx:1.10.2
安装完成之后的容器通过docker ps命令查看所有部署容器如下:
[root@localhost admin]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72a8c14d8bd3 kibana:6.4.0 "/usr/local/bin/ki..." 2 months ago Up 2 minutes 0.0.0.0:5601->5601/tcp kibana
c5f020c367c6 docker.io/nginx:1.10.2 "nginx -g 'daemon ..." 11 months ago Up 2 minutes nginx
9842377f3933 docker.io/postgres:10.5-alpine "docker-entrypoint..." 14 months ago Up 2 minutes 0.0.0.0:5433->5432/tcp pgv10
8840da298af8 docker.io/elasticsearch:6.4.0 "/usr/local/bin/do..." 19 months ago Up About a minute 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp es
a1588ad156f1 docker.io/wurstmeister/kafka "start-kafka.sh" 19 months ago Up About a minute 0.0.0.0:9092->9092/tcp kafka
32746adce658 zookeeper:3.4.10 "/docker-entrypoin..." 19 months ago Up 2 minutes 2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp zk
fd293e89edf6 docker.io/postgres:9.6-alpine "docker-entrypoint..." 19 months ago Up 2 minutes 0.0.0.0:5432->5432/tcp pg
a619a5df6229 docker.io/consul:1.5.0 "docker-entrypoint..." 19 months ago Up About a minute 0.0.0.0:8300-8302->8300-8302/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/tcp, 8600/udp consul
306a28b27610 docker.io/redis:5.0.4 "docker-entrypoint..." 19 months ago Up 2 minutes 0.0.0.0:6379->6379/tcp, 0.0.0.0:16379->16379/tcp redis-6379
四、小结
这里通过docker搭建了几种常用的中间件服务,方便本地开发,后续继续探讨搭建集群版本的中间件。
注:可以设置docker 开机自启动:
systemctl enable docker
这样每次打开虚拟机就会自动启动docker引擎,再加上container我们都设置了自动重启机制(--restart always)
所以,打开虚拟机之后,稍等片刻,所有的服务都会全部启动!开始使用这些服务吧!
注:欢迎关注博主公众号,后台回复 docker 即可下载2021最新docker视频教程,非常适合新手入门,以及想应用上云、生产实践进阶的朋友。
更多推荐
所有评论(0)