当前位置:   article > 正文

Docker 部署常用中间件(redis,rabbitMQ,mysql8,es,kibana,nginx等)亲测成功~~~_测试和生产环境在一起 部署的是docker+k3s 中间组件有redis postgresql 还有

测试和生产环境在一起 部署的是docker+k3s 中间组件有redis postgresql 还有rabbi

Docker 部署常用中间件

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

docker 安装reids

docker pull redis:7.2.5

编辑redis.conf

  1. # 绑定地址,默认只允许本机访问
  2. # bind 192.168.1.100 10.0.0.1
  3. # bind 127.0.0.1 ::1
  4. bind 0.0.0.0  # 允许所有地址访问
  5. # 保护模式,默认为yes,建议只在开发环境中设置为no
  6. protected-mode no
  7. # Redis监听的端口号
  8. port 6379
  9. # TCP连接队列长度,默认为511
  10. tcp-backlog 511
  11. # 设置密码,访问Redis需要密码验证
  12. requirepass root
  13. # 客户端空闲多少秒后关闭连接(0表示禁用)
  14. timeout 0
  15. # TCP保活时间,单位为秒
  16. tcp-keepalive 300
  17. # 是否以守护进程方式运行,默认为no
  18. daemonize no
  19. # 是否通过upstart或systemd管理Redis守护进程,默认为no
  20. supervised no
  21. # PID文件位置
  22. pidfile /var/run/redis_6379.pid
  23. # 日志级别,可选项有debug, verbose, notice, warning
  24. loglevel notice
  25. # 日志文件位置,默认为空,表示输出到标准输出
  26. logfile ""
  27. # 数据库数量,默认为16个
  28. databases 30
  29. # 是否显示Redis徽标,默认为no
  30. always-show-logo yes
  31. # RDB持久化策略,以下表示:
  32. # 900秒内至少1个key被改变则进行持久化
  33. # 300秒内至少10个key被改变则进行持久化
  34. # 60秒内至少10000个key被改变则进行持久化
  35. save 900 1
  36. save 300 10
  37. save 60 10000
  38. # 当RDB持久化出错时,是否停止写入操作,默认为yes
  39. stop-writes-on-bgsave-error yes
  40. # 是否压缩RDB文件,默认为yes
  41. rdbcompression yes
  42. # 是否对RDB文件进行校验,默认为yes
  43. rdbchecksum yes
  44. # RDB文件名
  45. dbfilename dump.rdb
  46. # 数据目录位置
  47. dir ./
  48. # 当从节点无法同步主节点数据时,是否继续提供服务,默认为yes
  49. replica-serve-stale-data yes
  50. # 从节点是否只读,默认为yes
  51. replica-read-only yes
  52. # 是否使用无盘同步,默认为no
  53. repl-diskless-sync no
  54. # 是否禁用TCP_NODELAY,默认为no
  55. repl-disable-tcp-nodelay no
  56. # 从节点的优先级,用于选举主节点时使用,默认为100
  57. replica-priority 100
  58. # 内存清理策略,以下选项默认为no
  59. lazyfree-lazy-eviction no
  60. lazyfree-lazy-expire no
  61. lazyfree-lazy-server-del no
  62. replica-lazy-flush no
  63. # 是否开启AOF持久化,默认为no
  64. appendonly yes
  65. # AOF文件名
  66. appendfilename "appendonly.aof"
  67. # 在AOF重写期间是否执行fsync,默认为no
  68. no-appendfsync-on-rewrite no
  69. # AOF文件自动重写百分比,默认为100
  70. auto-aof-rewrite-percentage 100
  71. # AOF文件自动重写最小大小,默认为64mb
  72. auto-aof-rewrite-min-size 64mb
  73. # 是否加载被截断的AOF文件,默认为yes
  74. aof-load-truncated yes
  75. # 是否使用RDB前缀来加速AOF重写,默认为yes
  76. aof-use-rdb-preamble yes
  77. # Lua脚本执行的最大时间,单位为毫秒
  78. lua-time-limit 5000
  79. # 慢查询日志的最大长度,默认为128
  80. slowlog-max-len 128
  81. # keyspace事件通知,默认为空,表示不通知
  82. notify-keyspace-events ""
  83. # 哈希表相关配置
  84. hash-max-ziplist-entries 512
  85. hash-max-ziplist-value 64
  86. # 列表相关配置
  87. list-max-ziplist-size -2
  88. list-compress-depth 0
  89. # 集合相关配置
  90. set-max-intset-entries 512
  91. # 有序集合相关配置
  92. zset-max-ziplist-entries 128
  93. zset-max-ziplist-value 64
  94. # HyperLogLog相关配置
  95. hll-sparse-max-bytes 3000
  96. # 流相关配置
  97. stream-node-max-bytes 4096
  98. stream-node-max-entries 100
  99. # 是否开启rehash,默认为yes
  100. activerehashing yes
  101. # Redis服务器周期性任务执行频率,默认为10
  102. hz 10
  103. # 是否动态调整hz值,默认为yes
  104. dynamic-hz yes
  105. # AOF文件重写
  106. hz 10
  107. dynamic-hz yes
  108. aof-rewrite-incremental-fsync yes
  109. rdb-save-incremental-fsync yes

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

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

  1. docker run  -p 6379:6379 --name redis7.2.5 --restart=always \
  2.     -v /usr/local/server/redis/redis.conf:/etc/redis/redis.conf \
  3.     -v /usr/local/server/redis/data:/data \
  4.     -d redis:7.2.5 redis-server /etc/redis/redis.conf \
  5.     --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

