一、前言

在项目开发中我们经常要用到各种各样的中间件,比如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视频教程,非常适合新手入门,以及想应用上云、生产实践进阶的朋友。

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