1.--拉取mysql8的镜像
docker pull mysql:8
2.--查看
docker images
3.-- 利用镜像创建mysql8的容器 本机端口为 3308, 解决编码问题
docker run -p 3308:3306 --name ycmysql8 -e MYSQL_ROOT_PASSWORD=a -d mysql:8 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
4.--查看容器是否启动
docker ps -a
5.--进入容器 -it 以交互式终端进入容器
docker exec -it ycmysql8 /bin/bash
6.--登录mysql
mysql -uroot -pa
7.--创建数据库
create database yc108109res default character set = 'utf8';
show databases;
8.idea 代码修改
(1)测试类上加@ActiveProfiles("init"),多个测试类运用测试套件
package com.xrl.springbootdcitem;
import com.xrl.dao.ResFoodDao;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
/**
* @author shkstart
* @create 2022-02-27 21:04
*/
//@RunWith(SpringRunner.class)
////@SpringBootApplication
//@MapperScan("com.xrl.mappers")
@SpringBootTest
@ActiveProfiles("init")
//@RunWith(Suite.class)
/**
* 测试套件
*/
//@Suite.SuiteClasses(SpringbootdcitemApplicationTests.class)
public class ResFoodDaoTest {
@Autowired
@Qualifier("resFoodDaoItem")
private ResFoodDao resFoodDao;
@Test
public void findAllFoods() {
System.out.println(resFoodDao.findAllFoods());
}
}
(2)application-prod 是在docker容器中访问docker容器中的mysql,
需要用docker中的地址172.20.0.2:端口
server:
port: 8084
servlet:
session.timeout: 6000
contextpath: /
logging:
level:
root: debug
com:
yc: debug
org:
springframework: debug
file:
name: /tmp
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://172.20.0.2:3306/ycres?serverTimezone=UTC
username: root
password: a
type: com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 20
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM sys_user
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开 PSCache,并且指定每个连接上 PSCache 的大小
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的 Filter,去掉后监控界面 SQL 无法统计,wall 用于防火墙
filters: stat,wall
# 通过 connection-properties 属性打开 mergeSql 功能;慢 SQL 记录
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
## # 配置 DruidStatFilter
# web-stat-filter:
# enabled: true
# url-pattern: /*
# exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
# # 配置 DruidStatViewServlet
# stat-view-servlet:
# url-pattern: /druid/*
# # IP 白名单,没有配置或者为空,则允许所有访问
# allow: 127.0.0.1
# # IP 黑名单,若白名单也存在,则优先使用
# deny: 192.168.31.253
# # 禁用 HTML 中 Reset All 按钮
# reset-enable: false
# # 登录用户名/密码
# login-username: root
# login-password: 123
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
debug:
false
application是用来访问docker容器映射出来的地址所以用local host:映射端口
server:
port: 8080
servlet:
session.timeout: 60000
contextpath: /
logging:
level:
root: debug
com:
yc: debug
org:
springframework: debug
file:
path: /tmp #日志文件存到 /tmp目录下
spring:
datasource:
url: jdbc:mysql://localhost:3306/ycres?serverTimezone=UTC
username: root
password:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 20
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存时间
min-evictable-idle-time-millis: 300000
#validation-query: SELECT 1 FROM sys_user
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开 PSCache,并且指定每个连接上 PSCache 的大小
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的 Filter,去掉后监控界面 SQL 无法统计,wall 用于防火墙
filters: stat,wall
# 通过 connection-properties 属性打开 mergeSql 功能;慢 SQL 记录
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
## # 配置 DruidStatFilter
# web-stat-filter:
# enabled: true
# url-pattern: /*
# exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
# # 配置 DruidStatViewServlet
# stat-view-servlet:
# url-pattern: /druid/*
# # IP 白名单,没有配置或者为空,则允许所有访问
# allow: 127.0.0.1
# # IP 黑名单,若白名单也存在,则优先使用
# deny: 192.168.31.253
# # 禁用 HTML 中 Reset All 按钮
# reset-enable: false
# # 登录用户名/密码
# login-username: root
# login-password: 123
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启SQL语句打印
(3)创建Dockerfile文件到项目目录下
# 添加 Java 8 镜像来源
FROM java:8
# 添加参数
ARG JAR_FILE
# 添加 Spring Boot 包, JAR_FILE 参数就是从 Docker Maven 插件中指定的构建参数
ADD target/${JAR_FILE} app.jar
# 执行启动命令
ENTRYPOINT ["java","-Dspring.profiles.active=prod","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
9.打包程序
pom.xml
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.4</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>javastack/${project.name}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<dockerfile>Dockerfile</dockerfile>
</configuration>
</plugin>
</plugins>
10. 桥接
docker network create -d bridge ycnetwork
docker network connect ycnetwork mysql
docker network connect ycnetwork res
docker network inspect ycnetwork
11.测试
http://localhost:8080/
注意点:
每次重启docker bridge网络中 容器的地址可能改变.