首页>软件资讯>常见问题

常见问题

docker安装java常用相关技术

发布时间:2025-04-25 17:39:00人气:32



安装目录

#部署目录变量并打印到控制台

mkdir-p /home/install/test && echo'export data=/home/install/test' >> /etc/profile && source /etc/profile  && echo$data



mkdir-p /install/test && echo'export data=/install/test' >> /etc/profile && source /etc/profile  && echo$data


#ip变量并打印到控制台

echo'export ipTemp=192.168.1.10' >> /etc/profile && source /etc/profile && source /etc/profile&& echo$ipTemp


chmod-R  777 dir

设置快捷命令

alias ll='ls -l --color=auto'

alias cp='cp -i'

alias egrep='egrep --color=auto'

alias fgrep='fgrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias rm='rm -i'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

docker

mysql

5.7

单机

配置文件

mkdir -p $data/mysqlOfone && cd $data/mysqlOfone


cat > $data/mysqlOfone/mysqld.cnf <<-'EOF'

[client]

default_character_set=utf8mb4

[mysqld]

collation_server = utf8mb4_general_ci

character_set_server = utf8mb4

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

lower_case_table_names = 1   # 忽略mysql查询大小写

skip-name-resolve #禁用dns反查

#设置时区

default-time-zone = 'Asia/Shanghai'

EOF

启动脚本

cat >$data/mysqlOfone/install.sh <<-'EOF' 

#!/bin/bash

read -p "端口: " port

#dir_work=$(cd `dirname $0`; pwd)

dir_work=$data

mkdir $dir_work/mysql$port/{data,conf,logs} -p

# 检查目录是否成功创建并且是目录

directories=("data" "conf" "logs")

for dir_name in "${directories[@]}"; do

  dir_path="$dir_work/mysql$port/$dir_name"

  if [ -d "$dir_path" ]; then

    echo "目录 $dir_path 存在且是一个目录。"

  else

    echo "错误: $dir_path 不存在或不是一个目录。脚本终止。"

    exit 1

  fi

done

cp mysqld.cnf $dir_work/mysql$port/conf

docker run -d -p $port:3306 --privileged=true  --restart always -v $dir_work/mysql$port/logs:/var/log/mysql -v $dir_work/mysql$port/conf:/etc/mysql/conf.d -v $dir_work/mysql$port/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql$port mysql:5.7.39

EOF

启动:

sh install.sh

#ubuntu

bash install.sh

链接

192.168.1.10 #ip

3306 #端口

root #用户名

123456 #密码



集群-主从

主配置文件夹

mkdir -p $data/mysql-master/conf

cd $data/mysql-master/conf

主配置文件

cat >my.cnf <<-'EOF'

[client]

default_character_set=utf8mb4

[mysqld]

collation_server = utf8mb4_unicode_ci

character_set_server = utf8mb4

## 设置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

##忽略mysql查询大小写

lower_case_table_names = 1 

#设置时区

default-time-zone = 'Asia/Shanghai' 

EOF

启动mysql主

docker run -p 3310:3306 --privileged=true  --restart always --name mysql-master-3310

-v $data/mysql-master/log:/var/log/mysql

-v $data/mysql-master/data:/var/lib/mysql

-v $data/mysql-master/conf:/etc/mysql

-e MYSQL_ROOT_PASSWORD=123456 

-d mysql:5.7.37

从配置文件夹

mkdir -p $data/mysql-slave/conf

cd $data/mysql-slave/conf

从配置文件

cat >my.cnf <<-'EOF'

[client]

default_character_set=utf8mb4

[mysqld]

collation_server = utf8mb4_unicode_ci

character_set_server = utf8mb4

