Docker常用应用部署
Docker常用应用部署
一、Ubuntu系统Docker快速安装
Docker官网安装文档:https://docs.docker.com/engine/install/ubuntu/
# 文本处理的流编辑器 -i直接修改读取的文件内容,而不是输出到终端
# sed -i 's/原字符串/新字符串/' /home/1.txt
# 下面这个是修改ubuntu的源
sudo sed -i 's/cn.archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 更新
sudo apt update -y
sudo apt install curl
# 抓取docker安装脚本到一个文件中
curl -fsSL get.docker.com -o get-docker.sh
# 执行脚本,通过脚本下载 推荐设置阿里云镜像下载加速 默认管理员登陆不加sudo;有警告就忽略
sudo sh get-docker.sh --mirror Aliyun#==========解决每次输入sudo问题===========
# 将当前用户加入到docker组,这样每次使用就不需要sudo了
sudo gpasswd -a ${USER} docker
# 更新用户组,这样才能生效
newgrp - docker
sudo service docker restart#============加速器================
# 加速器网址:https://www.daocloud.io/mirror#accelerator-doc,可能有时会失效
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 查看配置文件,自己添加加速器
vi /etc/docker/daemon.json
# {"registry-mirrors": ["http://hub-mirror.c.163.com"]}# 下面地址任选一种就好
#腾讯云的镜像地址
https://mirror.ccs.tencentyun.com
#网易的镜像地址
http://hub-mirror.c.163.com
#下面的地址是假的,需要自己去阿里云 的容器镜像服务-》镜像加速器去复制自己的镜像地址
https://xxxx.mirror.aliyuncs.com
#daocloud发布的镜像地址
http://f1361db2.m.daocloud.io
# 最后要重启
sudo systemctl restart docker.service
# 安装ssh
sudo apt install openssh-server#===========docker-compose=============
# 在官网下载符合条件的:https://github.com/docker/compose/releases
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# wget也可以使用来下载
mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 记得添加权限
chmod +x /usr/local/bin/docker-compose# 放在bin目录下,在其他位置可以直接使用
sudo mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 第二种方法
sudo install docker-compose-linux-x86_64 /usr/local/bin/docker-compose
docker-compose ps# ============================================
# 2023/6/20可用源
# 编辑 Docker 配置文件
sudo vim /etc/docker/daemon.json
{"registry-mirrors": ["https://dockerproxy.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com"]
}
# 方法一,采用 systemctl 来重启,推荐
sudo systemctl daemon-reload
sudo systemctl restart docker
# 方法二,采用 service 来重启
sudo service docker restart
# 文本处理的流编辑器 -i直接修改读取的文件内容,而不是输出到终端
# sed -i 's/原字符串/新字符串/' /home/1.txt
# 下面这个是修改ubuntu的源
sudo sed -i 's/cn.archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 更新
sudo apt update -y
sudo apt install curl
# 抓取docker安装脚本到一个文件中
curl -fsSL get.docker.com -o get-docker.sh
# 执行脚本,通过脚本下载 推荐设置阿里云镜像下载加速 默认管理员登陆不加sudo;有警告就忽略
sudo sh get-docker.sh --mirror Aliyun#==========解决每次输入sudo问题===========
# 将当前用户加入到docker组,这样每次使用就不需要sudo了
sudo gpasswd -a ${USER} docker
# 更新用户组,这样才能生效
newgrp - docker
sudo service docker restart#============加速器================
# 加速器网址:https://www.daocloud.io/mirror#accelerator-doc,可能有时会失效
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 查看配置文件,自己添加加速器
vi /etc/docker/daemon.json
# {"registry-mirrors": ["http://hub-mirror.c.163.com"]}# 下面地址任选一种就好
#腾讯云的镜像地址
https://mirror.ccs.tencentyun.com
#网易的镜像地址
http://hub-mirror.c.163.com
#下面的地址是假的,需要自己去阿里云 的容器镜像服务-》镜像加速器去复制自己的镜像地址
https://xxxx.mirror.aliyuncs.com
#daocloud发布的镜像地址
http://f1361db2.m.daocloud.io
# 最后要重启
sudo systemctl restart docker.service
# 安装ssh
sudo apt install openssh-server#===========docker-compose=============
# 在官网下载符合条件的:https://github.com/docker/compose/releases
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# wget也可以使用来下载
mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 记得添加权限
chmod +x /usr/local/bin/docker-compose# 放在bin目录下,在其他位置可以直接使用
sudo mv /usr/local/bin/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 第二种方法
sudo install docker-compose-linux-x86_64 /usr/local/bin/docker-compose
docker-compose ps# ============================================
# 2023/6/20可用源
# 编辑 Docker 配置文件
sudo vim /etc/docker/daemon.json
{"registry-mirrors": ["https://dockerproxy.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://ccr.ccs.tencentyun.com"]
}
# 方法一,采用 systemctl 来重启,推荐
sudo systemctl daemon-reload
sudo systemctl restart docker
# 方法二,采用 service 来重启
sudo service docker restart
二、Docker安装基本应用
1、Tomcat安装
# 指定时区和中文乱码
docker run -d -p 8080:8080 \
--name tomcat \
--restart=always \
-v /home/docker/tomcat/logs/:/usr/local/tomcat/logs/ \
# 这里需要自行创建好webapps内容,或者进入容器将webapps.list改成webapps
-v /home/docker/tomcat/webapps/:/usr/local/tomcat/webapps/ \
-v /etc/localtime:/etc/localtime \
-e TZ="Asia/Shanghai" \
-e LANG="C.UTF-8" \
tomcat:latest#==========================
docker run --name tomcat -p 8080:8080 \
-v tomcatconf:/usr/local/tomcat/conf \
-v tomcatwebapp:/usr/local/tomcat/webapps \
-d tomcat:jdk8-openjdk-slim-buster
docker-compose部署
version: '3'
services:tomcat:image: tomcat:latestcontainer_name: tomcatrestart: alwaysports:- 8080:8080environment:TZ: "Asia/Shanghai"LANG: "C.UTF-8"volumes:- /opt/tomcat/conf/server.xml:/usr/local/tomcat/server.xml- /opt/tomcat/webapps:/usr/local/tomcat/webapps- /opt/tomcat/logs:/usr/local/tomcat/logs
2、Nginx安装
# https://www.digitalocean.com/community/tools/nginx
# 注意 外部的/nginx/conf下面的内容必须存在,否则挂载会覆盖
docker run -p 80:80 -p 443:443 --name nginx \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-v /usr/local/docker/nginx/logs:/var/log/nginx \
-v /usr/local/docker/nginx/conf/:/etc/nginx \
-d nginx:1.20.1
docker-compose部署
version: '3'
services:nginx:container_name: nginximage: nginxrestart: alwaysports:- 80:80- 443:443privileged: truevolumes:- /etc/localtime:/etc/localtime:ro- ./conf/nginx/log/:/var/log/nginx# 注意:如下挂载都是覆盖#- ./conf/nginx/conf.d:/etc/nginx/conf.d#- ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro#- ./conf/nginx/html:/usr/share/nginx/html
3、Mysql安装
3.1 单机版安装
# 5.7版本
docker run -p 3306:3306 --name mysql57 \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7#8.x版本,引入了 secure-file-priv 机制,磁盘挂载将没有权限读写data数据,所以需要将权限透传,或者
chmod -R 777 /app/mysql/data# --privileged 特权容器,容器内使用真正的root用户
docker run -p 3306:3306 --name mysql8 \
-v /app/mysql/conf:/etc/mysql/conf.d \
-v /app/mysql/log:/var/log/mysql \
-v /app/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged \
-d mysql# 针对配置文件,新建 my.cnf (/usr/local/mysql/conf),否则中文乱码
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
docker-compose部署
version : '3'
services:mysql:# 容器名container_name: mysql5# 重启策略restart: alwaysimage: mysql:5.7ports:- "3306:3306"volumes:# 挂载配置文件# - ./mysql/db/:/docker-entrypoint-initdb.d# 挂载配置文件- ./mysql/conf:/etc/mysql/conf.d# 挂载日志- ./mysql/logs:/logs# 挂载数据- ./mysql/data:/var/lib/mysqlcommand: ['mysqld','--innodb-buffer-pool-size=80M','--character-set-server=utf8mb4','--collation-server=utf8mb4_unicode_ci','--default-time-zone=+8:00','--lower-case-table-names=1']environment:# root 密码MYSQL_ROOT_PASSWORD: 123456#======================mysql8.0=================
version: '3'
services:mysql:container_name: mysql8restart: always# 注意8.0以后的问题privileged: trueimage: mysql:8.0volumes:# 挂载配置文件- ./mysql/conf:/etc/mysql/conf.d# 挂载日志- ./mysql/logs:/logs# 挂载数据- ./mysql/data:/var/lib/mysqlcommand:--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=trueenvironment:- TZ=Asia/Shanghai - LANG=C.UTF-8 - MYSQL_ROOT_PASSWORD=rootports:- 33106:3306network_mode: "bridge"
3.2 主从复制
# 1、新建主服务器容器实例3307
docker run -p 3307:3306 --name mysql-master \
-v /usr/local/docker/mysql-master/log:/var/log/mysql \
-v /usr/local/docker/mysql-master/data:/var/lib/mysql \
-v /usr/local/docker/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7# 2、进入/usr/local/docker/mysql-master/conf目录下新建 my.cnf
#==================================
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
#====================================# 3、修改完配置后重启master实例
docker restart mysql-master# 4、进入mysql-master容器
docker exec -it mysql-master /bin/bash
mysql -uroot -proot# 5、master容器实例内创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';# 6、新建从服务器容器实例3308
docker run -p 3308:3306 --name mysql-slave \
-v /usr/local/docker/mysql-slave/log:/var/log/mysql \
-v /usr/local/docker/mysql-slave/data:/var/lib/mysql \
-v /usr/local/docker/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7# 7、进入/usr/local/docker/mysql-slave/conf目录下新建my.cnf
# ====================================================
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
# ====================================================# 8、修改完配置后重启slave实例
docker restart mysql-slave# 9、在主数据库中查看主从同步状态
docker exec -it mysql-master /bin/bash
mysql -uroot -proot
show master status;
mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 | 617 | | mysql | |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)# 10、在从数据库中配置主从复制
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
mysql> change master to master_host='106.14.76.55', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.03 sec)# master_host:主数据库的IP地址;
# master_port:主数据库的运行端口;
# master_user:在主数据库创建的用于同步数据的用户账号;
# master_password:在主数据库创建的用于同步数据的用户密码;
# master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
# master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
# master_connect_retry:连接失败重试的时间间隔,单位为秒。 # 11、在从数据库中查看主从同步状态
docker exec -it mysql-slave /bin/bash
mysql -uroot -proot
show slave status \G;# 12、在从数据库中开启主从同步看到Slave_IO_Running和Slave_SQL_Running启动就行
start slave;
4、Redis安装
4.1 单机版安装
# 提前准备好redis.conf文件,创建好相应的文件夹。如:
port 6379
# 开启redis数据持久化,可选
appendonly yes
# 开启redis验证,可选
requirepass 123
#注释掉,允许redis外地连接
# bind 127.0.0.1
#将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
daemonize no #更多配置参照 https://raw.githubusercontent.com/redis/redis/6.0/redis.conf
docker run -p 6379:6379 --name redis \
--privileged=true \
-v /usr/local/redis/redis.conf:/etc/redis/redis.conf \
-v /usr/local/redis/data:/data -d redis:6.0.8 \
redis-server /etc/redis/redis.conf --appendonly yes
docker-compose部署
version: '3'
services:redis:image: redis:6.2.5container_name: redisprivileged: truevolumes:- ../redis/data:/data- ../redis/conf/redis.conf:/usr/local/etc/redis/redis.conf- ../redis/logs:/logscommand: ["redis-server","/usr/local/etc/redis/redis.conf"]privileged: trueports:- 6379:6379environment:- TZ="Asia/Shanghai"restart: always
4.2 集群安装
# port:节点端口;
# requirepass:设置密码,访问时需要验证
# protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
# daemonize:是否以守护线程的方式启动(后台启动),默认 no;
# appendonly:是否开启 AOF 持久化模式,默认 no;
# cluster-enabled:是否开启集群模式,默认 no;
# cluster-config-file:集群节点信息文件;
# cluster-node-timeout:集群节点连接超时时间;
# cluster-announce-ip:集群节点 IP
# 注意: 如果你想要你的redis集群可以供外网访问,这里直接填 服务器的IP 地址即可;如若为了安全,只是在服务器内部进行访问,这里还需要做一些修改。
# cluster-announce-port:集群节点映射端口;
# cluster-announce-bus-port:集群节点总线端口#shell脚本循环生成配置文件
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat <<EOF>>/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
# 首先创建自定义网络
docker network create --driver bridge --subnet 172.38.0.0/24 --gateway 172.38.0.1 redis
#分别启动docker容器,shell脚本,注意配置文件的生成
for i in $(seq 1 6);\
do \
docker run -p 637${i}:6379 -p 1637${i}:16379 \
--name redis-${i} --privileged=true \
-v /mydata/redis/node-${i}/data:/data \
-v /mydata/redis/node-${i}/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.1${i} redis \
redis-server /etc/redis/redis.conf
done# 随机进入一个容器
docker exec -it redis-1 /bin/bash
# 生成集群,--cluster-replicas 1 表示为每个master创建一个slave节点
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
# 进入客户端
redis-cli -p 6379
# 查看集群结点状况
cluster nodes
# 查看集群信息
cluster info
# 需要进入集群模式,否则会报错
redis-cli -p 6379 -c
# 集群会自动计算哈希槽存储位置,若主节点宕机,从节点会成为主节点
127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 172.38.0.13:6379
OK
4.3 主从扩容
# 1、新建6377、6378两个节点+新建后启动+查看是否8节点,注意配置文件的创建
docker run -p 6377:6379 -p 16377:16379 --name redis-7 --privileged=true -v /mydata/redis/node-7/data:/data -v /mydata/redis/node-7/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.17 redis redis-server /etc/redis/redis.conf
docker run -p 6378:6379 -p 16378:16379 --name redis-8 --privileged=true -v /mydata/redis/node-8/data:/data -v /mydata/redis/node-8/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.18 redis redis-server /etc/redis/redis.conf# 2、进入6377容器实例内部
docker exec -it redis-7 /bin/bash# 3、将新增的6377节点(空槽号)作为master节点加入原集群
# redis-cli --cluster add-node 自己实际IP地址:6377 自己实际IP地址:6371
# 6377 就是将要作为master新增节点
# 6371 就是原来集群节点里面的领路人,相当于6377找到组织加入集群
# 这里我直接使用了内部网络
redis-cli --cluster add-node 172.38.0.17:6379 172.38.0.11:6379 # 4、检查集群情况第1次
redis-cli --cluster check 172.38.0.11:6379# 5、重新分派槽号
redis-cli --cluster reshard 172.38.0.11:6379# 因为4台,16384/4=4096,每台分4分之一
How many slots do you want to move (from 1 to 16384)? 4096
# 172.38.0.17:6379 的id
What is the receiving node ID? 3a732104b11d3cf81d1128def9f0158fb5708ca7
# 输入 all
Source node #1: all# 6、检查集群情况第2次
redis-cli --cluster check 172.38.0.11:6379
172.38.0.11:6379 (9c109831...) -> 0 keys | 4096 slots | 1 slaves.
172.38.0.12:6379 (0100361c...) -> 0 keys | 4096 slots | 1 slaves.
172.38.0.13:6379 (348dc3b1...) -> 0 keys | 4096 slots | 1 slaves.
172.38.0.17:6379 (5d34f842...) -> 0 keys | 4096 slots | 0 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 172.38.0.11:6379)
M: 9c109831a0afd33f7c13500caf39d3191a13e0b3 172.38.0.11:6379slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: 0100361c6056686b671f84877af18ffd22b4c428 172.38.0.12:6379slots:[6827-10922] (4096 slots) master1 additional replica(s)
M: 348dc3b13714d0b07236c2ba6c5147f270b08800 172.38.0.13:6379slots:[12288-16383] (4096 slots) master1 additional replica(s)
S: 6fc86fc554f1f939564e6acc346da222a886ab6a 172.38.0.14:6379slots: (0 slots) slavereplicates 348dc3b13714d0b07236c2ba6c5147f270b08800
S: 2a2fe251d41085ec7eb53e9bf4e4c749e5d9dbb9 172.38.0.15:6379slots: (0 slots) slavereplicates 9c109831a0afd33f7c13500caf39d3191a13e0b3
M: 5d34f8422f8b68ea87bd2f8388c686fdbcfdc9a1 172.38.0.17:6379slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: 9068998c9b5cd5e4cca939738cc42a2954770b47 172.38.0.16:6379slots: (0 slots) slavereplicates 0100361c6056686b671f84877af18ffd22b4c428
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.## 为什么172.38.0.17是3个新的区间,以前的还是连续?
## 重新分配成本太高,所以前3家各自匀出来一部分,从三个旧节点分别匀出1364个坑位给新节点172.38.0.17 # 7、为主节点172.38.0.17分配从节点172.38.0.18
# redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
redis-cli --cluster add-node 172.38.0.18:6379 172.38.0.17:6379 --cluster-slave --cluster-master-id 3a732104b11d3cf81d1128def9f0158fb5708ca7 # 8、检查集群情况第3次
redis-cli --cluster check 172.38.0.18:6379
4.4 主从缩容
# 1、将172.38.0.17和172.38.0.18下线
# 2、检查集群情况 获得172.38.0.18的从节点ID
redis-cli --cluster check 172.38.0.11:6379# 3、将172.38.0.18从节点删除 从集群中将4号从节点172.38.0.18删除
# redis-cli --cluster del-node ip:从机端口 从机6388节点ID
redis-cli --cluster del-node 172.38.0.18:6379 bdf8a5114bbad6d400aa8b1a5e3f29b174d6676e
## 检查一下发现只剩下7台机器了
redis-cli --cluster check 172.38.0.11:6379# 4、将172.38.0.17的槽号清空,重新分配,本例将清出来的槽号都给172.38.0.11
redis-cli --cluster reshard 172.38.0.11:6379How many slots do you want to move (from 1 to 16384)?4096
# 172.38.0.11的id
What is the receiving node ID? edf165b5d01f1a1f276237517d391c86c32d9f93
# 172.38.0.17的id
Source node #1: 3a732104b11d3cf81d1128def9f0158fb5708ca7
Source node #2: done# 5、检查集群情况第二次
redis-cli --cluster check 172.38.0.11:6379
# 4096个槽位都指给172.38.0.11,它变成了8192个槽位,相当于全部都给172.38.0.11了,不然要输入3次,一锅端 # 6、将172.38.0.17删除
# redis-cli --cluster del-node ip:端口 172.38.0.17节点ID
redis-cli --cluster del-node 172.38.0.17:6379 3a732104b11d3cf81d1128def9f0158fb5708ca7# 7、检查集群情况第三次
redis-cli --cluster check 172.38.0.11:6379
5、MongoDB安装
version: '3'
services:mongo:image: mongo:5.0.9container_name: mongorestart: alwaysports:- 27017:27017volumes:- /etc/localtime:/etc/localtime #时区- ../mongodb/data/db:/data/db #数据- ../mongodb/log:/var/log/mongodb # 挂载日志目录# - ./config:/etc/mongo #配置目录privileged: trueenvironment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: rootmongo-express:image: mongo-express:0.54container_name: mongo-expressrestart: alwaysports:- 8079:8081environment:ME_CONFIG_MONGODB_ADMINUSERNAME: rootME_CONFIG_MONGODB_ADMINPASSWORD: rootME_CONFIG_MONGODB_URL: mongodb://root:root@mongo:27017/
添加管理员
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
# 登录并切换db到admin
$ docker exec -it mongo mongo admin# 登录root用户,如果前面没有创建root用户可跳过此步
> db.auth('root','123456')# 创建所有数据库管理用户 admin/123456
> db.createUser({user:'admin',pwd: '123456',roles:[{role:"userAdminAnyDatabase", db:"admin"}, "readWriteAnyDatabase"]});
# Successfully added user: { ...# 使用新用户登录,返回 0=失败 1=成功
> db.auth('admin', '123456')
# 1# 创建测试库
> use testdb
# 插入测试数据
> db.testdb.insert({"name":"testdb"})
# 创建用户并授权,dbOwner代表数据库所有者角色,拥有最高该数据库最高权限。
> db.createUser({ user:"user_testdb", pwd:"123456", roles: [{ role:"readWrite", db:"testdb" }] })
>
# 退出数据库
> exit
6、MiniO安装
version: '3'
services:minio:image: minio/minio:RELEASE.2022-03-26T06-49-28Zhostname: "minio"ports:- "9000:9000" # api 端口- "9001:9001" # 控制台端口environment:MINIO_ACCESS_KEY: root #管理后台用户名MINIO_SECRET_KEY: rootroot #管理后台密码,最小8个字符volumes:- ../minio/data:/data #映射当前目录下的data目录至容器内/data目录- ../minio/config:/root/.minio/ #映射配置目录command: server --console-address ':9001' /data #指定容器中的目录 /dataprivileged: truerestart: alwayslogging:options:max-size: "50M" # 最大文件上传限制max-file: "10"driver: json-file
7、Nacos安装
# 外置数据库
version: "3"
services:nacos:image: nacos/nacos-server:${NACOS_VERSION}container_name: nacos-standalone-mysqlenv_file:- ../nacos/nacos-standlone-mysql.envvolumes:- ../nacos/standalone-logs/:/home/nacos/logs- ../nacos/init.d/custom.properties:/home/nacos/init.d/custom.propertiesports:- "8848:8848"- "9848:9848"- "9555:9555"restart: always
设置配置文件
# 同级目录下的.env
NACOS_VERSION=v2.0.4# ../nacos/nacos-standlone-mysql.env
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=192.168.31.28
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
8、其他常用软件
Docker安装基本应用
最全的Docker-compose应用部署
相关文章:
Docker常用应用部署
Docker常用应用部署 一、Ubuntu系统Docker快速安装 Docker官网安装文档:https://docs.docker.com/engine/install/ubuntu/ # 文本处理的流编辑器 -i直接修改读取的文件内容,而不是输出到终端 # sed -i s/原字符串/新字符串/ /home/1.txt # 下面这个是修…...
【数据分享】2014-2022年我国淘宝村点位数据(Excel格式/Shp格式)
电子商务是过去一二十年我国发展最快的行业,其中又以淘宝为代表,淘宝的发展壮大带动了一大批服务淘宝电子商务的村庄,这些村庄被称为淘宝村! 截至到目前,阿里研究院梳理并公布了2014-2022年共9个年份的淘宝村名单&…...
Ubuntu 安装 docker-compose
在Ubuntu上安装Docker Compose,可以按照以下步骤进行操作: 下载 Docker Compose 二进制文件 sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker…...
vue2、vue3中路由守卫变化
什么是路由守卫? 路由守卫就是路由跳转的一些验证,比如登录鉴权(没有登录不能进入个人中心页)等等等 路由守卫分为三大类: 全局守卫:前置守卫:beforeEach 后置钩子:afterEach 单个…...
Leetcode—547.省份数量【中等】
2023每日刷题(八) Leetcode—547.省份数量 实现代码 static int father[210] {0};int Find(int x) {if(x ! father[x]) {father[x] Find(father[x]);}return father[x]; }void Union(int x, int y) {int a Find(x);int b Find(y);if(a ! b) {fathe…...
Nginx 防盗链
nginx防盗链问题 盗链: 就是a网站有一张照片,b网站引用了a网站的照片 。 防盗链: a网站通过设置禁止b网站引用a网站的照片。 nginx防止网站资源被盗用模块 ngx_http_referer_module 如何区分哪些是不正常的用户? HTTP Referer…...
26. 通过 cilium pwru了解网络包的来龙去脉
pwru是一种基于eBPF的工具,可跟踪Linux内核中的网络数据包,并具有先进的过滤功能。它允许对内核状态进行细粒度检查,以便通过调试网络连接问题来解决传统工具(如iptables TRACE或tcpdump)难以解决甚至无法解决的问题。在本文中,我将介绍pwru如何在不必事先了解所有内容的…...
刷题笔记day01-数组
704 题 主要强调,左闭右闭的情况,就是每次查询都会和 [left, right] 进行比较。所以后面的都是mid-1,mid1 的情况。 package mainfunc search(nums []int, target int) int {// 二分查找方法// 每次查找都是左闭右闭的情况left : 0right : …...
C#调用C++ 的DLL传送和接收中文字符串
1 c#向c传送中文字符串 设置:将 字符集 改为 使用多字节字符集 cpp代码: extern "C"_declspec(dllexport) int input_chn_str(char in_str[]) {cout<<in_str<<endl;return 0; }c#代码: [DllImport("Demo.dll…...
【MySQL】数据库常见错误及解决
目录 2003错误:连接错误1251错误:身份验证错误1045错误:拒绝访问错误服务没有报告任何错误net start mysql 发生系统错误 5。 1064错误:语法错误1054错误:列名不存在1442错误:触发器中不能对本表增删改1303…...
spring常见问题汇总
1. 什么是spring? Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务 逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架, 为开…...
java8 Lambda表达式以及Stream 流
Lambda表达式 Lambda表达式规则 Lambda表达式可以看作是一段可以传递的代码, Lambda表达式只能用于函数式接口,而函数式接口只有一个抽象方法,所以可以省略方法名,参数类型等 Lambda格式:(形参列表&…...
基于Java的音乐网站管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...
【蓝桥】小蓝的疑问
1、题目 问题描述 小蓝和小桥上完课后,小桥回顾了课上教的树形数据结构,他在地上画了一棵根节点为 1 的树,并且对每个节点都赋上了一个权值 w i w_i wi。 小蓝对小桥多次询问,每次询问包含两个整数 x , k x,k x,kÿ…...
漏洞复现-海康威视综合安防管理平台信息泄露【附Poc】
目录 【产品介绍】 【产品系统UI】 【漏洞说明】 【指纹】 【Nuclei Poc】 【验证】 【产品介绍】 海康威视(Hikvision)是一家总部位于中国杭州的公司,是全球最大的视频监控产品供应商。除了传统的CCTV摄像机和网络摄像机,海…...
【完美世界】被骂国漫之耻,石昊人设战力全崩,现在真成恋爱世界了
【侵权联系删除】【文/郑尔巴金】 深度爆料,《完美世界》动漫第135集预告片已经更新了,但是网友们对此却是一脸槽点。从预告中可以看出,石昊在和战王战天歌的大战中被打成重伤,最后云曦也被战天歌抓住。在云曦面临生死危机的时候…...
34二叉树-BFS和DFS求树的深度
目录 LeetCode之路——104. 二叉树的最大深度 分析 解法一:广度优先遍历 解法二:深度优先遍历 总结 深度优先搜索 (DFS) 广度优先搜索 (BFS LeetCode之路——104. 二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的…...
Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin
Android Glide判断图像资源是否缓存onlyRetrieveFromCache,使用缓存数据,Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity…...
设计模式之创建型模式
创建型模式与对象的创建有关。 创建型模式抽象了对象实例化的过程,这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。创建型模式有以下 工厂模式(Factory Method) 意图…...
使用jdbc技术连接数据库
连接数据库 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version><scope>compile</scope></dependency> </dependencies> g…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