成功以后创建文件目录

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

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

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

随后查看文件是否存在

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

随后我们暂停mysql容器

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

最重要的一步骤

开始挂载

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

内容如下:

  1. [mysqld]
  2. user=mysql
  3. character-set-server=utf8
  4. default_authentication_plugin=mysql_native_password
  5. secure_file_priv=/var/lib/mysql
  6. expire_logs_days=7
  7. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  8. max_connections=1000
  9. [client]
  10. default-character-set=utf8
  11. [mysql]

最后启动容器:

  1. docker run \
  2. -p 3307:3306 \
  3. --name mysql8 \
  4. --privileged=true \
  5. --restart unless-stopped \
  6. -v /usr/local/server/mysql8.0.20/mysql:/etc/mysql \
  7. -v /usr/local/server/mysql8.0.20/logs:/logs \
  8. -v /usr/local/server/mysql8.0.20/data:/var/lib/mysql \
  9. -v /etc/localtime:/etc/localtime \
  10. -e MYSQL_ROOT_PASSWORD=123456 \
  11. -d mysql:8.0.20

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

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

1.进入容器

docker exec -it mysql8 /bin/bash

2.登录mysql

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

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

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

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

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

如果是%那就没问题了。

4.最后在更新下密码

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

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

  1. #查看防火墙
  2. systemctl status firewalld
  3. #关闭
  4. 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
  1. #运行
  2. docker run \
  3. -e RABBITMQ_DEFAULT_USER=chen \ #设置登录名称
  4. -e RABBITMQ_DEFAULT_PASS=123456 \ #设置登录密码
  5. --name mq \
  6. --hostname mq1 \
  7. -p 15672:15672 \   #网页访问端口
  8. -p 5672:5672 \     #mq连接端口
  9. -d \
  10. rabbitmq:3-management

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

docker安装es

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

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

docker network create es-net

1.将三个tar放置/tmp下

2.在该目录下执行

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

3.执行启动

  1. docker run -d \
  2. --name es \
  3.    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  4.    -e "discovery.type=single-node" \
  5.    -v es-data:/usr/share/elasticsearch/data \
  6.    -v es-plugins:/usr/share/elasticsearch/plugins \
  7.    --privileged \
  8.    --network es-net \
  9.    -p 9200:9200 \
  10.    -p 9300:9300 \
  11. 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

  1. docker run -d \
  2. --name kibana \
  3. -e ELASTICSEARCH_HOSTS=http://es:9200 \
  4. --network=es-net \
  5. -p 5601:5601 \
  6. 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安装分词器(在线安装)

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

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

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

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

docker volume inspect es-plugins

显示结果:

  1. [
  2.   {
  3.        "CreatedAt": "2022-05-06T10:06:34+08:00",
  4.        "Driver": "local",
  5.        "Labels": null,
  6.        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
  7.        "Name": "es-plugins",
  8.        "Options": null,
  9.        "Scope": "local"
  10.   }
  11. ]

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

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

依次执行以下指令:

  1.  # 重启容器
  2.  docker restart es
  3.  
  4.  # 查看es日志
  5. docker logs -f es

踩坑:

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

  1. #重启docker
  2. systemctl restart docker
  3. #重启容器
  4. systemctl restart es
  5. systemctl restart kibana

测试:

docker安装nginx

docker pull nginx:latest

首次启动:

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

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

  1. mkdir /usr/local/server/nginx
  2. #随后负责容器nginx配置文件
  3. docker cp nginx:/etc/nginx /usr/local/server/nginx/conf
  4. #界面
  5. docker cp nginx:/usr/share/nginx/html /usr/local/server/nginx/html
  6. #日志
  7. docker cp nginx:/var/log/nginx /usr/local/server/nginx/logs

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

  1. docker stop nginx
  2. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/952192
推荐阅读
相关标签
  

闽ICP备14008679号