前期准备工作
1、版本说明
- idea 2019
- docker 19.03.1
- ubunt 18
2、安装docker 参照
https://www.jianshu.com/nb/39832904
3、配置docker远程连接端口
# 登录远程服务器 修改 当前操作是ubuntu18
vim /lib/systemd/system/docker.service
# 修改ExecStart这行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
# 重新加载配置文件
systemctl daemon-reload
# 重启服务
systemctl restart docker.service
# 查看端口是否开启
netstat -nlpt
注: 如果是云服务器记得打开开启设置的端口
4、 Idea安装插件
5、连接远程docker
6、docker图形界面
创建SpringBoot项目
1、整体工程结构图
2、pom.xml
1.8
2.1.5
2.0.1
1.1.20
3.2.0
org.springframework.boot
spring-boot-starter-data-redis
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-configuration-processor
true
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.starter.version}
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus.starter.version}
org.projectlombok
lombok
true
3、application.yml
spring:
datasource:
# # 初始化线程池数量 最大数 最小数
# 修改成你自己的ip地址
url: jdbc:mysql://你自己的IP地址:3308/db_order?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 驱动包 8.0以上的配置
# =========== durid 连接池配置===========
hikari:
# 是客户端等待连接池连接的最大毫秒数
connection-timeout: 30000
# 是允许连接在连接池中空闲的最长时间
minimum-idle: 10
# 配置最大池大小
maximum-pool-size: 65
# 是允许连接在连接池中空闲的最长时间(以毫秒为单位)
idle-timeout: 60000
# 池中连接关闭后的最长生命周期(以毫秒为单位)
max-lifetime: 600000
# 配置从池返回的连接的默认自动提交行为。默认值为true。
auto-commit: true
# 连接池的名称
pool-name: MyHikariCP
leak-detection-threshold: 5000
mybatis-plus:
mapper-locations: classpath:/mappers/**/*.xml
typeAliasesPackage: com.vp.docker.*.entity
global-config:
db-config:
#主键类型
id-type: auto
#驼峰下划线转换
table-underline: true
logic-delete-value: 1
logic-not-delete-value: 0
configuration:
#配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
map-underscore-to-camel-case: true
cache-enabled: false
server:
port: 8080
servlet:
context-path: /api
4、编写DockerDemoApplication
@SpringBootApplication
@MapperScan("com.vp.docker.mapper")
public class DockerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(DockerDemoApplication.class, args);
}
}
5、创建Entity
@Data
@TableName("t_discount")
public class Discount {
@TableId(type= IdType.AUTO)
private Integer id;
private BigDecimal discount;
private String name;
}
6、创建DiscountMapper
# 继承 Mytabis Plus的基类
public interface DiscountMapper extends BaseMapper {
}
7、创建OrderServiceImpl
@Service
public class OrderServiceImpl implements OrderService {
@Resource
DiscountMapper discountMapper;
@Override
public IPage getDiscountList(int page, int size) throws Exception {
IPage pageDiscount = discountMapper.selectPage(new Page<>(page, size), null);
return pageDiscount;
}
}
8、创建OrderController
@RestController
@RequestMapping("/order")
public class OrderController {
@Resource
OrderService orderService;
@RequestMapping("/discounts/{page}/{size}")
public IPage discount(@PathVariable int page, @PathVariable int size) throws Exception {
return orderService.getDiscountList(page, size);
}
}
9、docker-compose.yml
version: "3.7"
services:
app-db:
container_name: db-order
image: mysql:5.7.22
volumes:
- /opt/mysql/data:/var/lib/mysql
ports:
- "3308:3306"
restart: always
command:
# 防止低版本的连接客服报错的问题
--default-authentication-plugin=mysql_native_password
# 设置数据库的编码
--character-set-server=utf8mb4
# 设置数据库默认的排序方式
--collation-server=utf8mb4_general_ci
# 解决低版本不允许时间字段 not null
--explicit_defaults_for_timestamp=true
# Linux 表名区分大小写 1 表示不区分大小写
--lower_case_table_names=1
# 如果报错 去掉该行,主要是解决5.7group by语法错误的情况
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
environment:
# 初始化数据库密码
MYSQL_ROOT_PASSWORD: root
# 初始化数据库的名字
MYSQL_DATABASE: db_order
# 时区
TZ: Asia/Shanghai
app:
container_name: app-container
build: .
restart: always
ports:
- 9100:8080
depends_on:
- app-db
10、Dockerfile
官方镜像都是基于openjdk所以自己造了一个
FROM ubuntu
# java相关变量名
# 根据你自己的版本修改成对应的
ENV java jdk-8u221-linux-x64.tar.gz
ENV jdk jdk1.8.0_221
ADD ./${java} /usr/local/java/
# 设置java环境
ENV JAVA_HOME /usr/local/java/${jdk}
ENV CLASSPATH $JAVA_HOME/lib;$JAVA_HOME/jre/lib
ENV PATH $PATH:$JAVA_HOME/bin
# 上级目录的target
COPY ./target/*.jar app.jar
# 启动容器的时候 启动tomcat
ENTRYPOINT ["java","-jar","app.jar"]
编辑配置
[图片上传失败...(image-66dc5-1568986386529)]
11、将springboot工程打包
mvn install -Dmaven.test.skip=true
**或者IDEA工具打包
12、点击运行
13、连接Docker容器的数据库导入数据
-- ----------------------------
-- Table structure for t_discount
-- ----------------------------
DROP TABLE IF EXISTS `t_discount`;
CREATE TABLE `t_discount` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`discount` decimal(9,1) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of t_discount
-- ----------------------------
BEGIN;
INSERT INTO `t_discount` VALUES (1, 9.5, '95折');
INSERT INTO `t_discount` VALUES (2, 8.0, '8折');
COMMIT;