基于Docker的相关环境配置

背景

前段时间因为项目原因,需要基于Docker搭建TomcatRedisElasticsearchKibanaes-headzookeeperkafka环境,在搭建过程中也是遇到了一些问题,在此,简单总结一下,以供大家参考~ 文章有不足之处,请大家指出~

本篇将依次对以下环境搭建进行说明:
  • Tomcat
  • Redis
  • Elasticsearch
  • Kibana
  • es-head
  • zookeeper
  • kafka
Tomcat(以tomcat:8.5.43为例)

拉取tomcat镜像

docker pull tomcat:8.5.43

Tomcat容器启动前,为便于对容器内的logs、webapps、conf进行管理,将需要管理的容器在运行的时候暴露出来,即挂载到宿主机上对应的文件,在此之前,在宿主机上创建挂载目录。

  • 创建目录,用于挂载相关配置文件(/home目录下)
cd /home
mkdir tomcat
cd tomcat
mkdir logs webapps conf
  • 授权目录
chmod 777 log webapps conf

注:如果未授权,在容器启动时,可能会报以下错误:

not permited to read file.........
  • 启动容器
docker run -d --name tomcat --restart=always --privileged=true -p 8080:8080 -v /home/tomcat/webapps:/usr/local/tomcat/webapps -v /home/tomcat/logs:/usr/local/tomcat/logs -v /home/tomcat/conf:/usr/local/tomcat/conf tomcat:8.5.43
  • 命令解析
  1. -d 将容器于后台运行
  2. --name 为容器命名
  3. --restart=always 表示容器开机即启动
  4. --privileged=true 使用该参数,container内的root拥有真正的root权限
  5. -p 端口映射,将容器内部的端口映射至宿主机中的指定端口
  6. -P 端口映射 ,将容器内部端口映射至宿主机中的随机端口
  7. -v volume的简写,表示容器卷,此处可表示将容器内的文件挂载至宿主机中的文件
  • 容器相关操作
    1.查看容器状态
docker ps -a # -a表示查看所有容器状态

2.查看容器日记

docker logs 容器名

3.进入容器内部

docker exec -it 容器名 /bin/bash

4.启动、重启、停止、删除容器

docker start 容器名称
docker restart 容器名称
docker stop 容器名称
docker rm 容器名称

5.访问tomcat主页


image.png
Redis(以redis:3.2.11为例)

拉取镜像

docker pull redis:3.2.11
  • 创建挂载目录
cd /home
mkdir redis && cd redis
mkdir conf data

注意: 因为redis默认配置你会发现只能够本地连接,不能进行远程访问,使用redis desktop manager 连接都会报错,因此需要手动挂载配置文件
在conf下,

vim redis.conf

redis.conf模板地址:http://download.redis.io/redis-stable/redis.conf

  • 修改配置文件
#//允许远程连接
#bind 127.0.0.1
protected-mode no
# //持久化
appendonly yes
# //密码
requirepass password
  • 授权
chmod 777 ./conf/redis.conf #当前目录为redis下
chmod 777 data
  • 启动容器
docker run -d --name redis --restart=always --privileged=true -p 6379:6379 -v /home/redis/redis.conf:/etc/redis/redis.conf -v /home/redis/data:/data redis:3.2.11 redis-server --appendonly yes --requirepass "han"

如果报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
解决方法:
需要做如下配置

vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:

net.ipv4.ip_forward=1

重启network服务

systemctl restart network
  • 命令解析
    1.appendonly yes 表示持久化
    2.requirepass "han" 设置连接密码为"han"
  • 相关操作
docker exec -it redis  redis-cli #进入redis容器内部客户端
auth password #password为容器启动时设置的密码
set key value
get key
  • 测试连接

在Redis Desktop Manager,输入服务器地址以及redis密码,点击连接


image.png

成功连接

image.png

elasticsearch集群(已elasticsearch:7.6.2)

在三台服务器上搭建elasticsearch集群
服务器地址(示例):
1、101.200.211.110
2、101.200.211.111
3、101.200.211.112

节点1: es-node1
  • 拉取镜像
docker pull elasticsearch:7.6.2
  • 调高JVM线程数限制数量
    在centos窗口中,修改配置sysctl.conf
    命令:
vi /etc/sysctl.conf 

加入一下内容:

