栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Docker-compose容器编排 --springboot微服务部署实战

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker-compose容器编排 --springboot微服务部署实战

Docker-compose容器编排

​ 是什么
​ Docker-Compose是Docker官方的开源项目,
负责实现对Docker容器集群的快速编排。
​ 能干嘛
​ 去哪下
​ 官网
​ https://docs.docker.com/compose/compose-file/compose-file-v3/
​ 官网下载
​ https://docs.docker.com/compose/install/

安装步骤
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version 
卸载步骤 Compose核心概念 一文件

​ docker-compose.yml

两要素

​ 服务(service)
​ 一个个应用容器实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器
​ 工程(project)
​ 由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose使用的三个步骤

​ 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
​ 使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
​ 最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

Compose常用命令
Compose常用命令
docker-compose -h                           
# 查看帮助
docker-compose up                          
# 启动所有docker-compose服务
docker-compose up -d                        
# 启动所有docker-compose服务并后台运行
docker-compose down                         
# 停止并删除容器、网络、卷、镜像。
docker-compose exec  yml里面的服务id                 
# 进入容器实例内部  docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps                      
# 展示当前docker-compose编排过的运行的所有容器
docker-compose top                     
# 展示当前docker-compose编排过的容器进程 
docker-compose logs  yml里面的服务id     
# 查看容器输出日志
docker-compose config     
# 检查配置
docker-compose config -q  
# 检查配置,有问题才有输出
docker-compose restart   
# 重启服务
docker-compose start     
# 启动服务
docker-compose stop      
# 停止服务 
Compose编排微服务 改造升级微服务工程docker_boot

​ 以前的基础版
​ SQL建表建库

 CREATE TABLE `t_user` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
                        `username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名',  
                        `password` varchar(50) NOT NULL DEFAULT '' COMMENT '密码',  
                        `sex` tinyint(4) NOT NULL DEFAULT '0' COMMENT '性别 0=女 1=男 ',  
                        `deleted` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '删除标志,默认0不删除,1删除',  
                        `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',  
                        `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表'

​ 一键生成说明
​ 改POM



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.5.6
         
    
    com.bowenxu
    docker_boot
    1.0
    docker_boot
    Demo project for Spring Boot and DockerCompose
    
        1.8
    
    


        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        



        
            com.google.guava
            guava
            23.0
        
        
            io.springfox
            springfox-swagger2
            2.9.2
        
        
            io.springfox
            springfox-swagger-ui
            2.9.2
        

        
            org.springframework.boot
            spring-boot-starter-data-redis
        
        
            org.springframework.boot
            spring-boot-starter-cache
        
        
            org.apache.commons
            commons-pool2
        
        
            redis.clients
            jedis
            3.1.0
        
        
            mysql
            mysql-connector-java
            5.1.49
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.22
        
        
            com.alibaba
            druid
            1.1.16
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.1
        






        
            commons-codec
            commons-codec
            1.10
        
        
            cn.hutool
            hutool-all
            4.6.3
        
        
            log4j
            log4j
            1.2.17
        
        
            org.projectlombok
            lombok
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            io.projectreactor
            reactor-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    




写YML

server.port=6001
# ========================alibaba.druid相关配置=====================
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.111.169:3306/db2021?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.druid.test-while-idle=false
# ========================redis相关配置=====================
spring.redis.database=0
spring.redis.host=192.168.111.169
spring.redis.port=6379
spring.redis.password=
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
  # ========================mybatis相关配置===================
mybatis.mapper-locations=classpath:mapper
@Configuration
@Slf4j
public class RedisConfig{    
      
  @Bean    
  public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory)    {        
    RedisTemplate redisTemplate = new RedisTemplate<>();        
    redisTemplate.setConnectionFactory(lettuceConnectionFactory);        
    //设置key序列化方式string        
    redisTemplate.setKeySerializer(new StringRedisSerializer());        
    //设置value的序列化方式json        
    redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());        
    redisTemplate.setHashKeySerializer(new StringRedisSerializer());        
    redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());        
    redisTemplate.afterPropertiesSet();        return redisTemplate;    
  }
} 

​ SwaggerConfig

package com.atguigu.docker.config;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.builders.RequestHandlerSelectors;import springfox.documentation.service.ApiInfo;import springfox.documentation.spi.documentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.text.SimpleDateFormat;import java.util.Date;

@Configuration
@EnableSwagger2
public class SwaggerConfig{    
  @Value("${spring.swagger2.enabled}")   
  private Boolean enabled;    
  @Bean    
  public Docket createRestApi() {        
    return new Docket(documentationType.SWAGGER_2)                
      .apiInfo(apiInfo())                
      .enable(enabled)                
      .select()                
      .apis(RequestHandlerSelectors.basePackage("com.bowenxu.docker_boot")) 
      //你自己的package                
      .paths(PathSelectors.any())                
      .build();    
  }    
  public ApiInfo apiInfo() {       
    return new ApiInfoBuilder()                
      .title("title"+"t"+new SimpleDateFormat("yyyy-MM-dd").format(new Date()))                
      .description("docker-compose")                
      .version("1.0")                
      .termsOfServiceUrl("https://www.url.com/")                
      .build();    
  }
} 

​ 新建entity
​ User

package com.bowenxu.docker_boot.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;


import java.util.Date;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private Integer id;
    private String username;
    private String password;
    private Byte sex;
    //0女1男,默认0

    private Byte deleted;
    //删除标志,默认0不删除,1删除

    private Date updateTime;

    private Date createTime;

}

​ UserDTO

package com.bowenxu.docker_boot.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;


@NoArgsConstructor
@AllArgsConstructor
@Data
@ApiModel(value = "用户信息")
public class UserDTO implements Serializable {
    @ApiModelProperty(value = "用户ID")
    private Integer id;
    @ApiModelProperty(value = "用户名")
    private String username;
    @ApiModelProperty(value = "密码")
    private String password;
    @ApiModelProperty(value = "性别 0=女 1=男 ")
    private Byte sex;
    @ApiModelProperty(value = "删除标志,默认0不删除,1删除")
    private Byte deleted;
    @ApiModelProperty(value = "更新时间")
    private Date updateTime;
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
}


​ 新建mapper
​ 新建接口UserMapper

package com.bowenxu.docker_boot.dao;

import com.bowenxu.docker_boot.entity.CommonResult;
import com.bowenxu.docker_boot.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;


@Mapper
public interface UserMapper {
    User getUserById(@Param("id")Long id);

    Integer createUser(User user);


}

​ srcmainresources路径下新建mapper文件夹并新增UserMapper.xml





    
    
        
        
        
        
        
        
        
    

    
    
        insert into t_user (username,password)
        values (#{username},#{password});