docker 配置redis, mysql

docker 配置redis, mysql

  • 安装docker
  • 安装redis
  • 安装mysql

安装docker

  1. 更新软件包

    sudo apt update && sudo apt upgrade -y
    
  2. 安装 Docker

    curl -fsSL https://get.docker.com | sudo sh
    
  3. 启动 Docker

    sudo systemctl start docker
    sudo systemctl enable docker
    
  4. 验证安装

    docker --version
    docker run hello-world
    

安装redis

  1. 拉取 Redis 镜像
    拉取最新的 Redis 官方镜像:

    docker pull redis
    

    需要特定版本,可以使用:

    docker pull redis:7.0.12
    
  2. 运行 Redis 容器
    2.1 默认安装

    docker run -d --name my-redis -p 6330:6379 --requirepass ”6666666“ redis
    

    -d:后台运行容器
    –name my-mysql:指定容器名称
    -p 6330:6379:将 MySQL 6379端口映射到宿主机6330端口

    2.2 指定格式安装

    docker run -d --name my-redis -p 6330:6379 -v redis_data:/data --requirepass ”6666666“ redis --appendonly yes 
    

    -v /mydata/redis:/data:将数据挂载到本地/mydata/redis中
    –appendonly yes:启用 AOF 持久化,RDB默认启用
    Redis 提供两种持久化方式:RDB(快照存储) 和 AOF(日志存储),选择哪种方式取决于你的使用场景和需求。以下是对它们的比较:
    RDB:定期将 Redis 的数据 快照 存储到磁盘。 AOF:记录所有 Redis 的写操作(set、del、push 等)。
    -v /mydata/redis.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf:使用 Redis 配置文件, 内容如下:

    # RDB(快照持久化)
    # 如果 900 秒(15 分钟)内至少发生 1 次写操作,就生成快照
    save 900 1
    save 300 10
    save 60 10000
    # 开启 AOF(日志持久化)
    appendonly yes	
    # 每秒将数据写入磁盘(折中模式)always no
    appendfsync everysec
    
  3. 进入 Redis 容器

    docker exec -it my-redis redis-cli
    

    测试:

    set mykey "Hello, Redis!"
    get mykey
    

安装mysql

  1. 拉取 MySQL 镜像
    拉取最新的 MySQL 官方镜像:

    docker pull mysql
    

    需要特定版本,例如 MySQL 8.0:

    docker pull mysql:8.0
    
  2. 运行 MySQL 容器
    2.1 默认配置

    docker run -d --name my-mysql -p 3300:3306 -e MYSQL_ROOT_PASSWORD=yourpassword mysql
    

    -d:后台运行容器
    –name my-mysql:指定容器名称
    -p 3306:3306:将 MySQL 端口映射到宿主机
    -e MYSQL_ROOT_PASSWORD=yourpassword:设置 root 用户密码。

    2.2. 自行配置

    2.2.1. 启动一个测试版本,然后把他的配置文件拷贝出来

    docker run -d --name test-mysql -p 3300:3306 -e MYSQL_ROOT_PASSWORD=test -d mysql
    

    2.2.2. 创建mysql文件夹

    mkdir -p ~/mydata/mysql/{conf,data,log}
    

    2.2.3. 进入conf文件夹,创建my.cnf文件

    [mysqld]
    #Mysql服务的唯一编号 每个mysql服务Id需唯一
    server-id=1
    #服务端口号 默认3306
    port=3306
    #mysql安装根目录(default /usr)
    #basedir=/usr/local/mysql
    #mysql数据文件所在位置
    datadir=/var/lib/mysql
    #pid
    pid-file=/var/run/mysqld/mysqld.pid
    #设置socke文件所在目录
    socket=/var/lib/mysql/mysql.sock
    #设置临时目录
    #tmpdir=/tmp
    # 用户
    user=mysql
    # 允许访问的IP网段,全部网段
    bind-address=0.0.0.0
    # 跳过密码登录
    #skip-grant-tables
    #主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
    #skip-external-locking
    #只能用IP地址检查客户端的登录,不用主机名
    #skip_name_resolve=1
    #事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
    #transaction_isolation=READ-COMMITTED
    #数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
    character-set-server=utf8mb4
    #数据库字符集对应一些排序等规则,注意要和character-set-server对应
    collation-server=utf8mb4_general_ci
    #设置client连接mysql时的字符集,防止乱码
    init_connect='SET NAMES utf8mb4'
    #是否对sql语句大小写敏感,1表示不敏感
    lower_case_table_names=1
    #最大连接数
    max_connections=400
    #最大错误连接数
    max_connect_errors=1000
    #TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
    explicit_defaults_for_timestamp=true
    #SQL数据包发送的大小,如果有BLOB对象建议修改成1G
    max_allowed_packet=128M
    #MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
    #MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
    interactive_timeout=1800
    wait_timeout=1800
    #内部内存临时表的最大值 ,设置成128M。
    #比如大数据量的group by ,order by时可能用到临时表,
    #超过了这个值将写入磁盘,系统IO压力增大
    tmp_table_size=134217728
    max_heap_table_size=134217728
    #禁用mysql的缓存查询结果集功能
    #后期根据业务情况测试决定是否开启
    #大部分情况下关闭下面两项
    #query_cache_size = 0
    #query_cache_type = 0
    #数据库错误日志文件
    #log-error=/var/log/mysqld.log
    #慢查询sql日志设置
    #slow_query_log=1
    #slow_query_log_file=/var/log/mysqld_slow.log
    #检查未使用到索引的sql
    log_queries_not_using_indexes=1
    #针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
    log_throttle_queries_not_using_indexes=5
    #作为从库时生效,从库复制中如何有慢sql也将被记录
    log_slow_slave_statements=1
    #慢查询执行的秒数,必须达到此值可被记录
    long_query_time=8
    #检索的行数必须达到此值才可被记为慢查询
    min_examined_row_limit=100
    #mysql binlog日志文件保存的过期时间,过期后自动删除
    #expire_logs_days=5
    binlog_expire_logs_seconds=604800
    

    2.2.4. 启动容器

    docker run --restart=on-failure:3 -d   \
    -v ~/mydata/mysql/conf/my.cnf:/etc/my.cnf \
    -v ~/mydata/mysql/data/:/var/lib/mysql \
    -v ~/mydata/mysql/log:/var/log -p 3300:3306  \
    --name vone-mysql -e MYSQL_ROOT_PASSWORD=666666 mysql:8.0
    

    –restart=on-failure:3:当容器因错误退出时,最多尝试重启 3 次

  3. 进入 MySQL 容器

    docker exec -it my-mysql mysql -u root -p
    
  4. 创建数据库

    CREATE DATABASE mydb;
    

    如果你想使用 UTF-8 编码:

    CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
  5. 创建用户并授权
    为了从外部连接到 MySQL,需要创建一个用户并授权:

    CREATE USER 'admin'@'%' IDENTIFIED BY '666666';
    GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'%';
    FLUSH PRIVILEGES;
    
  6. 设置远程连接
    如果你希望 外部工具(如 Navicat) 连接到 MySQL,需要修改 MySQL 配置:

    docker exec -it my-mysql bash
    

    然后编辑 /etc/mysql/my.cnf 文件:

    [mysqld]
    bind-address = 0.0.0.0
    

    重启 MySQL:

    docker restart my-mysql
    

你可能感兴趣的:(环境搭建,docker,redis,mysql)