当前位置:

首页 > 编程开发 > docker怎么搭建nacos+nginx+mysql+redis+springboot项目

docker怎么搭建nacos+nginx+mysql+redis+springboot项目

Docker Desktop macOS版
Docker Desktop macOS版

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

立即下载
Mac 2026-10-13
数据库 编程开发 Desktop 开发工具 服务器管理

请提前安装docker和docker-compose并自行配置镜像加速。提前说明:我的整个项目搭建其实是分的两次,第一次部署时只有:nginx+mysql+redis+springboot项目,nacos是后期添加进去自娱自乐的。A.docker-compose.yml文件version:"3"services:nginx:#服务名称,用户自定义image:nginx:latest#镜像版本ports:-80:80#暴露端口volumes:#挂载-/root/nginx/html:/usr/share/n

本文目录

    请提前安装docker和docker-compose并自行配置镜像加速。 提前说明:我的整个项目搭建其实是分的两次,第一次部署时只有:nginx+mysql+redis+springboot项目,nacos是后期添加进去自娱自乐的。

    A.docker-compose.yml文件

    version: "3"
    services:
      nginx: # 服务名称,用户自定义
        image: nginx:latest  # 镜像版本
        ports:
          - 80:80  # 暴露端口
        volumes: # 挂载
          - /root/nginx/html:/usr/share/nginx/html
          - /root/nginx/nginx.conf:/etc/nginx/nginx.conf
        privileged: true # 这个必须要,解决nginx的文件调用的权限问题
      mysql:
        image: mysql:5.7.27
        ports:
          - 3306:3306
        environment: # 指定用户root的密码
          - MYSQL_ROOT_PASSWORD=
      redis:
        ports:
          - 6379:6379
        image: redis:latest
      vueblog:
        image: vueblog:latest
        build: . # 表示以当前目录下的Dockerfile开始构建镜像
        ports:
          - 81:81
        depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
          - mysql
          - redis
    
    
      nacos1:
        hostname: nacos1
        container_name: nacos1
        image: nacos/nacos-server:latest
        volumes:
          # 需要添加mysql8的插件
          #- ./nacos/plugins/mysql/:/home/nacos/plugins/mysql/
          # 把日志文件映射出来
          - /root/nacos1:/home/nacos/logs
          # 把配置文件映射出来
          - /root/nacos1/custom.properties:/home/nacos/init.d/custom.properties
    
        environment: # 设置环境变量,相当于docker run命令中的-e
          - JVM_XMS=512m
          - JVM_XMX=512m
          - JVM_XMN=128m
          #- MODE=standalone   #单机版
        ports:
          - "8848:8848"
        env_file:
          # 集群配置文件
          - /root/nacos1/nacos-hostname.env
        restart: always
        depends_on:
          - mysql

    B.springboot配置(自己的项目)

     配置中的mysql和redis配置都是用的服务名而不是ip地址

    server:
      port: 81
    
    
    spring:
      servlet:
        multipart:
          max-file-size: 10MB
          max-request-size: 10MB
      profiles:
        active: dev
      # mysql 配置
      datasource:
          url: jdbc:mysql://mysql:3306/blog4?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
          username: 
          password: 
    #      schema: classpath:springbootsecurityauth.sql
          sql-script-encoding: utf-8
          initialization-mode: always
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
          # 初始化大小,最小,最大
          initialSize: 1
          minIdle: 3
          maxActive: 20
         # 配置获取连接等待超时的时间
          maxWait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          timeBetweenEvictionRunsMillis: 60000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          minEvictableIdleTimeMillis: 30000
          validationQuery: select 'x'
          testWhileIdle: true
          testOnBorrow: false
          testOnReturn: false
          # 打开PSCache,并且指定每个连接上PSCache的大小
          poolPreparedStatements: true
          maxPoolPreparedStatementPerConnectionSize: 20
          # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 ,slf4j
          filters: stat,wall,slf4j
          # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    
      redis:
        database: 6
        host: redis
        port: 6379
        timeout: 5000s  # 连接超时时长(毫秒)
        jedis:
          pool:
            max-active: 20 #连接池最大连接数(使用负值表示没有限制)
            max-idle: 8  #连接池中的最大空闲连接
            max-wait: -1s #连接池最大阻塞等待时间(使用负值表示没有限制)
            min-idle: 0  #连接池中的最小空闲连接
        password:  #rootroot

    C.Dockerfile文件

    FROM java:8
    EXPOSE 81
    ADD vueblog.jar app.jar
    RUN bash -c 'touch /app.jar'
    ENTRYPOINT ["java", "-jar", "/app.jar"]

     D.打包springboot项目并命名为配置中的服务名

    E.在对应目录下创建文件夹或文件

          - /root/nginx/html
          - /root/nginx/nginx.conf

    #user  root;
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
       #这里配置nacos的ip:端口,因为nginx和nacos在同一个网络下,这里可以用服务名访问
       upstream nacos {
            server nacos1:8848 weight=1 max_fails=2 fail_timeout=10s;
            #server nacos2:8848 weight=1 max_fails=2 fail_timeout=10s;
            #server nacos3:8848 weight=1 max_fails=2 fail_timeout=10s;
        }
    
        server {
            listen       80;
            server_name  localhost;
    
            location / {
                root   /usr/share/nginx/html/front;
                try_files $uri $uri/ /index.html last; # 别忘了这个哈
                index  index.html index.htm;
            }
    
           location /admin {
    	    alias /usr/share/nginx/html/admin;
    	    expires  1d;
    	    index index.html;
    	    autoindex on;
            }
    
            location /nacos {
                proxy_pass   http://nacos;
                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 REMOTE-HOST $remote_addr;
                add_header X-Cache $upstream_cache_status;
                add_header Cache-Control no-cache;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

           - /root/nacos1
          # 把配置文件映射出来
          - /root/nacos1/custom.properties

    #spring.security.enabled=false
    #management.security=false
    #security.basic.enabled=false
    #nacos.security.ignore.urls=/**
    #management.metrics.export.elastic.host=http://localhost:9200
    # metrics for prometheus
    management.endpoints.web.exposure.include=*
    
    # metrics for elastic search
    #management.metrics.export.elastic.enabled=false
    #management.metrics.export.elastic.host=http://localhost:9200
    
    # metrics for influx
    #management.metrics.export.influx.enabled=false
    #management.metrics.export.influx.db=springboot
    #management.metrics.export.influx.uri=http://localhost:8086
    #management.metrics.export.influx.auto-create-db=true
    #management.metrics.export.influx.consistency=one
    #management.metrics.export.influx.compressed=true

     - /root/nacos1/nacos-hostname.env

    配置nacos的数据库信息

    #nacos dev env
    PREFER_HOST_MODE=hostname
    NACOS_SERVERS=nacos1:8848
    MYSQL_SERVICE_HOST=mysql
    MYSQL_SERVICE_DB_NAME=nacos
    MYSQL_SERVICE_PORT=3306
    MYSQL_SERVICE_USER=
    MYSQL_SERVICE_PASSWORD=
    JVM_XMS=512m
    JVM_XMX=512m
    JVM_XMN=256m
    JVM_MS=64m
    JVM_MMS=128m

     最后的目录结构

    docker怎么搭建nacos+nginx+mysql+redis+springboot项目

    先把mysql实例运行起来(千万不要直接docker-compose up -d把所有的实例都运行起来)

    docker-compose up -d mysql

    F. 由于我的nacos是后期添加的,所以可以提前在mysql容器中添加好nacos数据库再启动(如果你没有数据库请提前添加)

    启动

    docker-compose up

    停止

    docker-compose down
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Docker MySQL nginx
    相关文章 更多
    navicat导入数据库步骤详解及常见问题处理教程
    navicat导入数据库步骤详解及常见问题处理教程

    详解Navicat导入数据库的标准步骤,涵盖SQL脚本执行与CSV数据导入两种核心场景。针对导入过程中常见的字符集乱码、主键冲突及外键约束错误,提供具体的设置方法与修复建议,确保数据迁移准确无误。

    SQL主键约束和唯一约束有什么区别
    SQL主键约束和唯一约束有什么区别

    深入理解SQL PRIMARY KEY与UNIQUE约束的区别。文章从行标识与重复限制的目标出发,详解主键的非空特性、外键引用角色以及多数据库对NULL值的处理差异。结合users表实战示例,指导开发者如何根据字段稳定性与业务语义合理选择约束类型,避免设计误区。

    SQL约束有哪些类型及作用
    SQL约束有哪些类型及作用

    刚开始设计关系型数据库?了解PRIMARY KEY、FOREIGN KEY、UNIQUE、NOT NULL、CHECK、DEFAULT等约束的作用、语法和排错方法。本文以PostgreSQL语法为主,结合用户订单场景,清晰展示如何防止脏数据并处理常见约束冲突。

    SQL游标常见错误排查:死锁与资源未释放问题
    SQL游标常见错误排查:死锁与资源未释放问题

    深入解析SQL游标导致的死锁与资源未释放问题。通过PostgreSQL与MySQL语法对比,展示如何识别长事务持锁、分析锁等待链,并提供短事务提交、异常清理及批量处理的最佳实践,确保数据库连接与锁资源及时释放。

    SQL中怎么创建和删除约束
    SQL中怎么创建和删除约束

    后端开发者在维护数据库时,常需对现有表添加主键、唯一或外键约束。若直接执行ADD CONSTRAINT,往往因存量数据不合规导致报错。本文详解操作前的数据清洗步骤、标准SQL语法及MySQL等特殊写法,帮助你在生产环境安全完成结构变更。

    docker创建容器后无法启动的排查与解决方法
    docker创建容器后无法启动的排查与解决方法

    Docker容器创建后无法启动或立即退出?本文详解如何通过docker logs查看报错、检查端口占用及修正配置文件,助你快速解决容器启动难题。

    SQL分组统计查询:GROUP BY与HAVING子句用法示例
    SQL分组统计查询:GROUP BY与HAVING子句用法示例

    针对 SQL 初学者的分组统计实战指南。深入解析 GROUP BY 分组机制、WHERE 与 HAVING 的执行时机差异,以及 COUNT 函数对 NULL 值的处理逻辑。通过具体代码示例演示如何正确筛选聚合结果,并排查因 JOIN 连接导致的统计数据异常,提升报表准确性。

    SQL Server与MySQL游标基本语法及完整代码示例
    SQL Server与MySQL游标基本语法及完整代码示例

    本文详细对比SQL Server和MySQL中游标的基本用法。从DECLARE声明到FETCH遍历,再到CLOSE关闭与DEALLOCATE/Handler清理,解析两者在语法结构、变量接收及异常处理上的核心差异。通过标准代码示例展示如何安全使用游标,避免资源泄漏,适用于需要进行数据库存储过程开发或跨平台迁移的开发者。

    SQL多表连接区别:INNER JOIN与LEFT JOIN的使用场景
    SQL多表连接区别:INNER JOIN与LEFT JOIN的使用场景

    深入解析SQL中INNER JOIN与LEFT JOIN的核心区别。通过users和orders表实例,展示匹配行保留与NULL补位机制,重点讲解ON与WHERE子句中放置右表过滤条件的不同后果,提供防止LEFT JOIN退化的实战技巧及行数异常排查步骤。

    SQL CHECK约束的用法与取值范围限制
    SQL CHECK约束的用法与取值范围限制

    深入理解 SQL CHECK 约束在 PostgreSQL、MySQL 等数据库中的实现差异。文章通过订单业务场景,讲解如何定义单列范围与多列逻辑约束,分析 NULL 值对布尔条件的影响,并提供修改已有表结构时的安全操作建议,帮助开发者构建更健壮的数据完整性防线。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?