[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

##忽略mysql查询大小写

lower_case_table_names = 1 

#设置时区

default-time-zone = 'Asia/Shanghai'

EOF

启动mysql从

docker run -p 3320:3306 --privileged=true  --restart always --name mysql-slave3320

-v $data/mysql-slave/log:/var/log/mysql

-v $data/mysql-slave/data:/var/lib/mysql

-v $data/mysql-slave/conf:/etc/mysql

-e MYSQL_ROOT_PASSWORD=123456 

-d mysql:5.7.37

进入主服务

docker exec -it mysql-master-3310 /bin/bash

mysql -uroot -p123456

#查看server_id是否生效

mysql> show variables like '%server_id%';

+----------------+-------+

| Variable_name  | Value |

+----------------+-------+

| server_id      | 1     |

| server_id_bits | 32    |

+----------------+-------+


#开权限

mysql> grant replication slave,replication client on *.* to 'slave01'@'%' identified by "123456";

mysql> flush privileges;


#看master信息 File 和 Position 从服务上要用

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000005 |      154 |              | mysql            |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

进入从服务

docker exec -it mysql-slave3320 /bin/bash

mysql -uroot -p123456


#查看server_id是否生效 

mysql> show variables like '%server_id%';


 +----------------+-------+

| Variable_name  | Value |

+----------------+-------+

| server_id      | 2     |

| server_id_bits | 32    |

+----------------+-------+


#在执行下面这个命令之前,进入主数据库   重新查看最新master信息 File 和 Position 从服务上要用

#修改master_host,master_port

# 连接主mysql服务 master_log_file 和 master_log_pos的值要填写主master里查出来的值 

change master to master_host='192.168.17.143',master_user='slave01',master_password='123456',master_port=3310,master_log_file='mall-mysql-bin.000004', master_log_pos=612,master_connect_retry=30; 

#启动slave 

mysql> start slave; 

#查看状态

mysql> show slave status G


#删除记录

mysql> reset slave;

#停止

mysql> stop slave;

mysql> change master to master_host='192.168.17.128',master_user='slave',master_password='123456',master_port=3360,master_log_file='mysql-bin.000004', master_log_pos=610,master_connect_retry=30; 

#启动slave 

mysql> start slave; 

8.0

单机

配置文件

mkdir -p $data/mysqlOf8 && cd $data/mysqlOf8


cat >$data/mysqlOf8/mysqld.cnf <<-'EOF' 

[client]

default_character_set=utf8mb4

[mysqld]

collation_server = utf8mb4_general_ci

character_set_server = utf8mb4

skip-log-bin

key_buffer_size=512M

sort_buffer_size=32M

innodb_buffer_pool_size=2G

lower_case_table_names = 1  # 忽略mysql查询大小写

bulk_insert_buffer_size = 256M

tmp_table_size = 256M

read_buffer_size = 8M

read_rnd_buffer_size = 32M

#设置时区

default-time-zone = 'Asia/Shanghai'

#日志大小

innodb_log_file_size=256M

#日志缓存大小

innodb_log_buffer_size=12M


innodb_flush_log_at_trx_commit=2


pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql



default_authentication_plugin=mysql_native_password

#保存7天

binlog_expire_logs_seconds=604800

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

EOF

启动脚本

cat >$data/mysqlOf8/install.sh <<-'EOF' 

#!/bin/bash

read -p "端口: " port

dir_work=$(cd `dirname $0`; pwd)

mkdir $dir_work/{data,conf,logs} -p

cp mysqld.cnf $dir_work/conf

docker run -d -p $port:3306 --privileged=true --restart always -v $dir_work/logs:/var/log/mysql -v $dir_work/conf:/etc/mysql/conf.d -v $dir_work/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql$port mysql:8.0.28

EOF

启动:

sh install.sh

链接

192.168.1.10 #ip

3380 #端口

root #用户名

123456 #密码



报错1

连接数据库出现Host 'xxx' is blocked because of many connection error; unblock with 'mysqladmin flush-hosts'的解决方法(xshell-Linux-mysql)

问题截图:



mysql --default-character-set=utf8  -u root -p123456 -h localhost -P 3306 -A #登录

show variables like '%max_connect_errors%';

set global max_connect_errors=3000; #为了安全最好小一点。

报错2

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "docker-entrypoint.sh": executable file not found in $PATH: unknown.

下载


https://github.com/opencontainers/runc/tags





mv runc.amd64 runc

cp runc /usr/local/bin/

cp runc /usr/local/sbin/

cp runc /usr/bin/

集群



postgresql

单机

创建文件并授权

mkdir -p $data/pg/data && chmod -R 777 $data/pg/data

创建容器

docker run --name postgres1 -e  POSTGRES_USER="postgres" -e POSTGRES_DB="postgres" -e POSTGRES_PASSWORD=123456 -p 5433:5432 --privileged=true --restart always -v $data/pg/data:/var/lib/postgresql/data -v $data/pg/logs:/var/log/postgresql  -d postgres:12

查询

docker exec -it postgres1 bash #进入

psql -U postgres #登录数据库

链接

192.168.1.10 #ip

5433 #端口

postgres #用户名

123456 #密码

集群

部署ip分布图

ip 容器名 备注 用户名 密码

172.16.110.87 postgres-master postgresql11.9主服务 root Test@123

172.16.110.88 postgres-slave postgresql11.9从服务 root Test@123


第一台pg

加载镜像

docker load -i postgres11.9-docker.tar

新建包并授权

mkdir -p $data/pg/data && chmod -R 777 $data/pg

启动容器

docker run --name postgres-master -e  POSTGRES_USER="postgres" -e POSTGRES_DB="postgres" -e POSTGRES_PASSWORD=postgres -p 5432:5432 --privileged=true --restart always -v $data/pg/data:/var/lib/postgresql/data  -d postgres:11.9

配置文件

追加配置

cat >> $data/pg/data/postgresql.conf <<-'EOF'

temp_buffers = 512MB 

work_mem = 32MB 

maintenance_work_mem = 512MB 

max_stack_depth = 4096kB

archive_mode = on  # 允许归档

archive_command = '/bin/date' # 用该命令来归档logfile segment,这里取消归档。

wal_level = replica #开启热备

max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个

wal_keep_segments = 64 # 设置流复制保留的最多的xlog数目,一份是 16M,注意机器磁盘 16M*64 = 1G

wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间

max_connections = 200 # 这个设置要注意下,从库的max_connections必须要大于主库的

EOF

修改配置

sed -i 's/shared_buffers = 128MB/shared_buffers = 8192MB/'  $data/pg/data/postgresql.conf

pg_hba.conf配置文件

vi $data/pg/data/pg_hba.conf

# replication privilege  在这个下面加入

host  replication  replica  0.0.0.0/0  md5

确认

cat $data/pg/data/pg_hba.conf

最后几行如下图




进入容器

docker exec -it postgres-master bash

新增同步用户

#登录数据库

psql -U postgres


#创建用户

CREATE ROLE replica login replication encrypted password 'replica';


#查看所有用户

du


#退出数据库

exit

#退出容器

exit

重启容器

docker restart postgres-master

删除容器和目录

重置使用,一般不要操作


docker rm -f postgres-master  && rm -rf $data/pg

第二台pg

加载镜像

docker load -i postgres11.9-docker.tar

启动容器

docker run --name postgres-slave -e  POSTGRES_USER="postgres" -e POSTGRES_DB="postgres" -e POSTGRES_PASSWORD=postgres -p 5432:5432 --privileged=true --restart always -v $data/pg/data:/var/lib/postgresql/data  -d postgres:11.9

进入容器

docker exec -it postgres-slave bash

配置从pg

#登录服务器

su postgres


#删除配置

rm -rf /var/lib/postgresql/data/*


#确认是否删除成功

cd /var/lib/postgresql/data


#查看所有文件

ls


#ip为主pg的ip

pg_basebackup -h 172.16.110.87 -U replica -D /var/lib/postgresql/data -X stream -P

等待10几秒,自动跳出容器


172.16.110.87为postgres-master节点ip地址


cat >$data/pg/data/recovery.conf <<-'EOF' 

standby_mode = on

primary_conninfo = 'host=172.16.110.87 port=5432 user=replica password=replica'

recovery_target_timeline = 'latest'

EOF

修改


sed -i 's/max_connections = 200/max_connections = 1000/'  $data/pg/data/postgresql.conf

追加配置


cat >> $data/pg/data/postgresql.conf <<-'EOF'

hot_standby = on

wal_receiver_status_interval = 10s 

max_standby_streaming_delay = 30s

hot_standby_feedback = on

EOF

重启容器

docker restart postgres-slave

查看日志

docker logs --tail  300 -f postgres-slave

删除容器和目录

docker rm -f postgres-slave

rm -rf $data/pg

验证

docker exec -it postgres-master bash


psql -U postgres

#进入主库

SELECT usename , application_name , client_addr, sync_state FROM pg_stat_replication;



主库上,我们创建test_ms表,并插入了一条数据,我们就可以在备库上进行查询观察是否同步成功:


CREATE DATABASE "test";

create table test_ms(id int4);

insert into test_ms values(6);

接下来,我们再主库上,再操作


insert into test_ms values(9);

delete from test_ms where id=6;

那么我们如果在备份库上进行数据操作,情况会怎样呢?我们再备份上执行:


postgres=# insert into test_ms values(6);


ERROR: cannot execute INSERT in a read-only transaction


STATEMENT: insert into test_ms values(6);

ERROR: cannot execute INSERT in a read-only transaction

结论:备份库只允许读,不允许写和删除


主备切换测试

在主服务上操作


docker stop postgres-master;

1.在备库上执行pg_ctl promote命令**备库,如果recovery.conf变成recovery.done表示备库已切换成主库


docker exec -it postgres-slave bash

su postgres

/usr/lib/postgresql/11/bin/pg_ctl promote -D $PGDATA 

waiting for server to promote.... done

server promoted

在新库中(postgres-slave)查询


select pg_is_in_recovery();



也可以利用,备份库只允许读,不允许写和删除这个结论,这个在切好的主库(postgres-slave),插入数据和删除数据验证.




Sql Server

docker pull  mcr.microsoft.com/mssql/server:2019-latest


mkdir -p $data/sqlserver && chmod -R  777 $data/sqlserver


docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=fei891025%" -p 1433:1433 --name sqlserver2019 --privileged=true --restart always -v $data/sqlserver:/var/opt/mssql  -d mcr.microsoft.com/mssql/server:2019-latest


docker exec -it sqlserver2019 /bin/bash #进入容器


/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P fei891025% #进入数据库

select name from sys.Databases

go



docker rm -f sqlserver2019

rm -rf $data/sqlserver

下载驱动

https://learn.microsoft.com/zh-cn/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver15

并安装




cmd 执行

odbcad32



确认驱动



添加DSN





输入用户名和密码

sa #用户

fei891025% #密码







链接

192.168.1.10,1433 #主机

master #初始化数据库

sa #用户

fei891025% #密码



常用sql

-- 查询版本

SELECT @@VERSION;



mariadb

docker pull mariadb


mkdir -p $data/mariadb/data 



docker run --name mariadb -d -p 3390:3306 --privileged=true  --restart always -e MYSQL_ROOT_PASSWORD=123456 -v $data/mariadb/data:/var/lib/mysql  mariadb

tomcat

docker pull billygoo/tomcat8-jdk8

docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8

docker exec -it mytomcat8 bash 

ngnix

mkdir $data/nginx/conf -p

docker run --privileged=true --restart always --name nginx_test -d -p 100:80 nginx:1.23



docker cp nginx_test:/etc/nginx $data/nginx/conf/

docker cp nginx_test:/usr/share/nginx/html/ $data/nginx/

docker rm -f nginx_test


#预留81到90端口,共10个端口,/usr/local/share/front为前端的部署目录

docker run --privileged=true --restart always --name nginx_one -d -p 81-90:81-90

-v $data/nginx/conf/nginx:/etc/nginx/

-v $data/nginx/html:/usr/share/nginx/html 

-v /usr/local/share/front:/usr/local/share/front

nginx:1.23 


docker restart nginx_one #重新加载nginx配置文件


docker logs --tail  300 -f nginx_one #查看日志

docker exec -it nginx_one /bin/bash #进入容器


docker rm -f nginx_one #删除容器

修改配置

cd $data/nginx/conf/nginx/conf.d

vi default.conf

listen       81; # listen       80改为81

:wq #保存

docker restart nginx_one

请求地址

http://192.168.1.10:81/

前端

测试页面

cat >/usr/local/share/front/index.html <<-'EOF' 

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>你好</title>

</head>

<body>

<h1>测试</h1>

</body>

</html>

EOF

配置文件

cat >$data/nginx/conf/nginx/conf.d/test.conf <<-'EOF' 

server {

    listen       83; 

    server_name  152.136.54.94;


    location / {

 #文件根目录,

        root   /usr/local/share/html;

        #默认页名称

        index  index.html index.htm;

    }


    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root  html;

    }

}

EOF

反向代理

cat >$data/nginx/conf/nginx/conf.d/rearEnd.conf <<-'EOF' 

    upstream tempone{

      #不能带http前缀和路径

      server 152.136.54.94:8080;

    }

    #一个server等于一个虚拟主机vhost

    server {

    #监听端口号

        listen       83;

        #主机名或者域名

        server_name  152.136.54.94;

        #匹配路径

        location / {

            proxy_pass http://tempone;

            add_header 'Access-Control-Allow-Origin' '*'; 

            add_header 'Access-Control-Allow-Credentials' 'true'; 

        }

        #报错编码对应页面

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

EOF





重启

docker restart nginx_one



代理nacos

cat >$data/nginx/conf/nginx/conf.d/nacos.conf <<-'EOF' 

server {

    listen       81; 

    server_name  localhost;


    location / {

        proxy_pass http://121.5.133.79:8848/nacos/;

    }


    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root   /usr/share/nginx/html;

    }

}

EOF

重启


docker restart nginx_one



代理mysql和pg,redis

#内网ip:10.0.4.7


cat >> $data/nginx/conf/nginx/nginx.conf <<-'EOF'

stream {

 #代理mysql

 upstream mysql_server {

        server 10.0.4.7:3306;

    }


    server {

        listen 82;

        proxy_pass mysql_server;

    }

    #代理pg

    upstream pgsql {

        server 10.0.4.7:5433;

    }


    server {

        listen 83;

        proxy_connect_timeout 30s;

        proxy_timeout 30s;

        proxy_pass pgsql;

    }

    #代理redis

    upstream redis {

      server 10.0.4.7:6379;

   }

   server {

      listen 84;

      proxy_pass redis;

   }

}

EOF

重新加载配置

docker restart nginx_one #重启容器,重新加载配置文件

查看日志

docker logs --tail  300 -f nginx_one #查看日志



redis

单机

下载配置文件


https://redis.io/docs/management/config/

创建容器

docker run -p 6389:6379 --privileged=true --restart always  --name redisStandAlone  -v $data/redisStandAlone/data:/data -d redis:6.2.6  --appendonly yes --requirepass "12345678" 

验证


docker exec -it redisStandAlone /bin/bash #进入容器

redis-cli   -p 6379 -a 12345678 #连接集群 -c优化路由

删除容器

docker rm -f redisStandAlone

查看日志

docker logs --tail  300 -f redisStandAlone

redis主从集群

mkdir -p $data/redis #创建文件夹

chmod -R  777 $data/redis #授权文件

cd $data/redis #进入文件夹

vi redis-cluster.tmpl #编辑

需要配置文件

redis-cluster.tmpl内容

修改cluster-announce-ip为本地ip


port ${PORT}

masterauth abc20211221!

requirepass abc20211221!

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

cluster-announce-ip 192.168.1.10

cluster-announce-port ${PORT}

cluster-announce-bus-port 1${PORT}

appendonly yes

maxmemory 1024MB  

maxmemory-policy volatile-ttl 

 配置文件说明


appendonly no  #开启aof缓存,但是要频繁I/O,建议关掉

maxmemory 1024MB  #最大内存限制,否则可能内存撑爆

maxmemory-policy volatile-ttl #淘汰策略,如果内存撑爆了不会拒绝插入数据

生成配置文件和目录

for port in `seq 7001 7006`; do

  mkdir -p ./${port}/conf

  && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf

  && mkdir -p ./${port}/data;

done

创建6个容器

for port in `seq 7001 7006`; do

     docker run -d --net=host --privileged=true --restart always -v $data/redis/${port}/conf/redis.conf:/etc/redis/redis.conf -v $data/redis/${port}/data:/data --restart always --name=redis-${port}  redis:6.2.6 redis-server /etc/redis/redis.conf;

done

创建集群

docker exec -it redis-7001 /bin/bash #进入容器

redis-cli -a abc20211221! --cluster create 192.168.1.10:7001 192.168.1.10:7002 192.168.1.10:7003 192.168.1.10:7004 192.168.1.10:7005 192.168.1.10:7006 --cluster-replicas 1 #创建集群

# --cluster-replicas 1 表示为每个master创建一个slave节点

验证集群

docker exec -it redis-7001 /bin/bash #进入容器

redis-cli  -c -p 7001 -a abc20211221! #连接集群 -c优化路由

cluster info  #查看集群信息

cluster nodes #查看节点

auth abc20211221! #验证密码正确性(abc20211221!密码) 

不需要配置文件

创建持久化文件目录

for port in `seq 6381 6386`; do

mkdir -p $data/redis${port}/data;

done

启动容器

for port in `seq 6381 6386`; do

docker run -d --name redis-node-${port} --net host --privileged=true --restart always -v $data/redis${port}/data:/data redis:6.2.6 --cluster-enabled yes --appendonly yes --port ${port} --requirepass 'abc20211221!' --masterauth 'abc20211221!' ;

done

创建集群

docker exec -it redis-node-6381 /bin/bash #进入容器

redis-cli -a abc20211221! --cluster create 192.168.1.10:6381 192.168.1.10:6382 192.168.1.10:6383 192.168.1.10:6384 192.168.1.10:6385 192.168.1.10:6386 --cluster-replicas 1  #创建集群

验证集群

docker exec -it redis-node-6381 /bin/bash #进入容器

redis-cli  -c -p 6381 -a abc20211221! #连接集群 -c优化路由

cluster info  #查看集群信息

cluster nodes #查看节点

auth abc20211221! #查看密码是否正确

redis-cli --cluster check 192.168.17.143:6381 -a abc20211221!  #查看集群信息

主从扩容

创建持久化文件目录

for port in `seq 6387 6388`; do

mkdir -p $data/redis${port}/data;

done

启动容器

for port in `seq 6387 6388`; do

docker run -d --name redis-node-${port} --net host --privileged=true --restart always -v $data/redis${port}/data:/data redis:6.2.6 --cluster-enabled yes --appendonly yes --port ${port} --requirepass 'abc20211221!' --masterauth 'abc20211221!' ;

done

进入容器


docker exec -it redis-node-6387 /bin/bash

将新增的6387作为master节点加入集群

redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:63816387 就是将要作为master新增节点6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群


#加入集群

redis-cli --cluster add-node 192.168.17.143:6387 192.168.17.143:6381 -a abc20211221! 



查看节点信息

docker exec -it redis-node-6381 /bin/bash 

redis-cli --cluster check 192.168.17.143:6381 -a abc20211221!



重新分派槽号

命令:redis-cli --cluster reshard IP地址:端口号


redis-cli --cluster reshard 192.168.17.143:6381 -a abc20211221!

参考下图






重新查看节点信息


docker exec -it redis-node-6381 /bin/bash 

redis-cli --cluster check 192.168.17.143:6381 -a abc20211221!



为什么6387是3个新的区间,以前的还是连续?

重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

新增从节点到6387下

命令格式:


redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

如下:


redis-cli --cluster add-node 192.168.17.143:6388 192.168.17.143:6387 --cluster-slave --cluster-master-id 128f99dd3c1e09b734c768062e1de58054da9f2f -a abc20211221!

#192.168.17.143:6387的编号

128f99dd3c1e09b734c768062e1de58054da9f2f 

查看集群信息

docker exec -it redis-node-6381 /bin/bash 

redis-cli --cluster check 192.168.17.143:6381 -a abc20211221!

redis-cli  -c -p 6381 -a abc20211221! #连接集群 -c优化路由

cluster info  #查看集群信息

cluster nodes #查看节点

auth abc20211221! #查看密码是否正确

主从缩容

查看集群信息得到6378的id

redis-cli --cluster check 192.168.17.143:6381 -a abc20211221! #查看集群信息



将6378删除掉

命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID


redis-cli --cluster del-node 192.168.17.143:6388

258b5b906b189ff569bf019fd8bcaf742274a74f -a abc20211221!



重新分配槽位

redis-cli --cluster reshard 192.168.17.143:6381  -a abc20211221!



move的4096 ,16384/master台数,


下图为6387的槽位移动到6381下



确认集群

redis-cli --cluster check 192.168.17.143:6381 -a abc20211221!



删除6387

redis-cli --cluster del-node 192.168.17.143:6387

128f99dd3c1e09b734c768062e1de58054da9f2f -a abc20211221!

确认集群

redis-cli --cluster check 192.168.17.143:6381 -a abc20211221!

删除容器

for port in `seq 6387 6388`; do

docker rm -f redis-node-${port}

rm -rf $data/redis${port}

done

gitlab

官方文档:https://docs.gitlab.com/ee/


官网地址


https://docs.gitlab.cn/jh/install/docker.html

创建容器

docker run -d  -p 443:443 -p 9100:9100 -p 222:22 --name gitlab --privileged=true --restart always -v $data/gitlab/config:/etc/gitlab -v $data/gitlab/logs:/var/log/gitlab -v $data/gitlab/data:/var/opt/gitlab  --shm-size 256m registry.gitlab.cn/omnibus/gitlab-jh:latest

修改配置文件

cat >> $data/gitlab/config/gitlab.rb<<-'EOF'

# 配置http协议所使用的访问地址,不加端口号默认为80 

#修改ip

external_url 'http://192.168.1.10:9100' 

nginx['listen_port'] = 9100

# 配置ssh协议所使用的访问地址和端口

#配置ip

gitlab_rails['gitlab_ssh_host'] = '192.168.1.10' 

#此端口是run时22端口映射的222端口

gitlab_rails['gitlab_shell_ssh_port'] = 222  

# 关闭业务监控

prometheus_monitoring['enable'] = false

puma['enable'] = true

puma['worker_timeout'] = 60

# 进程数(最低2,默认cpu核数+1)

puma['worker_processes'] = 2

puma['min_threads'] = 4

puma['per_worker_max_memory_mb'] = 300

# sidekiq并发数

sidekiq['max_concurrency'] = 16

#数据库缓存大小

postgresql['shared_buffers'] = "256MB"

# 数据库并发数

postgresql['max_worker_processes'] = 8

# 邮箱是否启用

gitlab_rails['smtp_enable'] = true

# SMTP服务的地址

gitlab_rails['smtp_address'] = "smtp.qq.com"

# 端口

gitlab_rails['smtp_port'] = 465

# 你的QQ邮箱(发送账号)

gitlab_rails['smtp_user_name'] = "1115758907@qq.com"

# 授权码

gitlab_rails['smtp_password'] = "viuztdmmikbpgdhc"

# 域名

gitlab_rails['smtp_domain'] = "smtp.qq.com"

# 登录验证

gitlab_rails['smtp_authentication'] = "login"

# 使用了465端口,就需要配置下面三项

gitlab_rails['smtp_enable_starttls_auto'] = true

gitlab_rails['smtp_tls'] = true

gitlab_rails['smtp_openssl_verify_mode'] = 'none'

# 你的QQ邮箱(发送账号)

gitlab_rails['gitlab_email_from'] = '1115758907@qq.com'

EOF

重启gitlab容器


docker restart gitlab #等5分钟左右

删除容器

docker rm -f gitlab

查看日志

docker logs --tail  300 -f  gitlab

修改密码

docker exec -it gitlab bash #进入容器

#查看密码进入页面去修改密码

cat /etc/gitlab/initial_root_password #查看密码

# WARNING: This value is valid only in the following conditions

#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).

#          2. Password hasn't been changed manually, either via UI or via command line.

#

#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

#密码

Password: PIkQp601lbr4YjFa+VXBguzNsoybvTZkKHpMSEq/scA=


# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.




#另一种方式修改密码

gitlab-rails console -e production #启动Ruby on Rails控制台

user = User.where(id: 1).first

user.password = 'abc123456' #更改密码

user.password_confirmation = 'abc123456' #更改密码

user.save! #保存更改

登录

192.168.1.10:9100 #使用端口80

Nacos(1.4.3)

单机:

启动容器

docker pull nacos/nacos-server:v1.4.3


docker run -d -p 8848:8848 

-e MODE=standalone

-e SPRING_DATASOURCE_PLATFORM=mysql

-e MYSQL_SERVICE_HOST=$ipTemp

-e MYSQL_SERVICE_PORT=3306

-e MYSQL_SERVICE_DB_NAME=nacos

-e MYSQL_SERVICE_USER=root

-e MYSQL_SERVICE_PASSWORD=123456

-e MYSQL_DATABASE_NUM=1

-e JVM_XMS=512m

-e JVM_XMX=512m

-v $data/nacos/logs:/home/nacos/logs

--restart always --name nacos nacos/nacos-server:v1.4.3





docker run -d -p 8848:8848 

-e MODE=standalone

-e SPRING_DATASOURCE_PLATFORM=mysql

-e MYSQL_SERVICE_HOST=192.168.1.10

-e MYSQL_SERVICE_PORT=3306

-e MYSQL_SERVICE_DB_NAME=nacos

-e MYSQL_SERVICE_USER=root

-e MYSQL_SERVICE_PASSWORD=123456

-e MYSQL_DATABASE_NUM=1

-e JVM_XMS=512m

-e JVM_XMX=512m

-v $data/nacos/logs:/home/nacos/logs

--restart always --name nacos nacos/nacos-server:v1.4.3

删除容器

docker rm -f nacos

rm -rf $data/nacos #删除安装目录

docker logs --tail  300 -f nacos #查看日志



登录地址

http://192.168.1.10:8848/nacos/#/login

nacos #账号和密码

集群:

容器1

docker run -d --restart always 

-e MODE=cluster

-e NACOS_APPLICATION_PORT=8845

-e NACOS_SERVERS=$ipTemp:8845,$ipTemp:8846,$ipTemp:8847

-e SPRING_DATASOURCE_PLATFORM=mysql

-e MYSQL_SERVICE_HOST=$ipTemp

-e MYSQL_SERVICE_PORT=3306

-e MYSQL_SERVICE_USER=root

-e MYSQL_SERVICE_PASSWORD=123456

-e MYSQL_SERVICE_DB_NAME=nacos

-e NACOS_SERVER_IP=$ipTemp

-v $data/nacos-server/nacoslogs8845:/home/nacos/logs

-p 8845:8845

--name nacos8845

nacos/nacos-server:v1.4.3

容器2:

docker run -d --restart always 

-e MODE=cluster

-e NACOS_APPLICATION_PORT=8846

-e NACOS_SERVERS=$ipTemp:8845,$ipTemp:8846,$ipTemp:8847

-e SPRING_DATASOURCE_PLATFORM=mysql

-e MYSQL_SERVICE_HOST=$ipTemp

-e MYSQL_SERVICE_PORT=3306

-e MYSQL_SERVICE_USER=root

-e MYSQL_SERVICE_PASSWORD=123456

-e MYSQL_SERVICE_DB_NAME=nacos

-e NACOS_SERVER_IP=$ipTemp

-v $data/nacos-server/nacoslogs8846:/home/nacos/logs

-p 8846:8846

--name nacos8846

nacos/nacos-server:v1.4.3

容器3

docker run -d --restart always 

-e MODE=cluster

-e NACOS_APPLICATION_PORT=8847

-e NACOS_SERVERS=$ipTemp:8845,$ipTemp:8846,$ipTemp:8847

-e SPRING_DATASOURCE_PLATFORM=mysql

-e MYSQL_SERVICE_HOST=$ipTemp

-e MYSQL_SERVICE_PORT=3306

-e MYSQL_SERVICE_USER=root

-e MYSQL_SERVICE_PASSWORD=123456

-e MYSQL_SERVICE_DB_NAME=nacos

-e NACOS_SERVER_IP=$ipTemp

-v $data/nacos-server/nacoslogs8847:/home/nacos/logs

-p 8847:8847

--name nacos8847

nacos/nacos-server:v1.4.3

删除所有容器

for port in $(seq 8845 8847); do  docker rm -f nacos$port; done

重启服务器

reboot #重启

部署nginx做nacos的负载均衡

配置文件如下,其他参考nginx部署


cat >$data/nginx/conf/nginx/conf.d/nacos.conf <<-'EOF' 

#不能带http前缀和路径

 upstream tempone{

   server 192.168.1.10:8845;

   server 192.168.1.10:8846;

   server 192.168.1.10:8847;

 }

 server {

   #监听端口号

   listen       81;

   #主机名或者域名

   server_name  localhost;

   #匹配路径

   location / {

     proxy_pass http://tempone;

   }

   #报错编码对应页面

   error_page   500 502 503 504  /50x.html;

   location = /50x.html {

     root   html;

   }

 }

EOF

重启ng

docker restart nginx_one

docker logs --tail  300 -f nginx_one



sentinel(1.8.1)

docker pull bladex/sentinel-dashboard:1.7.2

docker run --name sentinel1 --restart always -d  -p 8860:8858  bladex/sentinel-dashboard:1.7.2

docker rm -f sentinel

访问


http://192.168.1.10:8860/

服务名: sentinel

密码:  sentinel

seata(1.42)

配置文件

mkdir -p $data/seata-server/seata-config

cat >$data/seata-server/seata-config/registry.conf <<-'EOF' 

registry {

  type = "nacos"

  nacos {

    application = "seata-server"

    serverAddr = "192.168.1.10:81"

    group = "DEFAULT_GROUP"

    namespace = "6ae9a1aa-bbd0-4193-a723-7d112e55f59a"

    cluster = "SH"

    username = "nacos"

    password = "nacos"

  }


}

config {

  type = "nacos"


  nacos {

    serverAddr = "192.168.1.10:81"

    namespace = "a1ecbd7c-c022-4bf8-920a-7191b9c24d05"

    group = "SEATA_GROUP"

    username = "nacos"

    password = "nacos"

    dataId = "seataServer.properties"

  }


}

EOF

nacos配置需要的文件



 Data ID:seataServer.properties


Group:SEATA_GROUP


配置格式:Properties


内容如下:


# 数据存储方式,db代表数据库

store.mode=db

store.db.datasource=druid

store.db.dbType=mysql

store.db.driverClassName=com.mysql.jdbc.Driver

#自己数据库的连接

store.db.url=jdbc:mysql://192.168.1.10:3306/seata1_4_2?useUnicode=true&rewriteBatchedStatements=true  

#自己数据库的用户

store.db.user=root

#自己数据库的密码

store.db.password=123456

store.db.minConn=5

store.db.maxConn=30

store.db.globalTable=global_table

store.db.branchTable=branch_table

store.db.queryLimit=100

store.db.lockTable=lock_table

store.db.maxWait=5000

# 事务、日志等配置

server.recovery.committingRetryPeriod=1000

server.recovery.asynCommittingRetryPeriod=1000

server.recovery.rollbackingRetryPeriod=1000

server.recovery.timeoutRetryPeriod=1000

server.maxCommitRetryTimeout=-1

server.maxRollbackRetryTimeout=-1

server.rollbackRetryTimeoutUnlockEnable=false

server.undo.logSaveDays=7

server.undo.logDeletePeriod=86400000


# 客户端与服务端传输方式

transport.serialization=seata

transport.compressor=none

# 关闭metrics功能,提高性能

metrics.enabled=false

metrics.registryType=compact

metrics.exporterList=prometheus

metrics.exporterPrometheusPort=9898

服务端初始化sql

连接到上面数据库192.168.1.10:3306/seata1_4_2 初始化下面的表


CREATE TABLE IF NOT EXISTS `global_table`

(

    `xid`                       VARCHAR(128) NOT NULL,

    `transaction_id`            BIGINT,

    `status`                    TINYINT      NOT NULL,

    `application_id`            VARCHAR(32),

    `transaction_service_group` VARCHAR(32),

    `transaction_name`          VARCHAR(128),

    `timeout`                   INT,

    `begin_time`                BIGINT,

    `application_data`          VARCHAR(2000),

    `gmt_create`                DATETIME,

    `gmt_modified`              DATETIME,

    PRIMARY KEY (`xid`),

    KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),

    KEY `idx_transaction_id` (`transaction_id`)

) ENGINE = InnoDB

  DEFAULT CHARSET = utf8;


-- the table to store BranchSession data

CREATE TABLE IF NOT EXISTS `branch_table`

(

    `branch_id`         BIGINT       NOT NULL,

    `xid`               VARCHAR(128) NOT NULL,

    `transaction_id`    BIGINT,

    `resource_group_id` VARCHAR(32),

    `resource_id`       VARCHAR(256),

    `branch_type`       VARCHAR(8),

    `status`            TINYINT,

    `client_id`         VARCHAR(64),

    `application_data`  VARCHAR(2000),

    `gmt_create`        DATETIME(6),

    `gmt_modified`      DATETIME(6),

    PRIMARY KEY (`branch_id`),

    KEY `idx_xid` (`xid`)

) ENGINE = InnoDB

  DEFAULT CHARSET = utf8;


-- the table to store lock data

CREATE TABLE IF NOT EXISTS `lock_table`

(

    `row_key`        VARCHAR(128) NOT NULL,

    `xid`            VARCHAR(128),

    `transaction_id` BIGINT,

    `branch_id`      BIGINT       NOT NULL,

    `resource_id`    VARCHAR(256),

    `table_name`     VARCHAR(32),

    `pk`             VARCHAR(36),

    `gmt_create`     DATETIME,

    `gmt_modified`   DATETIME,

    PRIMARY KEY (`row_key`),

    KEY `idx_branch_id` (`branch_id`)

) ENGINE = InnoDB

  DEFAULT CHARSET = utf8;

每个业务里面需要sql

CREATE TABLE IF NOT EXISTS `undo_log`

(

    `branch_id`     BIGINT       NOT NULL COMMENT 'branch transaction id',

    `xid`           VARCHAR(128) NOT NULL COMMENT 'global transaction id',

    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',

    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',

    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',

    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',

    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',

    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)

) ENGINE = InnoDB

  AUTO_INCREMENT = 1

  DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';



下载镜像

docker pull seataio/seata-server:1.4.2 #下载镜像

启动容器

docker run  -d --restart always --name seata-server  -p 8091:8091

        -e SEATA_CONFIG_NAME=file:/root/seata-config/registry

        -e SEATA_IP=192.168.1.10

        -v $data/seata-server/seata-config:/root/seata-config 

        seataio/seata-server:1.4.2

进入容器

docker exec -it seata-server sh #进入容器

docker logs --tail  300 -f seata-server #查看日志

删除容器

docker rm -f seata-server #删除容器



consul

单机

docker run --name=consul-server-1 --restart always --privileged=true -p 8501:8500 -v $data/consul/data:/consul/data -e CONSUL_BIND_INTERFACE=eth0 -d  consul:1.11.1 agent -server -client=0.0.0.0 -bootstrap -ui -node=1 

查询ip,下面join

docker inspect --format '{{ .NetworkSettings.IPAddress }}' consul-server-1

查询节点信息

curl http://[ip]:8500/v1/catalog/nodes

访问:

http://[ip]:8500 #浏览器访问

剔除无效服务

curl -X PUT http://[ip]:8500/v1/agent/service/deregister/[service_id]

剔除无效节点

curl -X PUT http://[ip]:8500/v1/agent/force-leave/[node_id]

集群:

#添加两个Server节点,名称为-node=2,-node=3 join 为上面查询成员信息的Address

docker run --restart always  --name=consul-server-2 -e CONSUL_BIND_INTERFACE=eth0 -d consul:1.11.1 agent -server -node=2 -join='172.17.0.7' 


docker run --restart always  --name=consul-server-3 -e CONSUL_BIND_INTERFACE=eth0 -d consul:1.11.1 agent -server -node=3 -join='172.17.0.7'

查询成员信息

docker exec consul-server-1 consul members

查看节点选举投票结果


docker exec consul-server-1 consul operator raft list-peers



删除镜像

docker rm -f consul-server-1

docker rm -f consul-server-2

docker rm -f consul-server-3

简单版可视化工具Portainer

docker run -d -p 8000:8000 -p 9000:9000 --name portainer     --restart=always --privileged=true    -v /var/run/docker.sock:/var/run/docker.sock    -v $data/portainer/portainer_data:/data     portainer/portainer

首次访问 ip:9000 创建admin用户


创建容器






CAdvisor+InfluxDB+Granfana

创建docker-compose.yml文件

cat > docker-compose.yml <<-'EOF' 

version: '3.1'


volumes:

  grafana_data: {}


services:

 influxdb:

  image: tutum/influxdb:0.9

  restart: always

  environment:

    - PRE_CREATE_DB=cadvisor

  ports:

    - "8083:8083"

    - "8086:8086"

  volumes:

    - ./data/influxdb:/data


 cadvisor:

  image: google/cadvisor

  links:

    - influxdb:influxsrv

  command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086

  restart: always

  ports:

    - "8080:8080"

  volumes:

    - /:/rootfs:ro

    - /var/run:/var/run:rw

    - /sys:/sys:ro

    - /var/lib/docker/:/var/lib/docker:ro


 grafana:

  user: "104"

  image: grafana/grafana

  user: "104"

  restart: always

  links:

    - influxdb:influxsrv

  ports:

    - "3000:3000"

  volumes:

    - grafana_data:/var/lib/grafana

  environment:

    - HTTP_USER=admin

    - HTTP_PASS=admin

    - INFLUXDB_HOST=influxsrv

    - INFLUXDB_PORT=8086

    - INFLUXDB_NAME=cadvisor

    - INFLUXDB_USER=root

    - INFLUXDB_PASS=root

EOF

校验语法错误

docker-compose config -q  

启动

docker-compose up -d

验证

浏览cAdvisor收集服务,http://ip:8080/     第一次访问慢,cadvisor也有基础的图形展现功能,这里主要用它来作数据采集


浏览influxdb存储服务,http://ip:8083/


浏览grafana展现服务,http://ip:3000      ip+3000端口的方式访问,默认帐户密码(admin/admin)


设置数据库






zookeeper

单机

#创建容器

docker run -d --name zookeeper -v $data/zookeeper/data:/data -p 2191:2181 --restart always -e JVMFLAGS="-Xmx1024m" zookeeper:3.8.0

验证

#使用命令行连接

docker run -it --rm --link zookeeper:zookeeper zookeeper:3.8.0 zkCli.sh -server zookeeper



ls / #根节点

ls /services #查看节点信息

ls /zookeeper #查看某个节点下的子节点(zookeeper)


#创建节点

create /aa test   # 创建持久化节点,test是数据

create -s /bb test   # 创建持久序列化节点

create -e /cc test   # 创建临时节点

create -e -s /dd test   # 创建临时序列化节点


#增删改查

create /aa test #新增节点数据

delete /aa #删除节点

set /aa test01 #修改节点数据

get /aa #获得节点数据


create /aa/test hello

create /aa/test/hello "ni hao a" #赋值内容


docker exec -it zookeeper bash #进入容器

docker rm -f zookeeper #删除节点

查看节点信息



集群

#创建网络

docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 zoonet

docker network ls #查询所有网络

docker network inspect zoonet #查看网络详情

创建集群


docker run -d -p 2181:2181 --name zookeeper_node1 --privileged --restart always --network zoonet --ip 172.18.0.2

-v $data/zookeeper_node1/data:/data

-v $data/zookeeper_node1/datalog:/datalog

-v $data/zookeeper_node1/logs:/logs

-e ZOO_MY_ID=1

-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" zookeeper:3.8.0


docker run -d -p 2182:2181 --name zookeeper_node2 --privileged --restart always --network zoonet --ip 172.18.0.3

-v $data/zookeeper_node2/data:/data

-v $data/zookeeper_node2/datalog:/datalog

-v $data/zookeeper_node2/logs:/logs

-e ZOO_MY_ID=2

-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" zookeeper:3.8.0


docker run -d -p 2183:2181 --name zookeeper_node3 --privileged --restart always --network zoonet --ip 172.18.0.4

-v $data/zookeeper_node3/data:/data

-v $data/zookeeper_node3/datalog:/datalog

-v $data/zookeeper_node3/logs:/logs

-e ZOO_MY_ID=3

-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" zookeeper:3.8.0

验证集群

#创建三个窗口

docker exec -it zookeeper_node1 bash

docker exec -it zookeeper_node2 bash

docker exec -it zookeeper_node3 bash


./bin/zkServer.sh status #查看状态


docker exec -it zookeeper_node1 zkCli.sh #进入zookeeper命令行

ls /services #列出所有服务







RabbitMQ

docker search rabbitmq

docker pull rabbitmq:3.9-management


docker run --privileged=true -d -p 5672:5672 -p 15672:15672 --name rabbitmq -v $data/rabbitmq/data:/var/lib/rabbitmq  --restart=always --hostname=rabbitmqhost -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3.9-management

#RABBITMQ_DEFAULT_VHOST:默认虚拟机名;

#RABBITMQ_DEFAULT_USER:默认的用户名;

#RABBITMQ_DEFAULT_PASS:默认用户名的密码


docker rm -f rabbitmq


docker exec -it rabbitmq /bin/bash

请求地址

http://192.168.1.10:15672

#账号:admin

#密码:admin 

ActionMQ

docker search activemq

docker pull webcenter/activemq

docker run -d --privileged=true --restart always --name activemq -p 61617:61616 -p 8162:8161  -v $data/activemq/data:/opt/activemq/data webcenter/activemq:latest

#-p 61617:61616 容器中映射

#-p 8162:8161 web中映射


docker rm -f activemq

请求地址:

http://192.168.1.10:8162

#账号:admin

#密码:admin 

RocketMQ

搜索镜像

docker search rocketmq

选择版本:

curl https://registry.hub.docker.com/v1/repositories/foxiswho/rocketmq/tags | tr -d '[[]" ]' | tr '}' ' ' | awk -F: -v image='foxiswho/rocketmq' '{if(NR!=NF && $3 != ""){printf("%s:%s ",image,$3)}}'

启动Server

mkdir $data/rocketmq_server/{logs,store} -p 

chmod -R 777 $data/rocketmq_server


docker run -d --privileged=true --restart always

 -v $data/rocketmq_server/logs:/home/rocketmq/logs

   -v $data/rocketmq_server/store:/data/rocketmq/store

      --name rmqnamesrv

      -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m"

      -p 9876:9876

      foxiswho/rocketmq:4.8.0

      sh mqnamesrv

创建文件夹

mkdir $data/rocketmq_broker/{logs,store,conf} -p 

chmod -R 777 $data/rocketmq_broker

配置文件

cat >$data/rocketmq_broker/conf/broker.conf <<-'EOF'

brokerClusterName = DefaultCluster

brokerName = broker-a

brokerId = 0

deleteWhen = 04

fileReservedTime = 48

brokerRole = ASYNC_MASTER

flushDiskType = ASYNC_FLUSH

# 写自己的ip

brokerIP1 = 192.168.1.10

autoCreateTopicEnable = true

EOF



全部配置文件

https://github.com/foxiswho/docker-rocketmq.git

./docker-rocketmq/rmq/rmq/brokerconf/      #这个目录下

如下

#所属集群名字

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

namesrvAddr=rmqnamesrv: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=192.168.1.10


#在发送消息时,自动创建服务器不存在的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

启动Broker

docker run -d --privileged=true --restart always --name rmqbroker

-v $data/rocketmq_broker/logs:/home/rocketmq/logs

-v $data/rocketmq_broker/store:/home/rocketmq/store

-v $data/rocketmq_broker/conf:/home/rocketmq/conf

-e "NAMESRV_ADDR=192.168.1.10:9876"

-e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m"

-p 10911:10911 -p 10912:10912 -p 10909:10909

foxiswho/rocketmq:4.8.0

sh mqbroker -c /home/rocketmq/conf/broker.conf

console

docker run -d --privileged=true --restart always --name rmqcomsole

-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.1.10:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"

-p 8180:8080 -t styletang/rocketmq-console-ng

访问

192.168.1.10:8180



删除容器

docker rm -f rmqnamesrv

docker rm -f rmqbroker

docker rm -f rmqcomsole



kafka

docker search kafka

#需要先安装zookeeper

docker pull wurstmeister/kafka


docker run -d --name kafka

-p 9092:9092

-e KAFKA_BROKER_ID=0

-e KAFKA_ZOOKEEPER_CONNECT=192.168.17.143:2181

-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.17.143:9092

-e KAFKA_LISTENERS=PLAINTEXT://192.168.17.143:9092 wurstmeister/kafka

管理页面

mkdir -p $data/kafka-eagle/conf

cd $data/kafka-eagle/conf

配置文件


cat >system-config.properties <<-'EOF' 

######################################

# multi zookeeper & kafka cluster list

######################################

# kafka.eagle.zk.cluster.alias=cluster1,cluster2

# cluster1.zk.list=tdn1:2181,tdn2:2181,tdn3:2181

# cluster2.zk.list=xdn10:2181,xdn11:2181,xdn12:2181


kafka.eagle.zk.cluster.alias=cluster1

cluster1.zk.list=192.168.17.143:2181


######################################

# zookeeper enable acl

######################################

cluster1.zk.acl.enable=false

cluster1.zk.acl.schema=digest

cluster1.zk.acl.username=test

cluster1.zk.acl.password=test123


######################################

# broker size online list

######################################

cluster1.kafka.eagle.broker.size=20


######################################

# zk client thread limit

######################################

kafka.zk.limit.size=25


######################################

# kafka eagle webui port

######################################

kafka.eagle.webui.port=8048


######################################

# kafka jmx acl and ssl authenticate

######################################

cluster1.kafka.eagle.jmx.acl=false

cluster1.kafka.eagle.jmx.user=keadmin

cluster1.kafka.eagle.jmx.password=keadmin123

cluster1.kafka.eagle.jmx.ssl=false

cluster1.kafka.eagle.jmx.truststore.location=/Users/dengjie/workspace/ssl/certificates/kafka.truststore

cluster1.kafka.eagle.jmx.truststore.password=ke123456


######################################

# kafka offset storage

######################################

cluster1.kafka.eagle.offset.storage=kafka

cluster2.kafka.eagle.offset.storage=zk


######################################

# kafka metrics, 15 days by default

######################################

kafka.eagle.metrics.charts=true

kafka.eagle.metrics.retain=15


######################################

# kafka sql topic records max

######################################

kafka.eagle.sql.topic.records.max=5000


######################################

# delete kafka topic token

######################################

kafka.eagle.topic.token=keadmin


######################################

# kafka sasl authenticate

######################################

cluster1.kafka.eagle.sasl.enable=false

cluster1.kafka.eagle.sasl.protocol=SASL_PLAINTEXT

cluster1.kafka.eagle.sasl.mechanism=SCRAM-SHA-256

cluster1.kafka.eagle.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="kafka" password="kafka-eagle";

cluster1.kafka.eagle.sasl.client.id=

cluster1.kafka.eagle.blacklist.topics=

cluster1.kafka.eagle.sasl.cgroup.enable=false

cluster1.kafka.eagle.sasl.cgroup.topics=

cluster2.kafka.eagle.sasl.enable=false

cluster2.kafka.eagle.sasl.protocol=SASL_PLAINTEXT

cluster2.kafka.eagle.sasl.mechanism=PLAIN

cluster2.kafka.eagle.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="kafka-eagle";

cluster2.kafka.eagle.sasl.client.id=

cluster2.kafka.eagle.blacklist.topics=

cluster2.kafka.eagle.sasl.cgroup.enable=false

cluster2.kafka.eagle.sasl.cgroup.topics=


######################################

# kafka ssl authenticate

######################################

cluster3.kafka.eagle.ssl.enable=false

cluster3.kafka.eagle.ssl.protocol=SSL

cluster3.kafka.eagle.ssl.truststore.location=

cluster3.kafka.eagle.ssl.truststore.password=

cluster3.kafka.eagle.ssl.keystore.location=

cluster3.kafka.eagle.ssl.keystore.password=

cluster3.kafka.eagle.ssl.key.password=

cluster3.kafka.eagle.blacklist.topics=

cluster3.kafka.eagle.ssl.cgroup.enable=false

cluster3.kafka.eagle.ssl.cgroup.topics=


######################################

# kafka sqlite jdbc driver address

######################################

kafka.eagle.driver=org.sqlite.JDBC

kafka.eagle.url=jdbc:sqlite:/hadoop/kafka-eagle/db/ke.db

kafka.eagle.username=root

kafka.eagle.password=www.kafka-eagle.org


######################################

# kafka mysql jdbc driver address

######################################

#kafka.eagle.driver=com.mysql.jdbc.Driver

#kafka.eagle.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

#kafka.eagle.username=root

#kafka.eagle.password=123456

EOF

nexus3

docker search nexus3 #搜索镜像

docker pull sonatype/nexus3 #拉取镜像

mkdir -p $data/nexus/nexus-data #创建文件

chmod 777 $data/nexus/nexus-data

启动

docker run -d --name nexus --privileged=true --restart=always -p 8081:8081 -v $data/nexus/nexus-data:/nexus-data sonatype/nexus3

请求地址

http://192.168.1.10:8081

查看密码并登录

cat  $data/nexus/nexus-data/admin.password #进入之后,文件自动删除

#设置密码为:1



删除

docker rm -f nexus

Jenkins

docker pull jenkins/jenkins

mkdir -p $data/jenkins

chmod 777 $data/jenkins

启动

docker run -u root  -d  -p 8060:8080  -p 50000:50000

  --privileged=true --restart=always

  -v $data/jenkins:/var/jenkins_home

  -v /usr/local/maven:/usr/local/maven

  -v /usr/local/jdk:/usr/local/jdk

  -v /etc/localtime:/etc/localtime

  -v /var/run/docker.sock:/var/run/docker.sock

  --name myjenkins

  jenkins/jenkins

修改镜像

vi $data/jenkins/hudson.model.UpdateCenter.xml #修改配置文件


https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json #清华大学镜像


docker restart myjenkins #重启

查看密码

cat $data/jenkins/secrets/initialAdminPassword

进入容器

docker exec -it myjenkins bash

访问

http://192.168.1.10:8060

查看日志

docker logs  --tail  300 -f  myjenkins

删除

docker rm -f myjenkins

minio

docker pull minio/minio


docker run -p 9010:9000 -p 9020:9020

     --name minio

     -d --restart=always

     -e "MINIO_ACCESS_KEY=admin"

     -e "MINIO_SECRET_KEY=admin123456"

     -v $data/minio/data:/data

     -v $data/minio/config:/root/.minio

     minio/minio server

     /data --console-address ":9020" -address ":9000"



rm -rf $data/minio  

docker rm -f minio #删除容器

登录


http://192.168.1.10:9020 #管理页面

http://192.168.1.10:9010 #代码里面配置

用户名密码


用户名:admin

密码:admin123456

设置




添加规则






docker本地仓库

docker run -d  -p 5000:5000  --privileged=true --restart=always   --name registry  -v $data/registry:/var/lib/registry registry:2  

gbase8a南大通用

创建目录

mkdir -p $data/gbase/data && chmod 777 $data/gbase/data

rm -rf $data/gbase/data

启动容器

docker run -d -p 5258:5258 -p 8099:8099 --privileged=true --restart=always --name gbase8a shihd/gbase8a:1.0

删除容器

 docker rm -f gbase8a

用户名

DB: gbase

User: root

Password: root

Port: 5258


#链接

jdbc:gbase://192.168.1.10:5258/gbase?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8

测试

 #新建数据库

 create database test;

 #使用数据库

 use test;



 CREATE TABLE demo (

 id BIGINT auto_increment primary key,

 name VARCHAR(255),

 age SMALLINT,

 create_by VARCHAR(100),

 update_by VARCHAR(100),

 create_time DATETIME,

 update_time DATETIME

);


#插入

INSERT INTO demo 

( name, age, create_by, update_by, create_time, update_time)

VALUES('张三', 100, 'system', 'system', now(), now()),('李四', 50, 'system', 'system', now(), now());


#分页查询

select * from demo limit 2,2;


#修改语句

UPDATE demo SET name='王五',age=42 WHERE id=2;


#删除语句

DELETE FROM demo WHERE id=4;

DM

下载地址

https://www.dameng.com/list_103.html



安装地址

https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html

导入镜像

docker load --input dm8_20220822_rev166351_x86_rh6_64_ctm.tar 

创建文件并授权

mkdir -p $data/dm8_01/data && chmod 777 $data/dm8_01/data

启动容器

docker run -d -p 5236:5236 --restart=always --name dm8_01 --privileged=true -e PAGE_SIZE=16 -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e INSTANCE_NAME=dm8_01 -v $data/dm8_01/data:/opt/dmdbms/data dm8_single:v8.1.2.128_ent_x86_64_ctm_pack4

查看日志

docker logs --tail  300 -f  dm8_01



常用命令

#进入容器

docker exec -it dm8_01 bash

cd /opt/dmdbms/bin

./disql SYSDBA/SYSDBA001


-- 创建一个具有DBA权限的用户,最大会话次数1000 (默认0),失败登录次数10(默认3) 口令锁定期1分钟(默认1),密码宽限期10天(默认10)


create user "ROOT" identified by "123456789"

limit SESSION_PER_USER 10000 FAILED_LOGIN_ATTEMPS 10 PASSWORD_LOCK_TIME 1 PASSWORD_GRACE_TIME 10;


-- 创建一个具有DBA权限的用户,最大会话次数1000

create user "ROOT" identified by "123456789" limit SESSION_PER_USER 10000;


-- 授权DBA加转授

grant "DBA" to "ROOT" with admin option;


GRANT RESOURCE,VTI,SOI TO ROOT;


--创建用户表空间 初始化128M  打开自动扩充 扩充2M  最大1024M

create tablespace "TEST_TABLESPACE" datafile 'TEST_TABLESPACE.DBF' size 128 autoextend on next 2 maxsize 10240 CACHE = NORMAL;


--创建用户

CREATE USER TEST IDENTIFIED BY 123456789;


--设置用户默认表空间

ALTER USER TEST DEFAULT TABLESPACE TEST_TABLESPACE DEFAULT INDEX TABLESPACE TEST_TABLESPACE;


--给用户给予必要权限 RESOURCE 角色中,是对应用户自己用户下的全部权限

GRANT RESOURCE,VTI,SOI TO TEST;


-- 在自己的用户下为所欲为,可以查询全库的数据,但是对于其他用户下的数据,不能做增删改

grant resource any table to TEST; 

grant select any table to TEST;



CREATE TABLE "TEST"."DEMO"

(

"id" BIGINT IDENTITY(1,1) PRIMARY KEY,

"name" VARCHAR(100),

"age" INTEGER,

"create_by" VARCHAR(100),

"create_time" TIMESTAMP(6),

"update_time" TIMESTAMP(6),

"update_by" VARCHAR(100)

) ;


INSERT INTO  "TEST"."DEMO" ("name","age","create_by", "create_time", "update_time","update_by")

VALUES ( '张三', 19, 'system', now(),now(), 'system'),

( '李四', 20, 'system', now(),now(), 'system')


select * from DEMO limit 3,2;

文档

https://eco.dameng.com/document/dm/zh-cn/start/

注意点

1、达梦数据库设置成大小写敏感时,小写的标识符需要用双引号括起,否则会被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。

2、建议数据库表、列名等使用大写字母

3、资源设置注意合理性,避免发生超过最大连接限制的情况



oracle

oracle12

启动容器

docker pull truevoly/oracle-12c

mkdir -p $data/oracle/data_temp  && chmod 777 $data/oracle/data_temp


docker run  --privileged=true --restart always -d -p 8080:8080 -p 1521:1521 -v $data/oracle/data_temp:/home/oracle/data_temp   -v /etc/localtime:/etc/localtime:ro  --name oracle_one truevoly/oracle-12c 

查看日志

docker logs --tail  300 -f  oracle_one



进入Oracle

docker exec -it oracle_one /bin/bash


#两种进入方式

#进入Oracle

sqlplus system/oracle@//localhost:1521/xe


#进入Oracle

sqlplus /nolog


#密码:oracle

connect sys as sysdba; 


#修改用户 system 的密码为 oracle

alter user system identified by 123456;


#查看oracle现在的状态 ,状态为 OPEN 则正常

select status from v$instance;  

用户名密码

62-oracle12-1521 #链接名

Basic #连接类型

192.168.1.62 #主机

1521 #端口

XE #服务名

system #用户名

123456 #密码





删除容器

docker rm -f oracle_one

Oracle19

启动容器

docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c


# 创建文件

mkdir -p $data/oracle19/oradata && chmod 777 $data/oracle19/oradata


#ORACLE_PWD 此处是oracle密码


docker run --privileged=true --restart always -d 

-p 1524:1521 -p 5502:5500

-e ORACLE_SID=ORCLCDB

-e ORACLE_PDB=ORCLPDB1

-e ORACLE_PWD=123456

-e ORACLE_EDITION=standard

-e ORACLE_CHARACTERSET=AL32UTF8

-v $data/oracle19/oradata:/opt/oracle/oradata

--name oracle19

registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c

查看日志

docker logs --tail  300 -f oracle19

出现下图说明成功




进入容器并创建用户

docker exec -it oracle19 /bin/bash


#登录到数据库

sqlplus / as sysdba


#查看当前session连接的是CDB还是PDB

show con_name;



查看所有pdb

show pdbs;



ORCLPDB1的打开方式是 【READ WRITE】(读写),如果不是请修改


alter pluggable database orclpdb1 open;

创建一个PDB层面用户

#切换会话

alter session set container=ORCLPDB1;


#再次查看并确认会话

show con_name;


--  create user 账户 identified by 密码;

create user test identified by 123456;


--  授权

GRANT CONNECT, RESOURCE, DBA TO test;


--  给用户授予权限

grant create session to test;

grant connect,resource to test;

用户名和密码

#链接名 62-oracle19-1524

#端口:  1524

#服务名: ORCLCDB/ORCLPDB1

#用户名: SYSTEM/TEST

#密码:  123456



浏览器登录

https://192.168.1.10:5502/em/login


username:sys

password:123456

Container Name:ORCLPDB1

容器管理

docker restart oracle19

docker rm -f oracle19

创建用户

在数据库中建立的用户对应以上两个层级:


COMMOM USERS , 普通用户, 一般建立在CDB层, 用户名需要以 C#或C##开头;


LOCAL USERS , 本地用户, 仅建立在PBD层,建立的时候需要指定容器


用户名和服务是挂钩的


查询当前会话


select sys_context ('USERENV', 'CON_NAME') from dual; 

#结果如下 CDB$ROOT


select con_id,dbid,NAME,OPEN_MODE from v$pdbs;



alter pluggable database PDB$SEED open force;


#切换会话

alter session set container=ORCLPDB1;


#查询当前会话

select sys_context ('USERENV', 'CON_NAME') from dual; 

用户管理

--  create user 账户 identified by 密码;

create user test identified by 123456;


--  授权

GRANT CONNECT, RESOURCE, DBA TO test;


--  给用户授予权限

grant create session to test;

grant connect,resource to test;


-- 删除用户

DROP USER 用户名 CASCADE;

alter session set container=ORCLPDB1;

-- 多权限授权

GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,

DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,

DBA,CONNECT,RESOURCE,CREATE SESSION TO test01;


grant select any table to test01;

-- 解除锁定

alter user test01 account unlock;

查看服务

select value from v$parameter where name='service_names'; #查看服务


#修改服务名

ALTER SYSTEM SET service_names = 'OCTL'; 

#查询已注册的服务集合

SELECT DISTINCT name FROM v$active_services;



pdb名称

SELECT pdb_name FROM dba_pdbs;

查看所有账户

SELECT * FROM ALL_USERS;



常用sql

select * from v$version; #查询版本


select username ,profile from dba_users; #查询一下用户的profile的类型


#查看制定概要文件(默认为DEFAULT)的密码有效期

select  * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME'; 


#然后将密码的有效期有180天设置为“无限制”;

ALTER PROFILE  DEFAULT  LIMIT PASSWORD_LIFE_TIME UNLIMITED;


-- 修改密码

alter user test01 identified by 123456;


-- 查询所有表空间

SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;


-- 创建表空间 

create tablespace abcd

datafile '/u01/app/oracle/oradata/abcd.dbf'

size 100m

autoextend on

next 10m  maxsize unlimited

extent management local



-- 新建用户`TEST`并选择刚创建的表空间 `BKJ`

CREATE USER TEST  

 IDENTIFIED BY  123456          

 ACCOUNT UNLOCK          

 DEFAULT TABLESPACE abcd;


-- connect,resource,dba权限赋予 test用户

GRANT CONNECT,RESOURCE,DBA TO TEST;


-- 多权限授权

GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,

DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,

DBA,CONNECT,RESOURCE,CREATE SESSION TO TEST;

mongo

下载镜像

docker pull mongo

创建文件夹

mkdir -p $data/mongodb/data && cd $data/mongodb

创建启动脚本

cat <<EOF> start.sh

#!/bin/bash

MONGODB_DIR=`pwd`

docker stop mongodb

docker rm mongodb

docker run -d \

  --name mongodb \

  --restart always \

  --privileged \

  -p 27017:27017 \

  -v ${MONGODB_DIR}/data:/data/db \

  -e MONGO_INITDB_ROOT_USERNAME=admin \

  -e MONGO_INITDB_ROOT_PASSWORD=123456 \

  mongo mongod --auth

EOF

启动

sh start.sh

yapi

下载镜像

docker pull jayfong/yapi

启动容器

docker run

-d

--name yapi

--restart=always

--privileged=true

-p 6005:3000

-e YAPI_ADMIN_ACCOUNT=1115758907@qq.com

-e YAPI_ADMIN_PASSWORD=123456

-e YAPI_CLOSE_REGISTER=true

-e YAPI_DB_SERVERNAME=10.0.4.7

-e YAPI_DB_PORT=27017

-e YAPI_DB_DATABASE=yapi

-e YAPI_DB_USER=admin

-e YAPI_DB_PASS=123456

-e YAPI_DB_AUTH_SOURCE=admin

-e YAPI_MAIL_ENABLE=false

-e YAPI_PLUGINS=[]

jayfong/yapi





docker rm -f yapi #删除容器

yapi会自己新建一个库


登录

192.168.1.10:6005 #登录地址

1115758907@qq.com #用户名

123456 #密码

oceanbase

mkdir -p $data/oceanbase && chmod 777 $data/oceanbase

#搜索镜像

docker search oceanbase


#下载镜像

docker pull oceanbase/oceanbase-ce:latest


#启动容器

docker run -d -p 2883:2881 --privileged=true --restart always -v $data/oceanbase/ob:/root/ob -v $data/oceanbase/obd:/root/.obd --name oceanbase oceanbase/oceanbase-ce


#查日志

docker logs --tail  300 -f oceanbase

使用

docker exec -it  oceanbase bash #进入容器


[root@398adab602d4 ~]# obd cluster list #查看集群状态

+------------------------------------------------------------+

|                        Cluster List                        |

+-----------+------------------------------+-----------------+

| Name      | Configuration Path           | Status (Cached) |

+-----------+------------------------------+-----------------+

| obcluster | /root/.obd/cluster/obcluster | running         |

+-----------+------------------------------+-----------------+

[root@398adab602d4 ~]# obd cluster start obcluster   #启动集群

Get local repositories ok

Search plugins ok

Open ssh connection ok

Load cluster param plugin ok

Cluster status check ok

Deploy "obcluster" is running

修改密码:

obclient -h127.0.0.1 -u root -P 2881 #使用obclient客户端连接实例


#修改用户密码,下面语句二选一即可

ALTER USER root IDENTIFIED BY 'fei891025';

SET PASSWORD for root = PASSWORD('fei891025');


#使用密码验证登录

obclient -h127.0.0.1 -uroot@sys -P2881 -pfei891025 -c -A oceanbase

登录

192.168.1.62 #ip

2881 #端口

root #用户名

fei891025 #密码

删除

docker rm -f oceanbase && rm -rf $data/oceanbase

常用sql

show databases; #显示所有数据库

use oceanbase; #使用数据库

CREATE DATABASE demo DEFAULT CHARACTER SET UTF8MB4;

use demo; 

trilium个人笔记

docker run -d --name trilium  -p 8010:8080 -e TRILIUM_DATA_DIR='/home/node/trilium-data' -v $data/trilium-data:/home/node/trilium-data --privileged=true  --restart=always nriver/trilium-cn 

删除笔记

docker rm -f trilium && rm -rf $data/trilium-data



安装docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose #下载

chmod +x /usr/local/bin/docker-compose  #授权

验证docker-compose

docker-compose --version

安装mysql主从

mkdir -p $data/mysqlMS

cd $data/mysqlMS

创建docker-compose.yml

cat >docker-compose.yml <<-'EOF' 

version: '3.8'

services:

  mysql-master:

    container_name: mysql-master 

    image: mysql:5.7.37

    restart: always

    ports:

      - 3360:3306 

    privileged: true

    volumes:

      - $PWD/msql-master/volumes/log:/var/log/mysql  

      - $PWD/msql-master/volumes/conf/my.cnf:/etc/mysql/my.cnf

      - $PWD/msql-master/volumes/data:/var/lib/mysql

      - /etc/localtime:/etc/localtime:ro

    environment:

      MYSQL_ROOT_PASSWORD: "123456"

      TZ: Asia/Shanghai

    command: [

      '--character-set-server=utf8mb4',                         #设置数据库表的数据集

      '--collation-server=utf8mb4_unicode_ci',                  #设置数据库表的排序规则

      '--explicit_defaults_for_timestamp=true',                 #未明确声明为NOT NULL的TIMESTAMP列允许NULL值,将此列设置为NULL将其设置为NULL,而不是当前时间戳。

      '--lower_case_table_names=1',                             #设置表名大小写不敏感

      '--max_allowed_packet=128M',                              #设置单条sql数据大小,批量更新和插入使用

      '--default-authentication-plugin=mysql_native_password',  #保持之前的密码认证方式

      '--max_connections=1000',                                 #最大允许连接的数量

    ]

    networks:

      - myweb

  mysql-slave:

    container_name: mysql-slave 

    image: mysql:5.7.37

    restart: always

    ports:

      - 3370:3306 

    privileged: true

    volumes:

      - $PWD/msql-slave/volumes/log:/var/log/mysql  

      - $PWD/msql-slave/volumes/conf/my.cnf:/etc/mysql/my.cnf

      - $PWD/msql-slave/volumes/data:/var/lib/mysql

    environment:

      MYSQL_ROOT_PASSWORD: "123456"

      TZ: Asia/Shanghai

    command: [

      '--character-set-server=utf8mb4',                         #设置数据库表的数据集

      '--collation-server=utf8mb4_unicode_ci',                  #设置数据库表的排序规则

      '--explicit_defaults_for_timestamp=true',                 #未明确声明为NOT NULL的TIMESTAMP列允许NULL值,将此列设置为NULL将其设置为NULL,而不是当前时间戳。

      '--lower_case_table_names=1',                             #设置表名大小写不敏感

      '--max_allowed_packet=128M',                              #设置单条sql数据大小,批量更新和插入使用

      '--default-authentication-plugin=mysql_native_password',  #保持之前的密码认证方式

      '--max_connections=1000',                                 #最大允许连接的数量

    ]

    networks:

      - myweb    

networks:

  myweb:

    driver: bridge

EOF

创建配置文件夹

mkdir -p msql-master/volumes/conf msql-slave/volumes/conf

tree #找不到命令 yum -y install tree

.

├── docker-compose.yml

├── msql-master

│   └── volumes

│       └── conf

└── msql-slave

    └── volumes

        └── conf


6 directories, 1 file

主master配置文件my.cnf

vi msql-master/volumes/conf/my.cnf

内容如下:


[mysqld]

# [必须]服务器唯一ID,默认是1,一般取IP最后一段

server-id=1


# [必须]启用二进制日志

log-bin=mysql-bin 


# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql


# 设置需要同步的数据库 binlog_do_db = 数据库名; 

# 如果是多个同步库,就以此格式另写几行即可。

# 如果不指明对某个具体库同步,表示同步所有库。除了binlog-ignore-db设置的忽略的库

# binlog_do_db = test #需要同步test数据库。


# 确保binlog日志写入后与硬盘同步

sync_binlog = 1


# 跳过所有的错误,继续执行复制操作

slave-skip-errors = all   

从slave配置文件my.cnf

vi msql-slave/volumes/conf/my.cnf

内容如下:


[mysqld]

# [必须]服务器唯一ID,默认是1,一般取IP最后一段  

server-id=2


# 如果想实现 主-从(主)-从 这样的链条式结构,需要设置:

# log-slave-updates      只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器。


# 设置需要同步的数据库,主服务器上不限定数据库,在从服务器上限定replicate-do-db = 数据库名;

# 如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。

# replicate-do-db = test;


# 不同步test数据库 可以写多个例如 binlog-ignore-db = mysql,information_schema 

replicate-ignore-db=mysql  


## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用

log-bin=mysql-bin

log-bin-index=mysql-bin.index


## relay_log配置中继日志

#relay_log=edu-mysql-relay-bin  


## 还可以设置一个log保存周期:

#expire_logs_days=14


# 跳过所有的错误,继续执行复制操作

slave-skip-errors = all  

启动服务

docker-compose up -d

进入主mysql服务

docker exec -it mysql-master bash #进入mysql-master容器


mysql -uroot -p123456 #登录


#查看server_id是否生效

mysql> show variables like '%server_id%';

+----------------+-------+

| Variable_name  | Value |

+----------------+-------+

| server_id      | 1     |

| server_id_bits | 32    |

+----------------+-------+


#开权限

mysql> grant replication slave,replication client on *.* to 'slave'@'%' identified by "123456";

mysql> flush privileges;


#看master信息 File 和 Position 从服务上要用

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000005 |      154 |              | mysql            |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

进入从slave服务

docker exec -it mysql-slave bash 


mysql -uroot -p123456


 #查看server_id是否生效 


mysql> show variables like '%server_id%';


 +----------------+-------+

| Variable_name  | Value |

+----------------+-------+

| server_id      | 2     |

| server_id_bits | 32    |

+----------------+-------+



#在执行下面这个命令之前,进入主数据库   重新查看最新master信息 File 和 Position 从服务上要用

#修改master_host,master_port

# 连接主mysql服务 master_log_file 和 master_log_pos的值要填写主master里查出来的值 

change master to master_host='192.168.17.143',master_user='slave',master_password='123456',master_port=3360,master_log_file='mysql-bin.000003', master_log_pos=610,master_connect_retry=30; 

#启动slave 

mysql> start slave; 

#查看状态

mysql> show slave status G


#删除记录

mysql> reset slave;

#停止

mysql> stop slave;

mysql> change master to master_host='192.168.17.128',master_user='slave',master_password='123456',master_port=3360,master_log_file='mysql-bin.000004', master_log_pos=610,master_connect_retry=30; 

#启动slave 

mysql> start slave; 

连接主mysql参数说明:


**master_port**:Master的端口号,指的是容器的端口号


**master_user**:用于数据同步的用户


**master_password**:用于同步的用户的密码


**master_log_file**:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值


**master_log_pos**:从哪个 Position 开始读,即上文中提到的 Position 字段的值


**master_connect_retry**:如果连接失败,重试的时间间隔,单位是秒,默认是60秒



确认是否成功


 Relay_Master_Log_File: mysql-bin.000004

      Slave_IO_Running: Yes

     Slave_SQL_Running: Yes




上一条:Aspen plus模拟空调制冷循环过程

下一条:Docker常用命令组合与使用场景