基于Docker的相關(guān)環(huán)境配置

背景

前段時間因為項目原因,需要基于Docker搭建Tomcat戳杀、Redis该面、ElasticsearchKibana信卡、es-head隔缀、zookeeperkafka環(huán)境傍菇,在搭建過程中也是遇到了一些問題猾瘸,在此,簡單總結(jié)一下,以供大家參考~ 文章有不足之處牵触,請大家指出~

本篇將依次對以下環(huán)境搭建進行說明:
  • Tomcat
  • Redis
  • Elasticsearch
  • Kibana
  • es-head
  • zookeeper
  • kafka
Tomcat(以tomcat:8.5.43為例)

拉取tomcat鏡像

docker pull tomcat:8.5.43

Tomcat容器啟動前淮悼,為便于對容器內(nèi)的logs、webapps揽思、conf進行管理袜腥,將需要管理的容器在運行的時候暴露出來,即掛載到宿主機上對應(yīng)的文件绰更,在此之前瞧挤,在宿主機上創(chuàng)建掛載目錄。

  • 創(chuàng)建目錄儡湾,用于掛載相關(guān)配置文件(/home目錄下)
cd /home
mkdir tomcat
cd tomcat
mkdir logs webapps conf
  • 授權(quán)目錄
chmod 777 log webapps conf

注:如果未授權(quán),在容器啟動時执俩,可能會報以下錯誤:

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 使用該參數(shù)徐钠,container內(nèi)的root擁有真正的root權(quán)限
  5. -p 端口映射,將容器內(nèi)部的端口映射至宿主機中的指定端口
  6. -P 端口映射 役首,將容器內(nèi)部端口映射至宿主機中的隨機端口
  7. -v volume的簡寫尝丐,表示容器卷,此處可表示將容器內(nèi)的文件掛載至宿主機中的文件
  • 容器相關(guān)操作
    1.查看容器狀態(tài)
docker ps -a # -a表示查看所有容器狀態(tài)

2.查看容器日記

docker logs 容器名

3.進入容器內(nèi)部

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
  • 創(chuàng)建掛載目錄
cd /home
mkdir redis && cd redis
mkdir conf data

注意: 因為redis默認配置你會發(fā)現(xiàn)只能夠本地連接矮固,不能進行遠程訪問失息,使用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
  • 授權(quán)
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服務(wù)

systemctl restart network
  • 命令解析
    1.appendonly yes 表示持久化
    2.requirepass "han" 設(shè)置連接密碼為"han"
  • 相關(guān)操作
docker exec -it redis  redis-cli #進入redis容器內(nèi)部客戶端
auth password #password為容器啟動時設(shè)置的密碼
set key value
get key
  • 測試連接

在Redis Desktop Manager盹兢,輸入服務(wù)器地址以及redis密碼,點擊連接


image.png

成功連接

image.png

elasticsearch集群(已elasticsearch:7.6.2)

在三臺服務(wù)器上搭建elasticsearch集群
服務(wù)器地址(示例):
1守伸、101.200.211.110
2绎秒、101.200.211.111
3、101.200.211.112

節(jié)點1: es-node1
  • 拉取鏡像
docker pull elasticsearch:7.6.2
  • 調(diào)高JVM線程數(shù)限制數(shù)量
    在centos窗口中尼摹,修改配置sysctl.conf
    命令:
vi /etc/sysctl.conf 

加入一下內(nèi)容:

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下,創(chuàng)建并配置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 #主節(jié)點是否存儲數(shù)據(jù)
node.data: true #從節(jié)點是否存儲數(shù)據(jù)
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 #最少節(jié)點個數(shù)
cluster.initial_master_nodes: es-node1,es-node2,es-node3 #初始化主節(jié)點蠢涝,節(jié)點加載時玄呛,會存在主節(jié)點競爭
#加密,在容器啟動前惠赫,先注釋把鉴,不然會報錯,后續(xù)再去掉注釋
#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
  • 文件授權(quán)
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內(nèi)存
  • 節(jié)點2:es-node2,節(jié)點3:es-node3操作同節(jié)點1,只需改動對應(yīng)的節(jié)點名和容器名即可
  • 查看容器狀態(tài)
