docker中访问本机 ip 地址使用host.docker.internal 变量

Nginx

  1. 拉取镜像

    docker pull nginx
  2. 拷贝配置文件

    • 第一次运行 nginx 镜像的命令:容器名nginx

    docker run -d 
      -p 80:80
      --name nginx 
      nginx:latest
  3. 配置文件 nginx.conf

    user  nginx;
     worker_processes  auto;
     
     error_log  /var/log/nginx/error.log notice;
     pid        /var/run/nginx.pid;
     
     
     events {
         worker_connections  1024;
     }
     
     
     http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
      
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
      
        access_log  /var/log/nginx/access.log  main;
      
        sendfile        on;
        #tcp_nopush     on;
      
        keepalive_timeout  65;
      
        #gzip  on;  
      
        include /etc/nginx/conf.d/*.conf;
     }
  4. 编排

    services:
      nginx:
        image: nginx:latest
        container_name: nginx
        ports:
          - "80:80"
        volumes:
          - ./conf/nginx.conf:/etc/nginx/nginx.conf
          - ./data/html/:/usr/share/nginx/html/
          - ./logs/:/var/log/nginx/
        restart: always

MySQL

  1. 拉取镜像

     docker pull mysql:8.4.3
  2. 创建配置目录

     # 配置文件
     mkdir -p /opt/docker-data/mysql/conf
     # 数据文件
     mkdir -p /opt/docker-data/mysql/data
     # 日志文件
     mkdir -p /opt/docker-data/mysql/logs
  3. 创建配置文件

     cd /opt/docker-data/mysql/conf
     vim my.cnf
     [client]
     # 设置mysql客户端连接服务端时默认使用的端口
     port=3306
     default-character-set=utf8mb4
     socket=/var/lib/mysql/mysql.sock
     ​
     [mysql]
     # 设置mysql客户端默认字符集
     default-character-set=utf8mb4
     ​
     [mysqld]
     # 设置3306端口
     port=3306
     # 允许最大连接数
     max_connections=1000
     # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
     max_connect_errors=100
     # 创建新表时将使用的默认存储引擎
     default-storage-engine=INNODB
     # 是否对sql语句大小写敏感,1表示不敏感
     lower_case_table_names=1
     # MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
     interactive_timeout =1800
     # MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
     wait_timeout=1800
     # Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
     # 执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
     lock_wait_timeout=3600
     # 内部内存临时表的最大值。
     # 比如大数据量的group by ,order by时可能用到临时表,
     # 超过了这个值将写入磁盘,系统IO压力增大
     tmp_table_size=64M
     max_heap_table_size=64M
     # 设置分组模式
     sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
     # 设置全局聚合方式
     init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_general_ci'
     # 设置密码验证规则
     mysql_native_password=ON
     # 服务端使用的字符集默认为UTF8
     character-set-server=utf8mb4
     collation-server=utf8mb4_general_ci
     # 禁用DNS解析
     skip-name-resolve
     # 设置数据目录
     datadir=/var/lib/mysql
     socket=/var/lib/mysql/mysql.sock
     ​
     # 日志设置
     ​
     # 启用常规查询日志
     general_log = 1        
     # 常规日志文件路径
     general_log_file = /var/log/mysql/mysql.log 
     # 最大二进制日志文件大小
     max_binlog_size = 100M
     ​
     # 启用慢查询日志
     # 无论是否超时,未被索引的记录也会记录下来
     log_queries_not_using_indexes=1
     # 全局开启慢查询功能
     slow_query_log=1
     # 慢查询阈值(秒),SQL 执行超过这个阈值将被记录在日志中
     long_query_time=1
     # 慢查询仅记录扫描行数大于此参数的 SQL
     min_examined_row_limit=500
     # 指定慢查询日志存储文件的地址和文件名
     slow_query_log_file=/var/log/mysql/mysql_slow.log        
     ​
     # 错误日志文件路径
     log_error = /var/log/mysql/mysql_error.log 
  4. 运行容器

     docker run -d \
       --name=mysql \
       -p 3306:3306 \
       --restart=always \
       --privileged=true \
       -v /opt/docker-data/mysql/conf:/etc/mysql/conf.d \
       -v /opt/docker-data/mysql/data:/var/lib/mysql \
       -v /opt/docker-data/mysql/logs:/logs \
       -e MYSQL_ROOT_PASSWORD=123456 \
       mysql:8.4.3

编排

 services:
   mysql:
     image: mysql:8.4.3
     container_name: mysql
     privileged: true
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: 123456
     networks:
       - mysql-network
     ports: 
       - "3306:3306"
     volumes:
       - /opt/docker-data/mysql/data:/var/lib/mysql
       - /opt/docker-data/mysql/conf/my.cnf:/etc/my.cnf
       - /opt/docker-data/mysql/logs:/var/log/mysql
       - /etc/timezone:/etc/timezone:ro
       - /etc/localtime:/etc/localtime:ro
     command:
       - --mysql-native-password=on
 networks:
   mysql-network:

Rabbitmq

  1. 拉取镜像

     docker pull rabbitmq:management
  2. 运行容器

     docker run -d \
         --name rabbitmq \
         -e RABBITMQ_DEFAULT_USER=dream \
         -e RABBITMQ_DEFAULT_PASS=123456 \
         -p 15672:15672 \
         -p 5672:5672 \
         rabbitmq:management
  3. 访问页面

     <服务器>:15672

Nacos

  1. 拉取镜像

    docker pull nacos/nacos-server:latest
  2. 创建日志和配置文件目录

    mkdir -p /opt/nacos/logs
    mkdir -p /opt/nacos/init.d
    mkdir -p /opt/nacos/dada

  3. 创建nacos配置数据库 nacos_config

    官网地址:nacos数据库地址

     /*
      * Copyright 1999-2018 Alibaba Group Holding Ltd.
      *
      * Licensed under the Apache License, Version 2.0 (the "License");
      * you may not use this file except in compliance with the License.
      * You may obtain a copy of the License at
      *
      *      http://www.apache.org/licenses/LICENSE-2.0
      *
      * Unless required by applicable law or agreed to in writing, software
      * distributed under the License is distributed on an "AS IS" BASIS,
      * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      * See the License for the specific language governing permissions and
      * limitations under the License.
      */
      
     /*
      数据库名 = nacos_config
     */ 
     CREATE DATABASE nacos_config;
     USE nacos_config;
     ​
     /******************************************/
     /*   表名称 = config_info                  */
     /******************************************/
     CREATE TABLE `config_info` (
       `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
       `data_id` varchar(255) NOT NULL COMMENT 'data_id',
       `group_id` varchar(128) DEFAULT NULL COMMENT 'group_id',
       `content` longtext NOT NULL COMMENT 'content',
       `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
       `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
       `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
       `src_user` text COMMENT 'source user',
       `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
       `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
       `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
       `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',
       `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',
       `effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述',
       `type` varchar(64) DEFAULT NULL COMMENT '配置的类型',
       `c_schema` text COMMENT '配置的模式',
        `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
       PRIMARY KEY (`id`),
       UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
     ​
     /******************************************/
     /*   表名称 = config_info_aggr             */
     /******************************************/
     CREATE TABLE `config_info_aggr` (
       `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
       `data_id` varchar(255) NOT NULL COMMENT 'data_id',
       `group_id` varchar(128) NOT NULL COMMENT 'group_id',
       `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
       `content` longtext NOT NULL COMMENT '内容',
       `gmt_modified` datetime NOT NULL COMMENT '修改时间',
       `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
       `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
       PRIMARY KEY (`id`),
       UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
     ​
     ​
     /******************************************/
     /*   表名称 = config_info_beta             */
     /******************************************/
     CREATE TABLE `config_info_beta` (
       `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
       `data_id` varchar(255) NOT NULL COMMENT 'data_id',
       `group_id` varchar(128) NOT NULL COMMENT 'group_id',
       `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
       `content` longtext NOT NULL COMMENT 'content',
       `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
       `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
       `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
       `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
       `src_user` text COMMENT 'source user',
       `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
       `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
        `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
       PRIMARY KEY (`id`),
       UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
     ​
     /******************************************/
     /*   表名称 = config_info_tag              */
     /******************************************/
     CREATE TABLE `config_info_tag` (
       `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
       `data_id` varchar(255) NOT NULL COMMENT 'data_id',
       `group_id` varchar(128) NOT NULL COMMENT 'group_id',
       `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
       `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
       `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
       `content` longtext NOT NULL COMMENT 'content',
       `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
       `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
       `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
       `src_user` text COMMENT 'source user',
       `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
       PRIMARY KEY (`id`),
       UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
     ​
     /******************************************/
     /*   表名称 = config_tags_relation         */
     /******************************************/
     CREATE TABLE `config_tags_relation` (
       `id` bigint(20) NOT NULL COMMENT 'id',
       `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
       `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
       `data_id` varchar(255) NOT NULL COMMENT 'data_id',
       `group_id` varchar(128) NOT NULL COMMENT 'group_id',
       `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
       `nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',
       PRIMARY KEY (`nid`),
       UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
       KEY `idx_tenant_id` (`tenant_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
     ​
     /******************************************/
     /*   表名称 = group_capacity               */
     /******************************************/
     CREATE TABLE `group_capacity` (
       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
       `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
       `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
       `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
       `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
       `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
       `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
       `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
       `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
       `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
       PRIMARY KEY (`id`),
       UNIQUE KEY `uk_group_id` (`group_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
     ​
     /******************************************/
     /*   表名称 = his_config_info              */
     /******************************************/
     CREATE TABLE `his_config_info` (
       `id` bigint(20) unsigned NOT NULL COMMENT 'id',
       `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
       `data_id` varchar(255) NOT NULL COMMENT 'data_id',
       `group_id` varchar(128) NOT NULL COMMENT 'group_id',
       `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
       `content` longtext NOT NULL COMMENT 'content',
       `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
       `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
       `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
       `src_user` text COMMENT 'source user',
       `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
       `op_type` char(10) DEFAULT NULL COMMENT 'operation type',
       `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
        `encrypted_data_key` varchar(1024) NOT NULL DEFAULT '' COMMENT '密钥',
       PRIMARY KEY (`nid`),
       KEY `idx_gmt_create` (`gmt_create`),
       KEY `idx_gmt_modified` (`gmt_modified`),
       KEY `idx_did` (`data_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
     ​
     ​
     /******************************************/
     /*   表名称 = tenant_capacity              */
     /******************************************/
     CREATE TABLE `tenant_capacity` (
       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
       `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
       `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
       `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
       `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
       `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
       `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
       `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
       `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
       `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
       PRIMARY KEY (`id`),
       UNIQUE KEY `uk_tenant_id` (`tenant_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
     ​
     ​
     CREATE TABLE `tenant_info` (
       `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
       `kp` varchar(128) NOT NULL COMMENT 'kp',
       `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
       `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
       `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
       `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
       `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
       `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
       PRIMARY KEY (`id`),
       UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
       KEY `idx_tenant_id` (`tenant_id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
     ​
     CREATE TABLE `users` (
      `username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username',
      `password` varchar(500) NOT NULL COMMENT 'password',
      `enabled` boolean NOT NULL COMMENT 'enabled'
     );
     ​
     CREATE TABLE `roles` (
      `username` varchar(50) NOT NULL COMMENT 'username',
      `role` varchar(50) NOT NULL COMMENT 'role',
      UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
     );
     ​
     CREATE TABLE `permissions` (
         `role` varchar(50) NOT NULL COMMENT 'role',
         `resource` varchar(128) NOT NULL COMMENT 'resource',
         `action` varchar(8) NOT NULL COMMENT 'action',
         UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
     );
  4. 运行

     docker run -d \
     --name nacos \
     -p 8848:8848 \
     -p 9848:9848 \
     -p 9849:9849 \
     --privileged=true \
     --restart=always \
     -e JVM_XMS=256m \
     -e JVM_XMX=256m \
     -e MODE=standalone \
     -e PREFER_HOST_MODE=hostname \
     -e SPRING_DATASOURCE_PLATFORM=mysql \
     -e MYSQL_SERVICE_HOST=124.222.109.240 \
     -e MYSQL_SERVICE_PORT=3306 \
     -e MYSQL_SERVICE_DB_NAME=nacos_config \
     -e MYSQL_SERVICE_USER=root \
     -e MYSQL_SERVICE_PASSWORD=123456 \
     -v /opt/nacos/logs:/home/nacos/logs \
     -v /opt/nacos/init.d/custom.properties:/etc/nacos/init.d/custom.properties \
     -v /opt/nacos/data:/home/nacos/data \
     nacos/nacos-server:latest
     ​
  5. 访问地址

     http://<server>:8848/nacos

Sentinel-dashboard

  1. 拉取镜像

     docker pull bladex/sentinel-dashboard:latest
  2. 运行

     docker run -d \
       --name sentinel-dashboard \
       --restart=always \
       --privileged=true \
       -p 8858:8858 \
       -p 8719:8719 \
       bladex/sentinel-dashboard:latest
  3. 访问 http:<server>:8858

  4. 默认用户密码:sentinel

Seata

  1. 拉取镜像

    docker pull ssgssg/seata:1.4.0
  2. 创建文件夹

    mkdir -p /opt/seata/seata-data

Gogs

  1. 拉取镜像

    docker pull gogs/gogs
  2. 创建挂载卷

     mkdir /opt/docker-data/gogs
  3. 创建容器

     docker run -d \
       --name gogs \
       -p 10022:22 \
       -p 13000:3000 \
       -v /opt/docker-data/gogs:/data \
       gogs/gogs
  4. 编排

     services:
       gogs:
         image: gogs/gogs
         container_name: gogs
         ports:
           - "10022:22"
           - "13000:3000"
         volumes:
           - /opt/docker-data/gogs:/data
         restart: always
  5. 访问

     http://<server>:13000

Minio

  1. 拉取镜像

     docker pull minio/minio
  2. 挂载目录

    mkdir -p /opt/docker-data/minio/conf
    mkdir -p /opt/docker-data/minio/data
  3. 创建容器

    docker run \
      -p 9000:9000 \
      -p 9001:9001 \
      --name minio \
      -d --restart=always \
      -e "MINIO_ACCESS_KEY=minio" \
      -e "MINIO_SECRET_KEY=minio123456" \
      -v /opt/docker-data/minio/data:/data \
      -v /opt/docker-data/minio/conf:/root/.minio \
      minio/minio server \
      /data --console-address ":9001" -address ":9000"
  4. 编排

    services:
      minio:
        image: minio/minio
        container_name: minio
        restart: always
        environment:
          MINIO_ACCESS_KEY: "minio"
          MINIO_SECRET_KEY: "minio123456"
        ports: 
          - "9000:9000"
          - "9001:9001"
        command: server /data --console-address ":9001" -address ":9000"
        volumes:
          - /opt/docker-data/minio/data:/data
          - /opt/docker-data/minio/conf:/root/.minio
        networks:
          - minio_network
    networks:
      minio_network:
  5. 访问

    http:<server>:9001

Redis

  1. 拉取镜像

     docker pull redis:latest
  2. 创建数据目录

     mkdir -p /opt/docker-data/redis/data
  3. 运行容器

     docker run -d \
      --name redis \
      --restart=always \
      -p 6380:6379 \
      redis:latest   \
      --requirepass 123456
  4. 备份

    rdb备份

    # 每6小时(21600秒)内有至少1000个修改则备份
    save 21600 1000
    # 每1小时(3600秒)内有至少100个修改则备份
    save 3600 100
    # 每5分钟(300秒)内有至少10个修改则备份
    save 300 10
    # 每1分钟(60秒)内有至少10000个修改则备份
    save 60 10000

    AOF备份

    不停机从 rdb 开启 aof备份

    # 2. 动态开启AOF
    config set appendonly yes
    # 3. 将当前内存数据写入AOF文件
    bgrewriteaof
    # 是否启用AOF持久化
    appendonly yes
  5. 编排文件

    services:
     redis:
       image: redis:latest
       container_name: redis
       ports:
         - "6379:6379"
       volumes:
         - ./data:/data
         - ./conf/redis.conf:/etc/redis/redis.conf
         - ./logs:/logs
       restart: always
       command: redis-server /etc/redis/redis.conf --requirepass 123456
       networks:
         - redis_network
         
    networks:
     redis_network:
  6. 精简配置文件

    # 绑定的IP地址,0.0.0.0表示监听所有网络接口
    bind 0.0.0.0
    # 启用保护模式,只允许本地连接或已认证的连接
    protected-mode yes
    # 监听的端口号
    port 6379
    # TCP连接的最大等待队列长度
    tcp-backlog 511
    # 客户端超时时间(秒),0表示永不超时
    timeout 0
    # TCP连接保活时间(秒)
    tcp-keepalive 300
    ​
    # 是否以守护进程方式运行,no表示在前台运行
    daemonize no
    # PID文件路径
    pidfile /var/run/redis_6379.pid
    # 日志级别:debug、verbose、notice、warning
    loglevel notice
    # 日志文件路径,空字符串表示输出到标准输出
    logfile ""
    # 数据库数量
    databases 16
    # 是否是否总是显示Redis Logo
    always-show-logo no
    # 是否是否设置进程标题
    set-proc-title yes
    # 进程标题模板
    proc-title-template "{title} {listen-addr} {server-mode}"
    # 用于字符串排序的区域设置,空表示使用默认
    locale-collate ""
    ​
    # 当后台保存失败时是否停止写入操作
    stop-writes-on-bgsave-error yes
    # 是否对RDB文件进行压缩
    rdbcompression no
    # 是否对RDB文件进行校验和检查
    rdbchecksum yes
    # RDB文件名
    dbfilename dump.rdb
    # 同步后是否删除RDB文件
    rdb-del-sync-files no
    # 数据文件和持久化文件存放目录
    dir ./
    ​
    # 当主库连接失败时,从库是否仍响应客户端请求
    replica-serve-stale-data yes
    # 从库是否为只读模式
    replica-read-only yes
    # 是否启用无盘同步
    repl-diskless-sync yes
    # 无盘同步的延迟时间(秒)
    repl-diskless-sync-delay 5
    # 无盘同步支持的最大从库数量
    repl-diskless-sync-max-replicas 0
    # 无盘加载模式
    repl-diskless-load disabled
    # 从库是否禁用TCP_NODELAY
    repl-disable-tcp-nodelay no
    # 从库优先级,用于主库选举
    replica-priority 100
    ​
    # ACLACL日志的最大长度
    acllog-max-len 128
    ​
    # 内存不足时是否使用惰性删除策略(驱逐)
    lazyfree-lazy-eviction no
    # 过期过期键是否使用惰性删除
    lazyfree-lazy-expire no
    # 服务器删除操作是否使用惰性删除
    lazyfree-lazy-server-del no
    # 从库是否使用惰性删除策略刷新数据
    replica-lazy-flush no
    # 用户删除键是否使用惰性删除
    lazyfree-lazy-user-del no
    # 用户执行FLUSH操作是否使用惰性删除
    lazyfree-lazy-user-flush no
    ​
    # 是否是否调整Redis进程调整OOM分数
    oom-score-adj no
    # OOM分数调整值
    oom-score-adj-values 0 200 800
    # 是否禁用透明页(Transparent Huge Pages)
    disable-thp yes
    ​
    # 自动RDB备份配置(新增)
    # 格式:save <seconds> <changes>
    # 表示在seconds秒内有至少changes个键被修改则自动触发RDB备份
    # 每6小时(21600秒)内有至少1000个修改则备份
    save 21600 1000
    # 每1小时(3600秒)内有至少100个修改则备份
    save 3600 100
    # 每5分钟(300秒)内有至少10个修改则备份
    save 300 10
    # 每1分钟(60秒)内有至少10000个修改则备份
    save 60 10000
    ​
    # 是否启用AOF持久化
    appendonly yes
    # AOF文件名
    appendfilename "appendonly.aof"
    # AOF文件存放目录
    appenddirname "appendonlydir"
    # AOF持久化策略:always(每次写都同步)、everysec(每秒同步)、no(由操作系统决定)
    appendfsync everysec
    # 重写AOF时是否不进行appendfsync操作
    no-appendfsync-on-rewrite no
    # AOF自动重写的触发百分比
    auto-aof-rewrite-percentage 100
    # AOF自动重写的最小文件大小
    auto-aof-rewrite-min-size 64mb
    # 加载AOF文件时是否允许截断的文件
    aof-load-truncated yes
    # AOF文件是否使用RDB前缀
    aof-use-rdb-preamble yes
    # AOF文件是否启用时间戳
    aof-timestamp-enabled no
    ​
    # 慢查询日志的阈值(微秒),超过此值的命令会被记录
    slowlog-log-slower-than 10000
    # 慢查询日志的最大长度
    slowlog-max-len 128
    ​
    # 延迟监控阈值(微秒),0表示禁用
    latency-monitor-threshold 0
    # 键空间事件通知的配置,空表示禁用
    notify-keyspace-events ""
    ​
    # Hash类型使用listpack编码的最大条目数
    hash-max-listpack-entries 512
    # Hash类型使用listpack编码的最大值大小(字节)
    hash-max-listpack-value 64
    # List类型使用listpack编码的最大大小
    list-max-listpack-size -2
    # List类型的压缩深度
    list-compress-depth 0
    # Set类型使用intset编码的最大条目数
    set-max-intset-entries 512
    # Set类型使用listpack编码的最大条目数
    set-max-listpack-entries 128
    # Set类型使用listpack编码的最大值大小(字节)
    set-max-listpack-value 64
    # ZSet类型使用listpack编码的最大条目数
    zset-max-listpack-entries 128
    # ZSet类型使用listpack编码的最大值大小(字节)
    zset-max-listpack-value 64
    # HyperLogLog稀疏表示的最大字节数
    hll-sparse-max-bytes 3000
    # Stream节点的最大字节数
    stream-node-max-bytes 4096
    # Stream节点的最大条目数
    stream-node-max-entries 100
    ​
    # 是否是否启用动重新哈希
    activerehashing yes
    ​
    # 普通客户端的输出缓冲区限制
    client-output-buffer-limit normal 0 0 0
    # 从库客户端的输出缓冲区限制
    client-output-buffer-limit replica 256mb 64mb 60
    # Pub/Sub客户端的输出缓冲区限制
    client-output-buffer-limit pubsub 32mb 8mb 60
    ​
    # 服务器每秒执行后台任务的次数
    hz 10
    # 是否启用动态hz调整
    dynamic-hz yes
    # AOF重写时是否启用增量fsync
    aof-rewrite-incremental-fsync yes
    # RDB保存时是否启用增量fsync
    rdb-save-incremental-fsync yes
    ​
    # 是否启用jemalloc后台线程
    jemalloc-bg-thread yes

Frp

服务端

  1. 拉取镜像

    docker pull stilleshan/frps
  2. 添加 fr ps.ini 配置文件

    https://github.com/stilleshan/frps

    https://raw.githubusercontent.com/ruinny/frps-in-docker/master/frps.ini

    rm -rf /opt/docker-data/frps && \
    mkdir -p /opt/docker-data/frps && \
    mkdir -p /opt/docker-data/frps/conf && \
    mkdir -p /opt/docker-data/frps/log && \
    touch /opt/docker-data/frps/log/frps.log && \
    cd /opt/docker-data/frps/conf && \
    wget https://raw.githubusercontent.com/ruinny/frps-in-docker/master/frps.ini && \
    chmod +x frps.ini && \
    mv frps.ini ./frps.toml
  3. 说明

    • 配置文件存放在/var/frp/conf

    • 默认80和443端口映射到7080和7443,如需改回去的自己修改

    • 默认端口开放15000-15200 如果需要调整的请在frps.ini和docker端口中同时调整

    • 只适用于x64,不适用于arm

  4. 修改配置文件

     nano /opt/docker-data/frps/conf/frps.toml
  5. 配置文件 (frps.toml) 服务端

     # [common] is integral section
     [common]
     # A literal address or host name for IPv6 must be enclosed
     # in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
     bind_addr = 0.0.0.0
     bind_port = 7000
     ​
     # udp port to help make udp hole to penetrate nat
     bind_udp_port = 7001
     ​
     # udp port used for kcp protocol, it can be same with 'bind_port'
     # if not set, kcp is disabled in frps
     kcp_bind_port = 7000
     ​
     # specify which address proxy will listen for, default value is same with bind_addr
     # proxy_bind_addr = 127.0.0.1
     ​
     # if you want to support virtual host, you must set the http port for listening (optional)
     # Note: http port and https port can be same with bind_port
     vhost_http_port = 80
     vhost_https_port = 443
     ​
     # set dashboard_addr and dashboard_port to view dashboard of frps
     # dashboard_addr's default value is same with bind_addr
     # dashboard is available only if dashboard_port is set
     dashboard_addr = 0.0.0.0
     dashboard_port = 7500
     ​
     # dashboard user and passwd for basic auth protect, if not set, both default value is admin
     dashboard_user = dream
     dashboard_pwd = dream
     ​
     # dashboard assets directory(only for debug mode)
     # assets_dir = ./static
     # console or real logFile path like ./frps.log
     log_file = /opt/docker-data/frps/log/frps.log
     ​
     # trace, debug, info, warn, error
     log_level = info
     ​
     log_max_days = 3
     ​
     # auth token
     token = 666666
     ​
     # heartbeat configure, it's not recommended to modify the default value
     # the default value of heartbeat_timeout is 90
     # heartbeat_timeout = 90
     ​
     # only allow frpc to bind ports you list, if you set nothing, there won't be any limit
     # allow_ports = 10000-20000
     allow_ports = 15000-15200
     ​
     # pool_count in each proxy will change to max_pool_count if they exceed the maximum value
     max_pool_count = 5
     ​
     # max ports can be used for each client, default value is 0 means no limit
     max_ports_per_client = 0
     ​
     # authentication_timeout means the timeout interval (seconds) when the frpc connects frps
     # if authentication_timeout is zero, the time is not verified, default is 900s
     authentication_timeout = 900
     ​
     # if subdomain_host is not empty, you can set subdomain when type is http or https in frpc's configure file
     # when subdomain is test, the host used by routing is test.frps.com
     # subdomain_host = frps.imgki.com
     ​
     # if tcp stream multiplexing is used, default is true
     tcp_mux = true
  6. 启动镜像

     docker run -d \
       --name frps \
       -v /opt/docker-data/frps/conf/frps.toml:/frp/frps.toml \
       -p 15000-15200:15000-15200 \
       -p 7000:7000 \
       -p 7500:7500 \
       -p 7001:7001 \
       -p 10080:80 \
       -p 8443:443 \
       stilleshan/frps
  7. 启动镜像(docker-compose方式)

     git clone https://github.com/ruinny/frps-in-docker.git
     cd frps-in-docker
     docker-compose up -d
     services:
       frps:
         image: stilleshan/frps
         restart: always
         container_name: frps
         ports:
           - '7000:7000'
           - '7500:7500'
           - '7001:7001'
           - '10080:80'
           - '8443:443'
           - '15000-15200:15000-15200'
         volumes:
           - '/opt/docker-data/frps/conf/frps.toml:/frp/frps.toml'

    访问面板

     http://server:7500/

客户端

  1. 拉取镜像

     # x86_64 arm_64
     docker pull stilleshan/frpc
     # arm_64
     docker pull snowdreamtech/frpc
  2. 添加配置目录

    mkdir -p /opt/docker-data/frpc
    cd /opt/docker-data/frpc
    vim frpc.toml
  3. 配置文件 (frpc.toml) 客户端

     [common]
     server_addr = 124.222.109.240
     server_port = 7000
     token = 666666
     ​
     [ssh]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 22
     remote_port = 15050
     ​
     [1panl]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 8888
     remote_port = 15051
     ​
     # 配置域名
     custom_domains = vue.dreamrise.giize.com
  4. 启动容器镜像

     docker run -d \
       --name frpc 
       --restart=always \
       --network host \
       -v /opt/docker-data/frpc/frpc.toml:/frp/frpc.toml \
       stilleshan/frpc
  5. 编排

     services:
       frpc:
         image: stilleshan/frpc
         container_name: frpc
         network_mode: host
         restart: always
         volumes:
           - '/opt/docker-data/frpc/frpc.toml:/frp/frpc.toml'
  6. 本地基本配置示例

     [common]
     server_addr = 124.222.109.240
     server_port = 7000
     token = 666666
     ​
     [ssh]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 22
     remote_port = 15050
     ​
     [1panl]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 8888
     remote_port = 15051
     ​
     [mysql]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 3306
     remote_port = 15052
     ​
     [redis]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 6379
     remote_port = 15053
     ​
     [minio-panel]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 9001
     remote_port = 15054
     ​
     [minio-server]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 9002
     remote_port = 15055
     ​
     [gogs-panel]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 13000
     remote_port = 15056
     ​
     [gogs-server]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 10022
     remote_port = 15057
     ​
     [qinglong]
     type = tcp
     local_ip = 192.168.1.101
     local_port = 5700
     remote_port = 15060

X-ui

  1. 创建数据目录

     mkdir -p /opt/docker-data/x-ui/db
     mkdir -p /opt/docker-data/x-ui/cert
  2. 启动容器

     docker run -itd \
       --name x-ui 
       --restart=unless-stopped \
       --network=host \
       -v /opt/docker-data/x-ui/db/:/etc/x-ui/ \
       -v /opt/docker-data/x-ui/cert/:/root/cert/ \
       enwaiax/x-ui:latest
  3. 容器编排

     services:
       x-ui:
         image: enwaiax/x-ui:latest
         container_name: x-ui
         restart: unless-stopped
         network_mode: host
         volumes:
           - /opt/docker-data/x-ui/db/:/etc/x-ui/
           - /opt/docker-data/x-ui/cert/:/root/cert/
  4. 默认端口 54321

  5. 默认用户名密码 admin

Halo

  1. 容器编排

     services:
       halo:
         container_name: halo
         image: registry.fit2cloud.com/halo/halo:2.20
         restart: on-failure:3
         networks:
           halo_network:
         volumes:
           - /opt/docker-data/halo:/root/.halo2
         ports:
           - "8090:8090"
         healthcheck:
           test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
           interval: 30s
           timeout: 5s
           retries: 5
           start_period: 30s
         environment:
           # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
           - JVM_OPTS=-Xmx512m -Xms256m
         command:
           - --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo
           - --spring.r2dbc.username=root
           # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
           - --spring.r2dbc.password=123456
           - --spring.sql.init.platform=mysql
           # 外部访问地址,请根据实际需要修改
           - --halo.external-url=http://localhost:8090/
     networks:
       halo_network:

微力同步

容器编排

services:
  verysync:
    image: jonnyan404/verysync
    container_name: verysync
    restart: always
    volumes:
      - /opt/docker-data/verysync/data:/data
    ports:
      - "8886:8886"
      - "3000:3000"
      - "22037:22037/udp"
      - "22027:22027/udp"
    environment:
      - PORT=8886