docker-compose spring boot发布服务

spirngboot2+mysql8+redis+idea。
  首先这个一个分库分表的demo.所以引入的依赖会比较多,创建docker-compose时需要将该文件放到src文件同级的目录下如下

docker-compose spring boot发布服务_第1张图片
docker-compose

  • 第一步:配置mysql
services:
  mysql:
#实例的名字
    container_name: mysql
#mysql最新镜像,如果没有会自动下载
    image: mysql:latest
    #ports 对外暴露端口号3306并映射到主机端口号3306
    ports:
      - 3306:3306
#暴露3306端口号给同一网络下的其他容器
    expose:
      - 3306
#设置环境变量,配置root 密码
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
#时候总是启动,如果实例出现问题将会重启
  #  restart: always
#挂在数据卷
    volumes:
      #更具自己配置的路径修改 这是绝对路径,相对路径是docker-compose.yml 的当前路径
      #/e/docker/mysql 表示 E:/docker/mysql 这个地方自己定义
#将实例里的数据保存在主机上实现数据的备份防止实例停止造成数据的丢失
      - "/e/docker/mysql/db:/var/lib/mysql"
#自定义配置覆盖容器里的配置
      - "/e/docker/mysql/conf/my.cnf:/etc/my.cnf"
#初始化一下mysql 配置脚本可以放到该目录下
      - "/e/docker/mysql/init:/docker-entrypoint-initdb.d/"
#将连接各个实例可以使他们之间通信
    networks:
      - web1
  • 第二步redis的配置

  redis:
    container_name: redis
    image: redis:latest
    ports:
      - 6379:6379
    expose:
      - 6379
    command:
      --requirepass "123456" --appendonly yes
    volumes:
      - /e/docker/redis/data:/data
    networks:
      - web1
  • 这个没有其他特别的和mysql一样
      command: --requirepass "123456" --appendonly yes
  • 这里是设置密码,并以守护进程模式开启redis
  • 这里也是将redis 放入web1的网络里

第三步 发布app

  web:
    container_name: shardingJdbcDemo
    image: openjdk:latest
    ports:
      - 8772:8772
    volumes:
      - "./target/shardingJdbcDemo.jar:/app.jar"
    command: "java -jar app.jar"
    networks:
      - web1
    depends_on:
      - mysql
      - redis
    expose:
      - 8772
networks:
  web1:
    driver: bridge
  • 需要注意的是volumes - "./target/shardingJdbcDemo.jar:/app.jar"
  • docker-compose 读取jar的时候是相对路径,而我的docker-compose.yml 是放在项目src的同级目录因此只需要"./target/***"就能获取对应的jar包而jar包的名字需要在对应的maven配置下修改


    docker-compose spring boot发布服务_第2张图片
    jar 的名字

最后是networks

networks:
  web1:
    driver: bridge
  • 这里是配置了一个名叫web1的网络,dirver是birdge dirver有好几种感兴趣的可以自行百度查询
  • 需要注意的是networks 这个是和services平级的
需要注意的

1.   在发布web服务的时候需要发布mysql 与redis 特别是mysql 如果不在web 之前发布,app会报错这个地方通过depend_on来配置先后顺序
2.  注意数据源的配置,这个地方是个坑不注意的话会出现无法连接数据库,connection refuse的错误,需要修改成如下配置

url配置

其中我把ip 改为mysql (docker-compose里services 下的名字web,mysql,redis),这个原理不是很清楚,但是就是需要这样改。我能大概的明白他联的是mysql 这个实例的容器通过network
3.  mysql 的配置问题,我下载的是官方的镜像,在通过外部连接的时候回出现问题,root 无法连接,这时需要修改root的权限和加密方式。如下配置

#修改mysql8 的加密方式,不改的话无法登录会报错
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
use mysql;
#创建用户
create user 'houhaoran'@'%' identified by '123456';
#用户授权  所有数据库.所有权限;
grant all privileges on *.* to 'houhaoran'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
  • 这个地方我修改了root 的权限与加密方式
  • 这里我连接数据库时使用的不是root所以又创建了用户并附权限和root权限一样,在创建的时候需要将该文件放到容器里的
    /docker-entrypoint-initdb.d/ 的文件夹里,在容器启动的时候会加载该脚本



最后完整的docker-compose.yml配置
version: "3.1"
services:
  mysql:
    container_name: mysql
    image: mysql:latest
    ports:
      - 3306:3306
    expose:
      - 3306
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
  #  restart: always
    volumes:
      #更具自己配置的路径修改 这是绝对路径,相对路径是docker-compose.yml 的当前路径
      #/e/docker/mysql 表示 E:/docker/mysql 这个地方自己定义
      - "/e/docker/mysql/db:/var/lib/mysql"
      - "/e/docker/mysql/conf/my.cnf:/etc/my.cnf"
      - "/e/docker/mysql/init:/docker-entrypoint-initdb.d/"
    networks:
      - web1
  redis:
    container_name: redis
    image: redis:latest
    ports:
      - 6379:6379
    expose:
      - 6379
    command:
      --requirepass "123456" --appendonly yes
    volumes:
      - /e/docker/redis/data:/data
    networks:
      - web1
  web:
    container_name: shardingJdbcDemo
    image: openjdk:latest
    ports:
      - 8772:8772
    volumes:
      - "./target/shardingJdbcDemo.jar:/app.jar"
    command: "java -jar app.jar"
    networks:
      - web1
    depends_on:
      - mysql
      - redis
    expose:
      - 8772
networks:
  web1:
    driver: bridge


maven完整的配置



    4.0.0

    demo
    sharding-jdbc-demo
    1.0-SNAPSHOT
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.2.RELEASE
        
    
    
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-aop
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot
            spring-boot-devtools
            true
        
        
            org.projectlombok
            lombok
            1.18.4
            provided
        
        
        
        
            io.shardingsphere
            sharding-jdbc-spring-boot-starter
            3.1.0
        
        
        
        
            mysql
            mysql-connector-java
            runtime
        
        
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.0.0
        
        
        
            org.mybatis.generator
            mybatis-generator-core
            1.3.5
        
        
        
            tk.mybatis
            mapper-spring-boot-starter
            2.1.0
        
        
        
        
        
            com.alibaba
            druid
            1.1.14
        
        
        
        
            org.springframework.boot
            spring-boot-starter-test
        
        
        
        

        
            org.springframework.boot
            spring-boot-starter-data-redis
            2.1.3.RELEASE
        
        
        
        
            org.springframework.boot
            spring-boot-starter-log4j2
            2.1.3.RELEASE
        
        
        
            com.fasterxml.jackson.dataformat
            jackson-dataformat-yaml
        
        
        
            com.auth0
            java-jwt
            3.4.0
        
        

        
        
        
            com.github.pagehelper
            pagehelper-spring-boot-starter
            1.2.10
        
        
                
                    org.apache.commons
                    commons-lang3
                    3.9
                
        
        
            org.apache.poi
            poi
            3.15
        
        
            org.apache.poi
            poi-ooxml-schemas
            3.15
        
        
            org.apache.poi
            poi-ooxml
            3.15
        
        
        
            com.google.code.gson
            gson
            2.8.5
        
        
        
            com.alibaba
            fastjson
            1.2.58
        
        
            commons-io
            commons-io
            2.6
        
    
    
        shardingJdbcDemo
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                    true
                
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                
            
        
    

你可能感兴趣的:(docker-compose spring boot发布服务)