Docker 部署常用中间件(redis,rabbitMQ,mysql8,es,kibana,nginx等)亲测成功~~~

news2024/9/21 11:06:56

Docker 部署常用中间件

在日常开发中必要的环境,大多数都是单点后续持续更新集群模式~~~ 

docker 安装reids

docker pull redis:7.2.5

编辑redis.conf

# 绑定地址,默认只允许本机访问
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
bind 0.0.0.0  # 允许所有地址访问
​
# 保护模式,默认为yes,建议只在开发环境中设置为no
protected-mode no
​
# Redis监听的端口号
port 6379
​
# TCP连接队列长度,默认为511
tcp-backlog 511
​
# 设置密码,访问Redis需要密码验证
requirepass root
​
# 客户端空闲多少秒后关闭连接(0表示禁用)
timeout 0
​
# TCP保活时间,单位为秒
tcp-keepalive 300
​
# 是否以守护进程方式运行,默认为no
daemonize no
​
# 是否通过upstart或systemd管理Redis守护进程,默认为no
supervised no
​
# PID文件位置
pidfile /var/run/redis_6379.pid
​
# 日志级别,可选项有debug, verbose, notice, warning
loglevel notice
​
# 日志文件位置,默认为空,表示输出到标准输出
logfile ""
​
# 数据库数量,默认为16个
databases 30
​
# 是否显示Redis徽标,默认为no
always-show-logo yes
​
# RDB持久化策略,以下表示:
# 900秒内至少1个key被改变则进行持久化
# 300秒内至少10个key被改变则进行持久化
# 60秒内至少10000个key被改变则进行持久化
save 900 1
save 300 10
save 60 10000
​
# 当RDB持久化出错时,是否停止写入操作,默认为yes
stop-writes-on-bgsave-error yes
​
# 是否压缩RDB文件,默认为yes
rdbcompression yes
​
# 是否对RDB文件进行校验,默认为yes
rdbchecksum yes
​
# RDB文件名
dbfilename dump.rdb
​
# 数据目录位置
dir ./
​
# 当从节点无法同步主节点数据时,是否继续提供服务,默认为yes
replica-serve-stale-data yes
​
# 从节点是否只读,默认为yes
replica-read-only yes
​
# 是否使用无盘同步,默认为no
repl-diskless-sync no
​
# 是否禁用TCP_NODELAY,默认为no
repl-disable-tcp-nodelay no
​
# 从节点的优先级,用于选举主节点时使用,默认为100
replica-priority 100
​
# 内存清理策略,以下选项默认为no
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
​
# 是否开启AOF持久化,默认为no
appendonly yes
​
# AOF文件名
appendfilename "appendonly.aof"
​
# 在AOF重写期间是否执行fsync,默认为no
no-appendfsync-on-rewrite no
​
# AOF文件自动重写百分比,默认为100
auto-aof-rewrite-percentage 100
# AOF文件自动重写最小大小,默认为64mb
auto-aof-rewrite-min-size 64mb
​
# 是否加载被截断的AOF文件,默认为yes
aof-load-truncated yes
​
# 是否使用RDB前缀来加速AOF重写,默认为yes
aof-use-rdb-preamble yes
​
# Lua脚本执行的最大时间,单位为毫秒
lua-time-limit 5000
​
# 慢查询日志的最大长度,默认为128
slowlog-max-len 128
​
# keyspace事件通知,默认为空,表示不通知
notify-keyspace-events ""
​
# 哈希表相关配置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
​
# 列表相关配置
list-max-ziplist-size -2
list-compress-depth 0
​
# 集合相关配置
set-max-intset-entries 512
​
# 有序集合相关配置
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
​
# HyperLogLog相关配置
hll-sparse-max-bytes 3000
​
# 流相关配置
stream-node-max-bytes 4096
stream-node-max-entries 100
​
# 是否开启rehash,默认为yes
activerehashing yes
​
# Redis服务器周期性任务执行频率,默认为10
hz 10
​
# 是否动态调整hz值,默认为yes
dynamic-hz yes
​
# AOF文件重写
hz 10
​
dynamic-hz yes
​
aof-rewrite-incremental-fsync yes
​
rdb-save-incremental-fsync yes

创建/usr/local/server/redis目录,将上面配置放到为redis.conf。