#查看es的日志極為重要庭砍,可以通過日志查看容器是否正常啟動
docker logs es-1
# 請求節(jié)點信息
curl 101.200.211.110:9200
image.png
  • 配置elasticsearch訪問密碼
    1场晶、進入容器
docker exec -it es-1 /bin/bash

2、執(zhí)行命令:./bin/elasticsearch-certutil ca 系統(tǒng)會提示生成文件名及證書密碼怠缸,回車兩次诗轻,默認系統(tǒng)生成的文件和密碼執(zhí)行,生成elastic-certificates.p12文件

./bin/elasticsearch-certutil ca 

3揭北、執(zhí)行命令:./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 系統(tǒng)會提示生成文件名及證書密碼扳炬,回車三次,默認系統(tǒng)生成的文件和密碼執(zhí)行搔体,生成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目錄下,執(zhí)行命令將它們移動到conf目錄下

mv elastic-*.p12 ./config/
#授權(quán)
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
注:節(jié)點2,3同節(jié)點1操作一致

6呆奕、重啟容器

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

7养晋、選擇其中一個容器,進行密碼設(shè)置梁钾,因為是集群原因绳泉,一臺設(shè)置了,其他兩臺也會生效

docker exec -it es-1 /bin/bash
./bin/elasticsearch-setup-passwords interactive #會對elastic姆泻、apm_system零酪、kibana、logstash_system麦射、beats_system蛾娶、remote_monitoring_user進行密碼設(shè)置

8、設(shè)置成功后潜秋,重啟容器蛔琅,打開瀏覽器,輸入地址峻呛,如出現(xiàn)下圖罗售,則表示設(shè)置密碼成功

image.png

9、查看集群狀態(tài):http://101.200.211.110:9200/_cat/nodes?pretty

kibana(以kibana:7.6.2為例钩述,對應(yīng)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" ] #對應(yīng)es服務(wù)器地址
xpack.monitoring.ui.container.elasticsearch.enabled: true
#es配置密碼時對應(yīng)的用戶名和密碼
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

在三臺服務(wù)器上搭建zookeepeer集群
服務(wù)器地址(示例):
1所禀、101.200.211.110 ->節(jié)點1
2、101.200.211.111 -> 節(jié)點2
3放钦、101.200.211.112 -> 節(jié)點3

節(jié)點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
節(jié)點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
節(jié)點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
  • 查看集群狀態(tài)
    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

在三臺服務(wù)器上搭建kafka集群
服務(wù)器地址(示例):
1色徘、101.200.211.110 ->節(jié)點1
2、101.200.211.111 -> 節(jié)點2
3操禀、101.200.211.112 -> 節(jié)點3

Kafka節(jié)點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 節(jié)點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 節(jié)點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 
  • 創(chuàng)建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

發(fā)送消息

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

創(chuàng)作不易褂策,轉(zhuǎn)載需備注~~
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市颓屑,隨后出現(xiàn)的幾起案子斤寂,更是在濱河造成了極大的恐慌,老刑警劉巖揪惦,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遍搞,死亡現(xiàn)場離奇詭異,居然都是意外死亡器腋,警方通過查閱死者的電腦和手機尾抑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒂培,“玉大人,你說我怎么就攤上這事榜苫』ご粒” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵垂睬,是天一觀的道長媳荒。 經(jīng)常有香客問我,道長驹饺,這世上最難降的妖魔是什么钳枕? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮赏壹,結(jié)果婚禮上鱼炒,老公的妹妹穿的比我還像新娘。我一直安慰自己蝌借,他們只是感情好昔瞧,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菩佑,像睡著了一般自晰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稍坯,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天酬荞,我揣著相機與錄音,去河邊找鬼。 笑死混巧,一個胖子當著我的面吹牛枪向,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牲剃,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼遣疯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凿傅?” 一聲冷哼從身側(cè)響起缠犀,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聪舒,沒想到半個月后辨液,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡箱残,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年滔迈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片被辑。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡燎悍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盼理,到底是詐尸還是另有隱情谈山,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布宏怔,位于F島的核電站奏路,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏臊诊。R本人自食惡果不足惜鸽粉,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抓艳。 院中可真熱鬧触机,春花似錦、人聲如沸壶硅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庐椒。三九已至椒舵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間约谈,已是汗流浹背笔宿。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工犁钟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泼橘。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓涝动,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炬灭。 傳聞我的和親對象是個殘疾皇子醋粟,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350