docker-compose一键安装redis+mysql+rabbitmq,妈妈再也不用担心我不会安装了

文章目录

  • 创建目录结构
  • 编写my.cnf文件
  • 编写redis.conf文件
  • 编写 docker-compose.yml 文件
  • 创建并启动容器

创建目录结构

docker/docker-compose.yml
docker/mysql/data
docker/mysql/my.cnf
docker/redis/data
docker/redis/redis.conf

编写my.cnf文件

[client]
 port = 3306
 socket = /var/lib/mysql/data/mysql.sock
[mysqld]
 # 针对5.7版本执行group by字句出错问题解决
 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
 # 一般配置选项
 basedir = /var/lib/mysql
 datadir = /var/lib/mysql/data
 port = 3306
 socket = /var/lib/mysql/data/mysql.sock
 lc-messages-dir = /usr/share/mysql # 务必配置此项,否则执行sql出错时,只能显示错误代码而不显示具体错误消息
 character-set-server=utf8
 back_log = 300
 max_connections = 3000
 max_connect_errors = 50
 table_open_cache = 4096
 max_allowed_packet = 32M
 #binlog_cache_size = 4M
 max_heap_table_size = 128M
 read_rnd_buffer_size = 16M
 sort_buffer_size = 16M
 join_buffer_size = 16M
 thread_cache_size = 16
 query_cache_size = 64M
 query_cache_limit = 4M
 ft_min_word_len = 8
 thread_stack = 512K
 transaction_isolation = REPEATABLE-READ
 tmp_table_size = 64M
 #log-bin=mysql-bin
 long_query_time = 6
 server_id=1
 innodb_buffer_pool_size = 256M
 innodb_thread_concurrency = 16
 innodb_log_buffer_size = 16M

编写redis.conf文件

文件可以直接去官网上下载,根据版本下载对应的文件docker-compose一键安装redis+mysql+rabbitmq,妈妈再也不用担心我不会安装了_第1张图片
然后需要修改下面几项语句:

daemonize no     ## 若使用开机启动,生成pid,该项必须设置为诶yes,否则redis将不能够正常执行开机启动(systemctl start redis,执行后一直卡着,直到超时)
#bind 127.0.0.1  ##注释掉,允许所有其他ip访问,真实使用最好坐下限制,只允许某些主机访问
protected-mode no  ## 允许其他机器上的客户端连接当前redis,配置文件设置该项,则开机启动处就可以去掉--protected no 
requirepass root  ##设置密码

这里有个坑,通常单独下载redis都是把守护进程开启,但是这里须设置为no,因为daemonize yes,他的作用是开启守护进程模式,在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。但是在后面的命令中“-d”选项也是开启daemonize,只不过这是docker自家的方式。所以会产生冲突,这也是很多人不能正常启动的原因(当时在这个坑里呆了好久)

编写 docker-compose.yml 文件

version: '3'
services:
  mysql:
    hostname: mysql
    image: mysql:5.7.26
    # network_mode: "host" # 如果需要容器使用宿主机IP(内网IP),则可以配置此项
    container_name: mysql # 指定容器名称,如果不设置此参数,则由系统自动生成
    restart: always # 设置容器自启模式
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 设置utf8字符集
    environment:
      - TZ=Asia/Shanghai # 设置容器时区与宿主机保持一致
      - MYSQL_ROOT_PASSWORD=root # 设置root密码
    volumes:
       - /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
       - /usr/local/docker/mysql/data:/var/lib/mysql/data # 映射数据库保存目录到宿主机,防止数据丢失
       - /usr/local/docker/mysql/my.cnf:/etc/mysql/my.cnf # 映射数据库配置文件
    ports:
        - "3388:3306"
  
  redis:  
    hostname: redis
    image: redis:5.0.4
    container_name: redis
    restart: always
    command: redis-server /etc/redis.conf # 启动redis命令
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
      - /usr/local/docker/redis/data:/data
      - /usr/local/docker/redis/redis.conf:/etc/redis.conf
    ports:
        - "6399:6379"
        
  rabbitmq:
    image: rabbitmq:management-alpine
    container_name: rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=xxxx
      - RABBITMQ_DEFAULT_PASS=xxxx
    restart: always
    ports:
      - "15672:15672"
      - "5678:5672"
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"
        

上面文件须注意两点:

  1. volumes下的映射文件及文件夹须根据自己的目录结构
  2. 映射端口中开启安全组,且不与其他端口冲突
  3. 其中RABBITMQ_DEFAULT_USER为用户名,RABBITMQ_DEFAULT_PASS为用户密码,15672为rabbitmq的web管理界面端口,5672为rabbitmq的服务端口。

创建并启动容器

docker-compose -f docker-compose.yml up -d

up选项启动容器,-d选项以守护模式运行,镜像如果没有,docker会先拉取镜像,有则直接创建并启动容器,注意文件运行前不能有其同名容器,还有须注意防火墙设置

  • 运行成功界面
    docker-compose一键安装redis+mysql+rabbitmq,妈妈再也不用担心我不会安装了_第2张图片

你可能感兴趣的:(JavaWeb)