七、Docker常用安装

1.总体步骤

  • 搜索镜像:docker search ...

  • 拉取镜像:docker pull ...

  • 查看镜像:docker images

  • 创建容器:docker run -it ...

  • 停止容器:docker stop ...

  • 移除容器:docker rm -f ...

2. 安装tomcat

1. docker search tomcat:8.5.32
输出结果:
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   3106      [OK]   
2.docker pull tomcat
3.mkdir ~/tomcat
4.cd ~/tomcat
5.docker images
6.docker run -id --name=tomcat_8081 \
-p 8081:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat:8.5.32
 
参数说明:
$PWD:代表宿主机的当前路径
-p 8080:8080 将容器8080端口映射到主机的8080端口
-v $PWD:/usr/local/tomcat/webapps:将主机中的当前目录挂载到容器的webapps

 

若想将项目部署至根目录下,需要在tomcat文件夹中创建ROOT文件夹,将项目文件全部拷贝至ROOT文件夹中即可。

3.安装nginx

1.docker pull nginx
2.mkdir ~/nginx
3.cd ~/nginx
4.docker run -d --name=c_nginx -p 80:80 nginx #创建nginx容器

 

配置负载均衡

1. docker cp c_nginx:/etc/nginx/nginx.conf nginx.conf # 将nginx.conf配置文件复制出来
2. docker cp c_nginx:/etc/nginx/conf.d/default.conf default.conf  # 将default.conf 配置文件复制出来

 