创建/usr/local/server/redis/data用户映射redis数据。

 docker run  -p 6379:6379 --name redis7.2.5 --restart=always \
     -v /usr/local/server/redis/redis.conf:/etc/redis/redis.conf \
     -v /usr/local/server/redis/data:/data \
     -d redis:7.2.5 redis-server /etc/redis/redis.conf \
     --appendonly yes --requirepass 123456

docker 安装 mysql8.0.20

docker pull mysql:8.0.20

模拟启动获取docker里面mysql的配置文件:

docker run -p 3307:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20

使用指令查看是否启动成功

docker ps

成功以后创建文件目录

mkdir /usr/local/server/mysql8.0.20
mkdir /usr/local/server/mysql8.0.20/data  #挂载数据源
mkdir /usr/local/server/mysql8.0.20/logs  #挂载日志

使用指令拷贝docker的mysql配置文件

docker cp  mysql:/etc/mysql /usr/local/server/mysql8.0.20

随后查看文件是否存在

主要查看是否有mysql文件夹。mysql文件夹是否有文件。

随后我们暂停mysql容器

docker stop mysql8
docker rm -f mysql8 #情况记录缓存

最重要的一步骤

开始挂载

#在/usr/local/server/mysql8.0.20/mysql/conf.d目录下新增my.cnf
vim my.cnf

内容如下:

[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8
[mysql]

最后启动容器:

docker run \
-p 3307:3306 \
--name mysql8 \
--privileged=true \
--restart unless-stopped \
-v /usr/local/server/mysql8.0.20/mysql:/etc/mysql \
-v /usr/local/server/mysql8.0.20/logs:/logs \
-v /usr/local/server/mysql8.0.20/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0.20

注意我这里暴露的是3307端口,到这一步我们可以查看本地机是否映射成功。

mysql无法被Navicat连接,解决方法如下

1.进入容器

docker exec -it mysql8 /bin/bash

2.登录mysql

mysql -root -p
#随后输入你的密码

3.设置权限(依次执行下面sql)

grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
use mysql;
update user set host='%' where user='root';

如果update user set host='%' where user='root';出现错误那么查询root权限

select host,user from user where user='root';

如果是%那就没问题了。

4.最后在更新下密码

grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
​
ALTER user 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
​
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
​
FLUSH PRIVILEGES;

就OK了,主要我们开放的端口是3307,所以连接的时候要使用3307端口,如果还是连不上有可能是被墙了

#查看防火墙
systemctl status firewalld
#关闭
systemctl stop firewalld

docker安装rabbitMQ

docker pull rabbitmq:3-management
docker run -e RABBITMQ_DEFAULT_USER=chen  -e RABBITMQ_DEFAULT_PASS=123456  --name mq  --hostname mq1  -p 15672:15672 -p5672:5672 -d rabbitmq:3-management
#运行
docker run \
 -e RABBITMQ_DEFAULT_USER=chen \ #设置登录名称
 -e RABBITMQ_DEFAULT_PASS=123456 \ #设置登录密码
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \   #网页访问端口
 -p 5672:5672 \     #mq连接端口
 -d \
 rabbitmq:3-management

访问地址:http://自己的电脑ip:15672/#/

docker安装es

链接: 百度网盘 请输入提取码 提取码: cf82

因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:

docker network create es-net

1.将三个tar放置/tmp下

2.在该目录下执行

docker load -i es.tar  #上到到容器
docker load -i kibana.tar 

3.执行启动

docker run -d \
    --name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

命令解释:

  • -e "cluster.name=es-docker-cluster":设置集群名称

  • -e "http.host=0.0.0.0":监听的地址,可以外网访问

  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小

  • -e "discovery.type=single-node":非集群模式

  • -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录

  • -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录

  • -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录

  • --privileged:授予逻辑卷访问权

  • --network es-net :加入一个名为es-net的网络中

  • -p 9200:9200:端口映射配置

在浏览器中输入:http://IP地址:9200 即可看到elasticsearch的响应结果

4.接下来安装kibana

运行docker命令,部署kibana

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1
  • --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中

  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch

  • -p 5601:5601:端口映射配置

kibana启动一般比较慢,需要多等待一会,可以通过命令:

docker logs -f kibana

查看运行日志,当查看到下面的日志,说明成功:

此时,在浏览器输入地址访问:http://192.168.150.101:5601,即可看到结果

docker安装分词器(在线安装)

# 进入容器内部
docker exec -it elasticsearch /bin/bash
​
# 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
​
#退出
exit
#重启容器
docker restart elasticsearch

docker安装ik分词器(离线安装)

在百度网盘中提出ik文件夹或者自己解压elasticsearch-analysis-ik-7.12.1.zip重命名为ik,如下操作:

安装插件需要知道elasticsearch的plugins目录位置,而我们用了数据卷挂载,因此需要查看elasticsearch的数据卷目录,通过下面命令查看:

docker volume inspect es-plugins

显示结果:

[
    {
        "CreatedAt": "2022-05-06T10:06:34+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
        "Name": "es-plugins",
        "Options": null,
        "Scope": "local"
    }
]

说明plugins目录被挂载到了:/var/lib/docker/volumes/es-plugins/_data这个目录中。

然后进入该文件夹将ik文件夹放置该目录即可:

依次执行以下指令:

 # 重启容器
 docker restart es
 
 # 查看es日志
docker logs -f es

踩坑:

我的是虚拟机,暂停之后,docker无法挂载导致。

#重启docker
systemctl restart docker
#重启容器
systemctl restart es
systemctl restart kibana

测试:

docker安装nginx

docker pull nginx:latest

首次启动:

docker run --restart=always --name=nginx -p 80:80 -d nginx

然后创建目录用与绑定数据卷

mkdir /usr/local/server/nginx
​
#随后负责容器nginx配置文件
docker cp nginx:/etc/nginx /usr/local/server/nginx/conf
#界面
docker cp nginx:/usr/share/nginx/html /usr/local/server/nginx/html
#日志
docker cp nginx:/var/log/nginx /usr/local/server/nginx/logs

执行完成后分别查看对应目录里面的文件。有对应文件后,停止nginx。

docker stop nginx 
docker rm nginx

最后重新启动并挂载:

docker run --restart=always --name=nginx -p 3000:80 -v /usr/local/server/nginx/conf:/etc/nginx -v /usr/local/server/nginx/html:/usr/share/nginx/html -v /usr/local/server/nginx/logs:/var/log/nginx -d nginx

跟换本机的配置文件后重新启动容器或者进入nginx找到对应文件目录执行./nginx -s reload

更加详细nginx安装:blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学员心得 | 做好这几点,轻松通关云计算HCIE3.0!

烈日当空,骄阳似火,在这炎炎夏日迎来了自己今年一份满意的答卷--华为HCIE云计算“通过”的e妹儿(嘿嘿!证书也快了)。此时此刻,想把自己“辛勤劳作”备考IE的一些经历和建议留给后来的同路人。 “世界上最可…

MySQL练手 --- 619. 只出现一次的最大数字

题目链接:619. 只出现一次的最大数字 思路 这是一个简单题,只出现一次的最大数字,顾名思义,分两个阶段,第一个阶段筛选出只出现一次的数字,第二阶段在生成的新表中筛选出最大值即可。 解题过程 生成一张…

iOS object-C 解答算法:找到所有数组中消失的数字(leetCode-448)

找到所有数组中消失的数字(leetCode-448) 题目如下图:(也可以到leetCode上看完整题目,题号448) 光看题看可能有点难以理解,我们结合示例1来理解一下这道题. 有8个整数的数组 nums [4,3,2,7,8,2,3,1], 求在闭区间[1,8]范围内(即1,2,3,4,5,6,7,8)的数字,哪几个没有出现在数组 …

华为OD机试 - 二叉树计算(Java JS Python C C++)

题目描述 给出一个二叉树如下图所示: 请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。 左子树表示该节点左侧叶子节点为根节点的一颗新树;右子树表示该节点右侧叶子节点为根节点的一颗新树。 输入描述 2行整数,第1行表示二叉…

MySQL数据库-备份恢复

一、MySQL日志管理 1.为什么需要日志 用于排错用来做数据分析了解程序的运行情况,了解MySQL的性能 2.日志作用 在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,就必须保证数据的安全性和完整性&#…

Spring AI (五) Message 消息

5.Message 消息 在Spring AI提供的接口中,每条信息的角色总共分为三类: SystemMessage:系统限制信息,这种信息在对话中的权重很大,AI会优先依据SystemMessage里的内容进行回复; UserMessage:用…

c++笔记4

目录 深度优先搜索DFS DFS的复杂度 DFS与递归 递归与暴力枚举 递归树 DFS与栈 DFS的搜索剪枝 搜索剪枝与优化 可行性剪枝 最优化剪枝 减少等效的分支 优化搜索顺序 搜索的记忆化 搜索的复杂度 大多时候,搜索的复杂度都是指数级的。各种剪枝方案&#…

RK3568笔记四十三:MPU6050驱动开发(硬件I2C_3)

若该文为原创文章,转载请注明原文出处。 正点原子提供的I2C有测试ap3216c,SH3001等传感器,根据手册操作可以实现效果。 这里记录使用I2C3驱动MPU6050. 记录原因是前面有模拟I2C,但硬件如何使用,有点不是很清楚&#…

[C++] string管理:深浅拷贝写时拷贝

文章目录 拷贝问题的引入问题代码string类的构造函数String 类的析构函数测试入口函数(问题)详细分析 浅拷贝深拷贝传统版与现代版的String类传统String类现代版String类 写时拷贝先构造的对象后析构的影响写时拷贝举例及测试样例代码举例测试用例 拷贝问…

BGP之选路MED

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由。BGP路由属性的比较顺序为Preferred Value属性、Local Preference属性、路由生成方式、AS_Path属性、Origin属…

react中路由跳转以及路由传参

一、路由跳转 1.安装插件 npm install react-router-dom 2.路由配置 路由配置:react中简单的配置路由-CSDN博客 3.实现代码 // src/page/index/index.js// 引入 import { Link, useNavigate } from "react-router-dom";function IndexPage() {const …

大数据之Oracle同步Doris数据不一致问题

数据同步架构如下: 出现的问题: doris中的数据条数 源库中的数据条数 总数完全不一致。 出现问题的原因: 在Dinky中建立表结构时,缺少对主键属性的限制 primary key(ID) not enforced 加上如上语句,数据条数解决一致 …

WPF+Mvvm项目入门完整教程-仓储管理系统(二)

目录 一、搭建一个主界面框架二、实现步骤1.主界面区域划分2.主界面区域实现 一、搭建一个主界面框架 主要实现主界面的框架样式和基础功能。这里特别说明一下,由于MvvmLight 已经过时不在维护,本项目决定将MvvmLight框架变更为 CommunityToolkit.Mvvm …

标题:探索pdf2image:将PDF文档转化为图像的Python魔法

标题:探索pdf2image:将PDF文档转化为图 像的Python魔法 背景 在数字时代,我们经常需要处理各种格式的文档,尤其是PDF文件。PDF以其跨平台的可读性和稳定性而广受欢迎。然而,有时我们需要将PDF文件转换成图像格式&am…

Golang | Leetcode Golang题解之第282题给表达式添加运算符

题目: 题解: func addOperators(num string, target int) (ans []string) {n : len(num)var backtrack func(expr []byte, i, res, mul int)backtrack func(expr []byte, i, res, mul int) {if i n {if res target {ans append(ans, string(expr))}…

Linux--Socket编程预备

目录 1. 理解源 IP 地址和目的 IP 地址 2.端口号 2.1端口号(port)是传输层协议的内容 2.2端口号范围划分 2.3理解 "端口号" 和 "进程 ID" 2.4理解 socket 3.传输层的典型代表 3.1认识 TCP 协议 3.2认识 UDP 协议 4. 网络字节序 5. socket 编程接…

【数据结构】--- 栈和队列

前言 前面学习了数据结构的顺序表、单链表、双向循环链表这些结构;现在就来学习栈和队列,这里可以简单的说栈和队列是具有特殊化的线性表 一、栈 1.1、栈的概念和结构 栈是一种遵循先入后出逻辑的线性数据结构。 栈是一种特殊的线性表,它只允…

矿场运输车4G视频监控管理解决方案

一、背景介绍 随着科技的不断进步和智能化时代的来临,矿业运输行业也在寻求更高效率与安全的管理手段。矿场运输车4G视频监控管理解决方案是一种基于4G网络技术的视频监控系统,专门用于监测和管理矿场内运输车辆的工作状态和安全情况。该方案为矿场运输…

【linux】在多核CPU下,好像看到不同进程在不同CPU调度

在2353这行打印的情况来看,操作系统好像给不同的进程分配不同的CPU,从上图来看,同一个进程好像基本使用的相同的CPU: 其实摸索syscall文件系统操作,本意是想找到内核文件系统中文件的创建,写入,…

C 观察者模式 Demo

目录 一、基础描述 二、Demo 最近需要接触到 MySQL 半同步插件,发现其中用到了观察者模式,之前没在 C 中用过,遂好奇心驱使下找了找资料,并写了个 Demo。 一、基础描述 观察者设计模式(Observer Pattern&#xff0…