Centos7.9 下 Docker 安装 Mysql、Nginx、Redis 命令记录

安装 Docker

yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker

Docker 安装 Nginx 1.26

mkdir -p /docker/nginx/{html,logs}

docker run -d \
--name nginx \
-p 80:80 \
--restart unless-stopped \
-v /etc/localtime:/etc/localtime:ro \
-v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/html:/usr/share/nginx/html \
-v /docker/nginx/logs:/var/log/nginx \
nginx:1.26

启动前在宿主机 /docker/nginx/ 目录创建 nginx.conf 文件,输入以下配置

 user nginx;
worker_processes 16;
worker_rlimit_nofile 200000;

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

events {
    use epoll;
    worker_connections 65535;
    multi_accept on;
}

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

    server_tokens off;

    # 日志格式
    log_format main '$remote_addr - $remote_user [$time_local] '
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$request_time"';

    access_log /var/log/nginx/access.log main buffer=32k flush=5s;

    # 性能优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 65;
    keepalive_requests 100000;

    client_max_body_size 50m;

    # open file cache
    open_file_cache max=200000 inactive=30s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 2;

    # gzip压缩
    gzip on;
    gzip_comp_level 5;
    gzip_min_length 1k;
    gzip_types
    text/plain
    text/css
    application/json
    application/javascript
    application/xml;


    # 负载均衡key(无token用IP)
    map $http_token $lb_key {
        "" $remote_addr;
        default $http_token;
    }

    # upstream后端集群
    upstream backend_cluster {
        hash $lb_key consistent;

        server 154.37.214.22:8000 max_fails=3 fail_timeout=60s;
        server 38.244.14.62:8000 max_fails=3 fail_timeout=60s;
        server 38.244.14.219:8000 max_fails=3 fail_timeout=60s;
        server 154.9.252.127:8000 max_fails=3 fail_timeout=60s;

        keepalive 256;
    }

    server {
        listen 80 reuseport backlog=65535;
        server_name _;

        # 静态页面根路径
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }

        # /viber API,强制 token
        location /viber/ {
            proxy_pass http://backend_cluster/;

            proxy_http_version 1.1;
            proxy_set_header Connection "";

            # header透传
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Token $http_token;

            # 代理超时
            proxy_connect_timeout 6s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;

            # 缓冲区设置
            proxy_buffer_size 32k;
            proxy_buffers 16 32k;
            proxy_busy_buffers_size 64k;

            # 故障切换
            proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
            proxy_next_upstream_tries 3;

            # 可选:单独访问日志
            access_log /var/log/nginx/viber_access.log main buffer=16k flush=5s;
        }
    }
}

Docker 安装 Mysql 8.0.42

mkdir -p /docker/mysql/{data,conf.d,log}

docker run -d \
--name mysql \
-p 13306:3306 \
--restart unless-stopped \
-e MYSQL_ROOT_PASSWORD='szlnv&vs&j7luiQsBDEwsNusLsEiss' \
-v /etc/localtime:/etc/localtime:ro \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf.d:/etc/mysql/conf.d \
-v /docker/mysql/log:/var/log/mysql \
mysql:8.0.42

启动前在宿主机 /docker/mysql/conf.d 目录下创建 my.cnf 文件,输入以下配置

[mysqld]

########## 基础 ##########

user = mysql
port = 3306
skip-name-resolve
skip-host-cache

datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock

########## 字符集 ##########

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

########## 时区 ##########

default-time-zone = '+8:00'

########## 连接 ##########

max_connections = 500
max_connect_errors = 1000

wait_timeout = 28800
interactive_timeout = 28800

########## 缓存 ##########

table_open_cache = 4096
table_definition_cache = 4096
thread_cache_size = 100

########## InnoDB ##########

innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 8

innodb_log_file_size = 1G
innodb_log_buffer_size = 64M

innodb_flush_method = O_DIRECT

innodb_flush_log_at_trx_commit = 1

innodb_io_capacity = 2000
innodb_io_capacity_max = 4000

innodb_read_io_threads = 8
innodb_write_io_threads = 8

########## 临时表 ##########

tmp_table_size = 256M
max_heap_table_size = 256M

########## 排序 ##########

sort_buffer_size = 4M
join_buffer_size = 4M

########## 日志 ##########

log_error = /var/lib/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 2

########## binlog(如果要主从复制开启) ##########

server-id = 1
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7

########## 安全 ##########

local_infile = 0
symbolic-links = 0

########## 兼容客户端 ##########

default_authentication_plugin = mysql_native_password


[client]

default-character-set = utf8mb4

Docker 安装 Redis 7

mkdir -p /docker/redis/{data,conf,logs}

docker run -d \
--name redis \
-p 16379:6379 \
--restart unless-stopped \
-v /docker/redis/data:/data \
-v /etc/localtime:/etc/localtime:ro \
-v /docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /docker/redis/logs:/logs \
redis:7 redis-server /usr/local/etc/redis/redis.conf

宿主机 redis.conf 配置文件内容

#################################
# 网络配置
#################################

# 监听地址
# 0.0.0.0 表示允许所有IP访问
# 如果是内网服务器可以改成具体IP
bind 0.0.0.0

# Redis 端口
port 6379

# 保护模式
# yes = 未设置密码时拒绝远程访问
protected-mode yes

# TCP连接队列
tcp-backlog 511

# 客户端空闲多少秒断开
timeout 300

# TCP keepalive
tcp-keepalive 60


#################################
# 安全配置
#################################

# Redis访问密码(必须设置)
requirepass xm4UWT09fM$kVNCUSyJK4s0ZBPPIkahG


#################################
# 进程配置
#################################

# 是否后台运行
# Docker必须为no
daemonize no

# PID文件
pidfile /var/run/redis_6379.pid


#################################
# 日志配置
#################################

# 日志级别
# debug | verbose | notice | warning
loglevel notice

# 日志文件
# Docker建议输出到stdout
logfile ""


#################################
# 数据持久化(RDB)
#################################

# 自动快照规则
# 900秒内至少1个key修改
save 900 1

# 300秒内至少10个key修改
save 300 10

# 60秒内至少10000个key修改
save 60 10000

# RDB文件名
dbfilename dump.rdb

# 数据存储目录
dir /data


#################################
# AOF 持久化
#################################

# 开启AOF
appendonly yes

# AOF文件名
appendfilename "appendonly.aof"

# AOF同步策略
# always = 每次写入
# everysec = 每秒同步(推荐)
# no = 由系统控制
appendfsync everysec

# 重写触发条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb


#################################
# 内存管理
#################################

# 最大内存(16GB服务器推荐4GB)
maxmemory 4gb

# 内存淘汰策略
# noeviction
# allkeys-lru(推荐)
# volatile-lru
# volatile-ttl
maxmemory-policy allkeys-lru


#################################
# 性能优化
#################################

# I/O线程
# Redis7支持多线程网络IO
io-threads 4
io-threads-do-reads yes


#################################
# 客户端限制
#################################

# 最大客户端连接
maxclients 10000


#################################
# 慢查询日志
#################################

# 慢查询阈值(微秒)
slowlog-log-slower-than 10000

# 保存慢查询数量
slowlog-max-len 128


#################################
# Lua脚本限制
#################################

# Lua执行超时时间
lua-time-limit 5000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注