欢乐狗 发表于 2024-1-19 05:48:52

七、Docker常用安装

1.总体步骤<br><br>
[*]搜索镜像:docker search ...
[*]拉取镜像:docker pull ...
[*]查看镜像:docker images
[*]创建容器:docker run -it ...
[*]停止容器:docker stop ...
[*]移除容器:docker rm -f ...
2. 安装tomcat<br><br>1. docker search tomcat:8.5.32
输出结果:
NAME                        DESCRIPTION                                     STARS   OFFICIAL   AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   3106         
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<br><br>1.docker pull nginx
2.mkdir ~/nginx
3.cd ~/nginx
4.docker run -d --name=c_nginx -p 80:80 nginx #创建nginx容器 
配置负载均衡<br><br>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 文件内容修改如下:
usernginx;
worker_processesauto;<br><br>error_log/var/log/nginx/error.log notice;
pid      /var/run/nginx.pid;<br><br>
events {
    worker_connections1024;
}<br><br>
http {
    include       /etc/nginx/mime.types;
    default_typeapplication/octet-stream;<br><br>    log_formatmain'$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';<br><br>    access_log/var/log/nginx/access.logmain;<br><br>    sendfile      on;
   
    keepalive_timeout65;<br><br>    # 此处配置负载均衡
    upstream springcloud{
      server 192.168.253.133:8080;
      server 192.168.253.130:8081;
    }<br><br>    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_namelocalhost;<br><br>    location / {
      proxy_pass http://springcloud; # 配置负载均衡
      root   /usr/share/nginx/html;
      indexindex.html index.htm;
    }<br><br>    error_page   500 502 503 504/50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }

<br><br>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<br><br>$ 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<br><br>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 命令的基本操作<br><br>一、 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<br><br>在 /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<br><br>
[*]下载带web管理客户端的镜像:
docker pull rabbitmq:management 

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

[*]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
[*]打开浏览器,输入网址:http://localhost:15672 ,输入账号与密码即可登录rabbitmq 客户端管理界面
7. 部署.NetCore 项目<br><br>
[*]创建项目时,将启用docker 选中(后期也能动态添加dockerFile)
[*]编写完代码时,编译生成
[*]构造镜像
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 . 
 

[*]压缩镜像,方便传输至linux系统
Docker save -o 路径/文件名
Docker save -o D:/unit8.tar 

[*]将压缩后的镜像文件上传至linux系统
[*]解压导入镜像文件
Docker load --input 文件
docker load --input unit8.tar 

[*]Docker images -a 查看镜像是否生成
[*]生成容器
Docker run -it -p 端口号:80 --name 容器名 镜像名:版本号
docker run -it -p 9050:8888 --name=unit8 unit8:1.0 /bin/bash 
访问宿主机数据库<br><br>在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容器<br><br>注意,数据库连接字符串要用宿主机的IP地址,如:
server=192.168.52.147;uid=root;pwd=123456;database=test;sslmode=none 
192.168.52.147 这个就是我宿主机的IP地址(虚拟机)
 
 
8. 安装ELK<br><br> "日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。
但是日志通常都是存储在各自的服务器中。如果管理数十台服务器, 查阅日志需要依次登陆不同的服务器,查看过程就会很繁琐从而导致工作效率低下。虽然可以使用 rsyslog 服务将日志汇总。但是统计一些日志中的数据或者检索也是很麻烦的,一般使用grep、awk、wc、sort等Linux命令来统计和检索。如果对数量巨大的日志进行统计检索,人工的效率还是十分低下。
通过我们对日志进行收集、汇总到一起,完整的日志数据具有非常重要的作用:

[*]信息查找。通过检索日志信息,查找相应的报错,可以快速的解决BUG。
[*]数据分析。如果是截断整理格式化后的日志信息,可以进一步对日志进行数据分析和统计,可以选出头条,热点,或者爆款。
[*]系统维护。对日志信息分析可以了解服务器的负荷和运行状态。可以针对性的对服务器进行优化。
二、ELK简介<br><br> 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 的第一选择。
版本说明:<br><br>Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
 
安装步骤<br><br>1. ElasticSearch<br><br>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 <br><br> 为什么要安装ElasticSearch-Head呢,原因是需要有一个管理界面进行查看ElasticSearch相关信息
$ docker pull mobz/elasticsearch-head:5
$ docker run -d --name es_head -p 9100:9100 mobz/elasticsearch-head:5 
https://img2023.cnblogs.com/blog/568354/202311/568354-20231129151914096-1987100488.png
 
3. 安装logstash<br><br>数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
(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<br><br>(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<br><br>拉取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 <br><br>首先,我们需要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同级下面相应的建立三个文件夹conf、logs、store。然后在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<br><br>
[*]安装git
yum install -y git 
[*]安装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 
[*]Clone 项目
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker 
[*]修改application.properties文件
位置:./nacos-docker/example/init.d/application.properties
主要修改以下几个属性:

[*]db.url.0 : MySQL 连接地址
[*]db.user.0:MySQL 用户名
[*]db.password.0: MySQL 密码

[*]创建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'); 
[*]在 ./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

 

[*]单机模式 创建容器
docker-compose -f example/nacos.yaml up 
 
访问:http://你的IP地址:8848/nacos
默认登录账号:nacos,密码:nacos
 
12. Sentry 安装<br><br>Sentry 是一款异常日志监控报警组件,非常强大
Sentry 安装的硬性条件

[*]Linux 系统 (4核,4G内存)
[*]Docker 版本 docker-ce-19.03.9 及以上(可以卸载,然后重新安装新的)
[*]Docker Compose 1.27.2 及以上
本人试过直接用Docker 镜像安装,过程会出现各种各样的问题,依赖的组件也多,我们选择直接用git 下载源码进行安装

[*]安装git
yum install -y git 
[*]克隆项目(github有可能下载失败,gitee下载没问题)
git clone https://gitee.com/jie51886/onpremise.git 
[*]查看下载目录(onpremise 是克隆代码)
ls
anaconda-ks.cfgonpremise
# 进入到这个目录中
cd onpremise 
[*]到onpremise 目录中进行安装
./install.sh 
这个过程需要的时间比较长(下载镜像,生成容器等等操作),注意完事之后会询问你是否创建管理员邮箱账号,记得一定要填写!!

[*]启动
docker-compose up -d 
[*]验证访问:http://你的虚拟机IP:9000(记得暴露9000的端口或者关闭防火qiang)
 
如果一不小心将DSN忘记了,如果寻找DSN:?
Projects -> 选择你刚创建的项目 -> 点进去 -> 左上角点击设置小图标 -> 点击client keys(dsn)
  配套视频链接:全网首发java/.net双案例Docker精品课程,Docker 进阶教程(双语言双案例助力教学)-已完结_哔哩哔哩_bilibili <br><br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 七、Docker常用安装