vm.max_map_count=262144

启动配置:

sysctl -p

注:这一步是为了防止启动容器时,报出如下错误:
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

  • 新建挂载目录
cd /home
mkdir elastic && cd elastic
mkdir conf logs plugins data
  • 配置elasticsearch.yml文件
    在/home/elastic/config下,创建并配置elasticsearch.yml文件
cluster.name: es-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: 101.200.211.110
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true #允许跨域访问
http.cors.allow-origin: "*" #允许来自任何源的访问
http.cors.allow-headers: Authorization,content-type
node.master: true #主节点是否存储数据
node.data: true #从节点是否存储数据
discovery.zen.ping.unicast.hosts: ["101.200.211.110:9300","101.200.211.111:9300","101.200.211.112:9300"]
discovery.zen.minimum_master_nodes: 2 #最少节点个数
cluster.initial_master_nodes: es-node1,es-node2,es-node3 #初始化主节点,节点加载时,会存在主节点竞争
#加密,在容器启动前,先注释,不然会报错,后续再去掉注释
#xpack.security.enabled: true
#xpack.security.transport.ssl.enabled: true
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
  • 文件授权
chmod 777 ./conf/elasticsearch.yml logs data plugins # 当前路径为/home/elatic
  • 启动容器
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d --name es-1 --restart=always --privileged=true -p 9200:9200 -p 9300:9300 -v /home/elastic/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/elastic/data:/usr/share/elasticsearch/data -v /home/elastic/logs:/usr/share/elasticsearch/logs -v /home/elastic/plugins://usr/share/elasticsearch/plugins elasticsearch:7.6.2
  • 命令解析
    -e ES_JAVA_OPTS="-Xms256m -Xmx256m" 表示运行时指定jvm内存
  • 节点2:es-node2,节点3:es-node3操作同节点1,只需改动对应的节点名和容器名即可
  • 查看容器状态
#查看es的日志极为重要,可以通过日志查看容器是否正常启动
docker logs es-1
# 请求节点信息
curl 101.200.211.110:9200
image.png
  • 配置elasticsearch访问密码
    1、进入容器
docker exec -it es-1 /bin/bash

2、执行命令:./bin/elasticsearch-certutil ca 系统会提示生成文件名及证书密码,回车两次,默认系统生成的文件和密码执行,生成elastic-certificates.p12文件

./bin/elasticsearch-certutil ca 

3、执行命令:./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 系统会提示生成文件名及证书密码,回车三次,默认系统生成的文件和密码执行,生成elastic-stack-ca.p12文件

./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

4、生成的elastic-certificates.p12 cert --ca elastic-stack-ca.p12文件默认在/usr/share/elasticsearch目录下,执行命令将它们移动到conf目录下

mv elastic-*.p12 ./config/
#授权
cd config
chmod 777 elastic-*.p12

5、退出容器,并修改elasticsearch.yml文件

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
注:节点2,3同节点1操作一致

6、重启容器

dokcer restart es-1
dokcer restart es-2
docker restart es-3

7、选择其中一个容器,进行密码设置,因为是集群原因,一台设置了,其他两台也会生效

docker exec -it es-1 /bin/bash
./bin/elasticsearch-setup-passwords interactive #会对elastic、apm_system、kibana、logstash_system、beats_system、remote_monitoring_user进行密码设置

8、设置成功后,重启容器,打开浏览器,输入地址,如出现下图,则表示设置密码成功

image.png

9、查看集群状态:http://101.200.211.110:9200/_cat/nodes?pretty

kibana(以kibana:7.6.2为例,对应es版本)
  • 拉取镜像
docker pull kibana:7.6.2
  • 运行容器
docker run -d --name kibana --restart=always --privileged=true -p 5601:5601 kibana:7.6.2

注:因为kibana只是一个操作es的工具,故可不配置挂载文件

  • 修改kibana.yml
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://101.200.211.234:9200" ] #对应es服务器地址
xpack.monitoring.ui.container.elasticsearch.enabled: true
#es配置密码时对应的用户名和密码
elasticsearch.username: "elastic" 
elasticsearch.password: "111111"
  • 查看kibana,会提示输入用户名和密码


    image.png
elasticsearch-head
  • 拉取镜像
docker pull mobz/elasticsearch-head:5
  • 启动容器
