赞
踩
一、前言
在项目开发中我们经常要用到各种各样的中间件,比如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视频教程,非常适合新手入门,以及想应用上云、生产实践进阶的朋友。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。