nginx.conf 文件内容修改如下:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
   
    keepalive_timeout  65;

    # 此处配置负载均衡
    upstream springcloud{
        server 192.168.253.133:8080;
        server 192.168.253.130:8081;
    }

    include /etc/nginx/conf.d/*.conf;
}

 

添加 upstream springcloud(这个名称随便写) 下面配置的就是两个web应用所在的的ip地址以及端口号 ,注意web地址一定要用真实的IP,就算是本地测试,也不能使用127.0.0.1或者localhost

default.conf 内容修改如下:

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
        proxy_pass http://springcloud; # 配置负载均衡
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

 



proxy_pass http://springcloud; 这个地址就是nginx.conf 中upstream 后面的名称,不要写错了

当前也可以直接使用容器卷:

docker run -d --name c_nginx -p 80:80 -v $PWD/default.conf:/etc/nginx/default.conf -v $PWD/nginx.conf:/etc/nginx/nginx.conf  --net 你的网络名称 --restart=always nginx

 

 

接下来需要将nginx.conf与default.conf 这两个重新复制回容器中

3. docker cp nginx.conf c_nginx:/etc/nginx/nginx.conf
4. docker cp default.conf c_nginx:/etc/nginx/conf.d/default.conf
5. docker restart c_nginx # 重启nginx 容器

 

接下来就可以通过nginx 服务器IP访问了,大功告成!!

 

4. 安装mysql

$ docker pull mysql:5.7
$ mkdir ~/mysql
$ cd ~/mysql
$ docker run -d \
-p 3306:3306 --name c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v  $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

 

命令说明 -p 3306:3306:将主机的3306端口映射到docker容器的3306端口。 --name c_mysql:运行服务名字 -v $PWD/conf:/etc/mysql/conf.d :将主机/root/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d -v $PWD/logs:/logs:将主机/root/mysql目录下的 logs 目录挂载到容器的 /logs。 -v $PWD/data:/var/lib/mysql :将主机/root/mysql目录下的data目录挂载到容器的 /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。 mysql:5.7: 后台程序运行mysql5.7

 

运行以下命令可进入mysql命令窗口:

docker exec -it c_mysql /bin/bash

 

登录mysql:

mysql -uroot -p123456

 

mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.09 sec)

5.安装redis

1.docker pull redis:7.0.5
2.mkdir ~/redis
3.cd ~/redis
4.docker run -d -p 6379:6379 --name=redis \
--privileged=true \
--restart=always \
-v $PWD/conf/redis.conf:/etc/redis/redis.conf \
-v $PWD/data:/data redis:7.0.5 \
redis-server /etc/redis/redis.conf --appendonly yes
--privileged=true:表示给容器root权限,否则无法使用appenonly
redis-server:表示使用右侧路径中的配置文件启动。
--appendonly yes : 指定以aof形式启动

 

 

5.1 redis-cli 命令的基本操作

一、 redis-cli 连接 redis:

语法:docker exec -it 窗口名或者窗口ID redis-cli [-h ip地址] [-p 端口号]

docker exec -it c_redis redis-cli -h 127.0.0.1 -p 6379

 

  • -h 用于指定 ip

  • -p 用于指定端口

  • -a 用于指定认证密码

5.2 配置redis

在 /redis/redis.conf 目录下新建文件 redis.conf

vim /redis/redis.conf/redis.conf
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir /data
requirepass 123456
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
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
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes
通过客户端工具设置
也可以通过客户端工具设置配置信息


127.0.0.1:6379> info server   -- 查看配置信息
# Server
redis_version:7.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:6dfaa38315e9cd59
redis_mode:standalone
os:Linux 3.10.0-1160.71.1.el7.x86_64 x86_64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:epoll
atomicvar_api:c11-builtin
gcc_version:10.2.1
process_id:1
process_supervised:no
run_id:557c1683ceef823d0c6a9c72c0d52bf64b224f8b
tcp_port:6379
server_time_usec:1678350087814787
uptime_in_seconds:614
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:628487
executable:/data/redis-server
config_file:/etc/redis/redis.conf
io_threads_active:0



127.0.0.1:6379> config set requirepass 123456   --设置密码
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> config set bind 0.0.0.0   -- 设置绑定主机
OK
127.0.0.1:6379> config get bind
1) "bind"
2) "0.0.0.0"
 

 

 

6. 安装RabbitMQ

  1. 下载带web管理客户端的镜像:

docker pull rabbitmq:management

 

  1. 创建容器并运行(15672是管理界面的端口,5672是服务的端口。这里顺便将管理系统的用户名和密码设置为admin admin)

  1. docker run -d --name=rabbit --restart=always -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management

     

    若未设置,RABBITMQ_DEFAULT_USER,RABBITMQ_DEFAULT_PASS 时,默认账号密码都为:guest

  2. 打开浏览器,输入网址:http://localhost:15672 ,输入账号与密码即可登录rabbitmq 客户端管理界面

7. 部署.NetCore 项目

  1. 创建项目时,将启用docker 选中(后期也能动态添加dockerFile)

  2. 编写完代码时,编译生成

  3. 构造镜像

Dockerfile 样本:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
COPY . /unit8
WORKDIR /unit8
EXPOSE 8888
ENTRYPOINT ["dotnet", "Step4.Unit8.dll","--urls","http://0.0.0.0:8888"]
 

 

在解决方案文件夹中点击打开powershell :docker build -t 镜像名:版本号 -f Dockerfile路径 .

注意后面一个 .,这是一个大坑

docker build -t unit8:1.0 -f ./DockerFile .

 

 

  1. 压缩镜像,方便传输至linux系统

Docker save -o 路径/文件名

Docker save -o D:/unit8.tar

 

  1. 将压缩后的镜像文件上传至linux系统

  2. 解压导入镜像文件

Docker load --input 文件

docker load --input unit8.tar

 

  1. Docker images -a 查看镜像是否生成

  2. 生成容器

Docker run -it -p 端口号:80 --name 容器名 镜像名:版本号

docker run -it -p 9050:8888 --name=unit8 unit8:1.0 /bin/bash

 

访问宿主机数据库

在MySQL中执行以下语句进行授权:

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
 mysql>flush privileges;
// 其中各字符的含义:
// *.* 对任意数据库任意表有效
// "root" "123456" 是数据库用户名和密码
// '%' 允许访问数据库的IP地址,%意思是任意IP,也可以指定IP
// flush privileges 刷新权限信息

 

访问MySQL容器

注意,数据库连接字符串要用宿主机的IP地址,如:

server=192.168.52.147;uid=root;pwd=123456;database=test;sslmode=none

 

192.168.52.147 这个就是我宿主机的IP地址(虚拟机)

 

 

8. 安装ELK

"日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。

但是日志通常都是存储在各自的服务器中。如果管理数十台服务器, 查阅日志需要依次登陆不同的服务器,查看过程就会很繁琐从而导致工作效率低下。虽然可以使用 rsyslog 服务将日志汇总。但是统计一些日志中的数据或者检索也是很麻烦的,一般使用grep、awk、wc、sort等Linux命令来统计和检索。如果对数量巨大的日志进行统计检索,人工的效率还是十分低下。

通过我们对日志进行收集、汇总到一起,完整的日志数据具有非常重要的作用:

  1. 信息查找。通过检索日志信息,查找相应的报错,可以快速的解决BUG。

  2. 数据分析。如果是截断整理格式化后的日志信息,可以进一步对日志进行数据分析和统计,可以选出头条,热点,或者爆款。

  3. 系统维护。对日志信息分析可以了解服务器的负荷和运行状态。可以针对性的对服务器进行优化。

二、ELK简介

ELK实时日志收集分析系统可以完美的解决以上问题。ELK作为一款开源软件可以免费使用,也有强大的团队和社区对它实时更新。

ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。

Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。

在elasticsearch中,所有节点的数据是均等的。

Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。

版本说明:

Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。

 

安装步骤

1. ElasticSearch

docker pull elasticsearch:7.7.1

 

准备好三个目录:config, logs,data用于挂载数据。

cd /root/es
mkdir {config,logs,data}

 

在/root/es/config 下准备好一个配置文件elasticsearch.yml:

cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
# 配置跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

 

给/root/es 目录赋予root 用户权限

# 查看root用户的uid,语法: id 用户名,例如:
$ id root
uid=0(root) gid=0(root) 组=0(root)

# 如果是其他用户的话,可以将用户加入至root组来:usermod -G root 用户名
$ usermod -G root renwoxing
uid=1000(renwoxing) gid=1000(renwoxing) 组=1000(renwoxing),0(root)


# 给es 目录赋予权限 ,我的用户 uid 是1000
$ chown -R 1000 /root/es
 

创建容器:

docker run -d --name es -p 9200:9200 -p 9300:9300 \
--restart=always --privileged=true \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" \
-v $PWD/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v $PWD/data:/usr/share/elasticsearch/data \
-v $PWD/logs:/usr/share/elasticsearch/logs \
elasticsearch:7.7.1
-d:后台启动
--name:容器名称
-p:端口映射
-e:设置环境变量
discovery.type=single-node:单机运行
如果启动不了,可以加大内存设置:-e ES_JAVA_OPTS="-Xms512m -Xmx512m"
9200端口:为浏览器访问的 http 协议 RESTful 端口
9300 端口为 Elasticsearch 集群间组件的通信端口
此时打开浏览器:http://localhost:9200/,可以响应如下数据:

{
"name": "5bd8a096e91d",
"cluster_name": "docker-cluster",
"cluster_uuid": "cnEAk45MSjyudH2gYh6Qbw",
"version": {
"number": "7.7.1",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "ad56dce891c901a492bb1ee393f12dfff473a423",
"build_date": "2020-05-28T16:30:01.040088Z",
"build_snapshot": false,
"lucene_version": "8.5.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}

 

 

2. ElasticSearch-Head

为什么要安装ElasticSearch-Head呢,原因是需要有一个管理界面进行查看ElasticSearch相关信息

$ docker pull mobz/elasticsearch-head:5
$ docker run -d --name es_head -p 9100:9100 mobz/elasticsearch-head:5

 

 

3. 安装logstash

数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

(1) 在/root/logstash/conf 路径下提前准备好一个配置文件logstash.yml 文件:

$ mkdir logstash
$ cd logstash

$ vim logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.url: http://192.168.253.137:9200
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: changme

path.config: /data/docker/logstash/conf.d/*.conf
path.logs: /var/log/logstash

 

(2) 编辑syslog.conf文件,此处先配置logstash直接采集本地数据发送至es

$ vim /root/logstash/conf.d/syslog.conf 

input {
  syslog {
    type => "system-syslog"
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["192.168.253.137:9200"]  # 定义es服务器的ip
    index => "system-syslog-%{+YYYY.MM}" # 定义索引
  }
}

 

(3) 编辑本地rsyslog配置增加:

vim /etc/rsyslog.conf #增加一行,指向logstash
*.* @@192.168.253.137:5044

 

(4) 配置修改后重启服务

systemctl restart rsyslog

 

(5) 安装logstash

$ docker pull logstash:7.7.1

$ docker run -d --name logstash -p 5044:5044 \
--restart=always --privileged=true \
-v $PWD/conf/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v $PWD/conf.d:/data/docker/logstash/conf.d logstash:7.7.1

 

PS:此处有个注意点,启动会提示找不到 /usr/share/logstash/config/logstash.yml 文件,注意需要添加--privileged=true参数

 

3. 安装 Kabana

(1) 下载镜像

docker pull kibana:7.7.1

 

(2) 安装kibana

$ docker run --name kibana -p 5601:5601 -d -e ELASTICSEARCH_URL=http://192.168.253.137:9200 kibana:7.7.1

 

(3) 修改kibana 容器的配置 /config/kibana.yml

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://172.17.0.4:9200" ] #这个IP是es 容器内部的IP地址,docker inspect es 可以查看到
monitoring.ui.container.elasticsearch.enabled: true

 

kibana 启动有点慢,需要多等一会儿。

http://192.168.253.137:5601

 

9. 安装Consul

拉取Consul镜像

$ docker pull consul # 默认拉取latest
$ docker pull consul:1.6.1 # 拉取指定版本

 

安装并运行

  • docker run -d -p 8500:8500 --restart=always --name=consul consul:1.6.1 agent -server -bootstrap -ui -node=1 -client='0.0.0.0'

     

    agent: 表示启动 Agent 进程。

  • server:表示启动 Consul Server 模式

  • client:表示启动 Consul Cilent 模式。

  • bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导 Leader,在引导群集后,建议不要使用此标志。

  • ui:表示启动 Web UI 管理器,默认开放端口 8500,所以上面使用 Docker 命令把 8500 端口对外开放。

  • node:节点的名称,集群中必须是唯一的,默认是该节点的主机名。

  • client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0

  • join:表示加入到某一个集群中去。 如:-json=192.168.0.11。

访问:http://localhost:8500

10. 安装 RocketMQ

首先,我们需要Docker-Compose环境。

首先我们需要创建docker-compose.yml配置文件。文件内容如下

version: '3.5'
services:
  rmqnamesrv:
    image: foxiswho/rocketmq:server-4.4.0
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    volumes:
      - ./logs:/opt/logs
      - ./store:/opt/store
    networks:
        rmq:
          aliases:
            - rmqnamesrv

  rmqbroker:
    image: foxiswho/rocketmq:broker-4.4.0
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
    volumes:
      - ./logs:/opt/logs
      - ./store:/opt/store
      - ./conf/broker.conf:/etc/rocketmq/broker.conf
    environment:
        NAMESRV_ADDR: "rmqnamesrv:9876"
        JAVA_OPTS: " -Duser.home=/opt"
        JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"
    command: mqbroker -c /etc/rocketmq/broker.conf
    depends_on:
      - rmqnamesrv
    networks:
      rmq:
        aliases:
          - rmqbroker

  rmqconsole:
    image: styletang/rocketmq-console-ng:1.0.0
    container_name: rmqconsole
    ports:
      - 8080:8080
    environment:
        JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
    depends_on:
      - rmqnamesrv
    networks:
      rmq:
        aliases:
          - rmqconsole

networks:
  rmq:
    name: rmq
    driver: bridge

 

然后在与docker-compose.yml同级下面相应的建立三个文件夹conflogsstore。然后在conf文件夹下面建立broker.conf配置文件,所有文件的目录位置如下所示。

docker-compose.yml
conf
    - broker.conf
logs
store

 

然后在编写broker.conf配置文件里面的内容

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.


# 所属集群名字
brokerClusterName=DefaultCluster

# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,
# 在 broker-b.properties 使用: broker-b
brokerName=broker-a

# 0 表示 Master,> 0 表示 Slave
brokerId=0

# nameServer地址,分号分割
# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP
brokerIP1=10.255.52.130

# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true

# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

# Broker 对外服务的监听端口
listenPort=10911

# 删除文件时间点,默认凌晨4点
deleteWhen=04

# 文件保留时间,默认48小时
fileReservedTime=120

# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

# destroyMapedFileIntervalForcibly=120000
# redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store
# commitLog 存储路径
# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog
# 消费队列存储
# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue
# 消息索引存储路径
# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index
# checkpoint 文件存储路径
# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint
# abort 文件存储路径
# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort
# 限制的消息大小
maxMessageSize=65536

# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000

# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128

 

配置文件中的内容我们只需要改动一点即可,即brokerIP1这个属性,我们将其更改为我们本机的ip,可以利用ipconfig进行查看。

修改完以后我们直接在docker-compose.yml文件所在的位置输入命令docker-compose up即可启动。启动成功以后在浏览器中输入http://localhost:8080/即可看到管理页面,就表示我们搭建成功了

11. 安装Nacos

  1. 安装git

    yum install -y git

     

  2. 安装docker compose

    # 1. 从github上下载docker-compose二进制文件安装
    curl -L https://github.com/docker/compose/releases/download/1.27.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
    # 2. 添加可执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    
    # 3. 测试安装结果
    docker-compose --version
    
    # 卸载(别卸载哈)
    rm /usr/local/bin/docker-compose

     

  3. Clone 项目

    git clone https://github.com/nacos-group/nacos-docker.git
    cd nacos-docker

     

  4. 修改application.properties文件

    位置:./nacos-docker/example/init.d/application.properties

    主要修改以下几个属性:

    • db.url.0 : MySQL 连接地址

    • db.user.0:MySQL 用户名

    • db.password.0: MySQL 密码

  5. 创建Nacos 数据库,用于保存Nacos中产生的数据

    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info   */
    /******************************************/
    CREATE TABLE `config_info` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(255) DEFAULT NULL,
      `content` longtext NOT NULL COMMENT 'content',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
      `app_name` varchar(128) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      `c_desc` varchar(256) DEFAULT NULL,
      `c_use` varchar(64) DEFAULT NULL,
      `effect` varchar(64) DEFAULT NULL,
      `type` varchar(64) DEFAULT NULL,
      `c_schema` text,
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='config_info';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_aggr   */
    /******************************************/
    CREATE TABLE `config_info_aggr` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(255) NOT NULL COMMENT 'group_id',
      `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
      `content` longtext NOT NULL COMMENT '内容',
      `gmt_modified` datetime NOT NULL COMMENT '修改时间',
      `app_name` varchar(128) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='增加租户字段';
    
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_beta   */
    /******************************************/
    CREATE TABLE `config_info_beta` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL COMMENT 'content',
      `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='config_info_beta';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_info_tag   */
    /******************************************/
    CREATE TABLE `config_info_tag` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
      `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL COMMENT 'content',
      `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      `src_user` text COMMENT 'source user',
      `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='config_info_tag';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = config_tags_relation   */
    /******************************************/
    CREATE TABLE `config_tags_relation` (
      `id` bigint(20) NOT NULL COMMENT 'id',
      `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
      `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
      `data_id` varchar(255) NOT NULL COMMENT 'data_id',
      `group_id` varchar(128) NOT NULL COMMENT 'group_id',
      `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
      `nid` bigint(20) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY (`nid`),
      UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
      KEY `idx_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='config_tag_relation';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = group_capacity   */
    /******************************************/
    CREATE TABLE `group_capacity` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
      `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
      `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
      `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
      `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
      `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
      `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_group_id` (`group_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='集群、各Group容量信息表';
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = his_config_info   */
    /******************************************/
    CREATE TABLE `his_config_info` (
      `id` bigint(64) unsigned NOT NULL,
      `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `data_id` varchar(255) NOT NULL,
      `group_id` varchar(128) NOT NULL,
      `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
      `content` longtext NOT NULL,
      `md5` varchar(32) DEFAULT NULL,
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00',
      `src_user` text,
      `src_ip` varchar(20) DEFAULT NULL,
      `op_type` char(10) DEFAULT NULL,
      `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
      PRIMARY KEY (`nid`),
      KEY `idx_gmt_create` (`gmt_create`),
      KEY `idx_gmt_modified` (`gmt_modified`),
      KEY `idx_did` (`data_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='多租户改造';
    
    
    /******************************************/
    /*   数据库全名 = nacos_config   */
    /*   表名称 = tenant_capacity   */
    /******************************************/
    CREATE TABLE `tenant_capacity` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
      `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
      `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
      `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
      `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
      `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
      `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
      `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间',
      `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='租户容量信息表';
    
    
    CREATE TABLE `tenant_info` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `kp` varchar(128) NOT NULL COMMENT 'kp',
      `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
      `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
      `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
      `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
      `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
      `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
      KEY `idx_tenant_id` (`tenant_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='tenant_info';
    
    CREATE TABLE users (
        username varchar(50) NOT NULL PRIMARY KEY,
        password varchar(500) NOT NULL,
        enabled boolean NOT NULL
    );
    
    CREATE TABLE roles (
        username varchar(50) NOT NULL,
        role varchar(50) NOT NULL,
        constraint uk_username_role UNIQUE (username,role)
    );
    
    CREATE TABLE permissions (
        role varchar(50) NOT NULL,
        resource varchar(512) NOT NULL,
        action varchar(8) NOT NULL,
        constraint uk_role_permission UNIQUE (role,resource,action)
    );
    
    INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
    
    INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

     

  6. 在 ./nacos-docker/example 目录下新建 nacos.yaml 文件,配置内容如下:

    version: "3.8"
    services:
      nacos:
        image: nacos/nacos-server
        container_name: nacos
        env_file:
          - ../env/custom-application-config.env
        volumes:
          - ./standalone-logs/:/home/nacos/logs
          - ./init.d/application.properties:/home/nacos/conf/application.properties
        ports:
          - "8848:8848"
          - "9848:9848"
        environment:
          JVM_XMS: 512m
          JVM_XMX: 512m
        restart: on-failure

     

    • JVM_XMS: 就是初始分配堆内存配置-Xms,默认 :2g

    • JVM_XMX:就是堆内存最大配置-Xmx,默认 :2g

    • JVM_XMN:就是堆内存中年轻代内存大小配置-Xmn,默认 :1g

    • JVM_MS:就是元数据空间-XX:MetaspaceSize,默认 :128m

    • JVM_MMS:就是元数据空间-XX:MaxMetaspaceSize,默认 :320m

 

  1. 单机模式 创建容器

    docker-compose -f example/nacos.yaml up

     

 

访问:http://你的IP地址:8848/nacos

默认登录账号:nacos,密码:nacos

 

12. Sentry 安装

Sentry 是一款异常日志监控报警组件,非常强大

Sentry 安装的硬性条件

  • Linux 系统 (4核,4G内存)

  • Docker 版本 docker-ce-19.03.9 及以上(可以卸载,然后重新安装新的)

  • Docker Compose 1.27.2 及以上

本人试过直接用Docker 镜像安装,过程会出现各种各样的问题,依赖的组件也多,我们选择直接用git 下载源码进行安装

  1. 安装git

    yum install -y git

     

  2. 克隆项目(github有可能下载失败,gitee下载没问题)

    git clone https://gitee.com/jie51886/onpremise.git

     

  3. 查看下载目录(onpremise 是克隆代码)

    ls
    anaconda-ks.cfg  onpremise
    # 进入到这个目录中
    cd onpremise

     

  4. 到onpremise 目录中进行安装

    ./install.sh

     

    这个过程需要的时间比较长(下载镜像,生成容器等等操作),注意完事之后会询问你是否创建管理员邮箱账号,记得一定要填写!!

  5. 启动

    docker-compose up -d

     

  6. 验证访问:http://你的虚拟机IP:9000(记得暴露9000的端口或者关闭防火qiang)

 

如果一不小心将DSN忘记了,如果寻找DSN:?

Projects -> 选择你刚创建的项目 -> 点进去 -> 左上角点击设置小图标 -> 点击client keys(dsn)

 
 
配套视频链接:全网首发java/.net双案例Docker精品课程,Docker 进阶教程(双语言双案例助力教学)-已完结_哔哩哔哩_bilibili

 

热门相关:禁止性爱:梦遗   小姨子   宝贝轻轻:总裁的独家宠爱   豪门隐婚:老婆别闹了   全系灵师:魔帝嗜宠兽神妃