docker run -d --name es-head --restart=always --privileged=true -p 9100:9100 mobz/elasticsearch-head:5

zookeeper集群(以zookeeper:3.4.12为例)

-拉取镜像

docker pull zookeeper:3.4.12

在三台服务器上搭建zookeepeer集群
服务器地址(示例):
1、101.200.211.110 ->节点1
2、101.200.211.111 -> 节点2
3、101.200.211.112 -> 节点3

节点1
docker run -tid --name=zk-1 --restart=always --privileged=true -p 2888:2888 -p 3888:3888 -p 2181:2181 -e ZOO_MY_ID=1 -e ZOO_SERVERS=server.1="0.0.0.0:2888:3888 server.2=101.200.211.111:2888:3888 server.3=101.200.211.112:2888:3888" zookeeper:3.4.12
节点2
docker run -tid --name=zk-2 --restart=always --privileged=true -p 2888:2888 -p 3888:3888 -p 2181:2181 -e ZOO_MY_ID=2 -e ZOO_SERVERS=server.1="101.200.211.110:2888:3888 server.2=0.0.0.0.:2888:3888 server.3=101.200.211.112:2888:3888" zookeeper:3.4.12
节点3
docker run -tid --name=zk-3 --restart=always --privileged=true -p 2888:2888 -p 3888:3888 -p 2181:2181 -e ZOO_MY_ID=3 -e ZOO_SERVERS=server.1="101.200.211.110:2888:3888 server.2=101.200.211.111.:2888:3888 server.3=0.0.0.0:2888:3888" zookeeper:3.4.12
  • 查看集群状态
    docker exec -it zk-1 bash ./bin/zkServer.sh status

kafka集群(以kafka:2.11-1.1.1为例)

  • 拉取镜像
docker pull wurstmeister/kafka:2.11-1.1.1

在三台服务器上搭建kafka集群
服务器地址(示例):
1、101.200.211.110 ->节点1
2、101.200.211.111 -> 节点2
3、101.200.211.112 -> 节点3

Kafka节点1
docker run -itd --name=kafka --restart=always -p 9092:9092 --privileged=true -v /etc/hosts:/etc/hosts  -e KAFKA_ADVERTISED_HOST_NAME=101.200.211.110  -e HOST_IP=101.200.211.110 -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_ZOOKEEPER_CONNECT=1101.200.211.110:2181,101.200.211.111:2181,101.200.211.112:2181 -e KAFKA_BROKER_ID=0 -e KAFKA_HEAP_OPTS="-Xmx8196M -Xms8196M" wurstmeister/kafka:2.11-1.1.1 
Kafka 节点2
docker run -itd --name=kafka --restart=always -p 9092:9092 --privileged=true -v /etc/hosts:/etc/hosts  -e KAFKA_ADVERTISED_HOST_NAME=101.200.211.110  -e HOST_IP=101.200.211.110 -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_ZOOKEEPER_CONNECT=1101.200.211.110:2181,101.200.211.111:2181,101.200.211.112:2181 -e KAFKA_BROKER_ID=0 -e KAFKA_HEAP_OPTS="-Xmx8196M -Xms8196M" wurstmeister/kafka:2.11-1.1.1 
Kafka 节点3
docker run -itd --name=kafka --restart=always -p 9092:9092 --privileged=true -v /etc/hosts:/etc/hosts  -e KAFKA_ADVERTISED_HOST_NAME=101.200.211.110  -e HOST_IP=101.200.211.110 -e KAFKA_ADVERTISED_PORT=9092 -e KAFKA_ZOOKEEPER_CONNECT=1101.200.211.110:2181,101.200.211.111:2181,101.200.211.112:2181 -e KAFKA_BROKER_ID=0 -e KAFKA_HEAP_OPTS="-Xmx8196M -Xms8196M" wurstmeister/kafka:2.11-1.1.1 
  • 创建topic
订阅

docker exec -it kafka bash /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 101.200.211.110:9092,101.200.211.111:9092,101.200.211.112:9092 --topic test --from-beginning

发送消息

docker exec -it kafka bash /opt/kafka/bin/kafka-console-producer.sh --broker-list 101.200.211.110:9092,101.200.211.111:9092,101.200.211.112:9092 --topic test

创作不易,转载需备注~~
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355