docker-compose 构建 Springboot 项目
Springboot项目
配置信息
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
主要功能
计算客户端访问次数
@RestController
public class VisitorController {
@Autowired
private VisitorRepository repository;
@RequestMapping("/")
public String index(HttpServletRequest request) {
String ip=request.getRemoteAddr();
Visitor visitor=repository.findByIp(ip);
if(visitor==null){
visitor=new Visitor();
visitor.setIp(ip);
visitor.setTimes(1);
}else {
visitor.setTimes(visitor.getTimes()+1);
}
repository.save(visitor);
return "我的IP "+visitor.getIp()+" 已经被访问了"+visitor.getTimes()+" 次了.";
}
}
Dockerfile
FROM maven:3.5-jdk-8
COPY ./settings.xml /usr/share/maven/ref/
使用 maven 进行构建Springboot项目,因为构建过程中默认是从外网下载 jar 包,所以根据 官网说明,将自定义国内源镜像 setting.xml 文件放在 Dockerfile 所在目录并在 Dockerfile 内容加上 COPY ./settings.xml /usr/share/maven/ref/ 即可。
settings.xml 配置参考阿里巴巴开源镜像站
Mysql
使用 mysql/mysql-server:5.7
Web容器(Nginx)
使用 nginx:1.13
配置信息
server {
listen 80;
charset utf-8;
access_log off;
location / {
proxy_pass http://app:8080;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
access_log off;
expires 30d;
alias /app/static;
}
}
在一组 compose 的服务通讯需要使用 services 的名称进行访问
docker-compose.yml
version: '3'
services:
nginx:
container_name: v-nginx
image: nginx:1.13
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
mysql:
container_name: v-mysql
image: mysql/mysql-server:5.7
environment:
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%'
ports:
- "3306:3306"
restart: always
app:
restart: always
build: ./app
working_dir: /app
volumes:
- ./app:/app
- ~/.m2:/root/.m2
expose:
- "8080"
depends_on:
- nginx
- mysql
command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker
- ports: 使用主机端口映射容器端口
- expose: 暴露端口
- restart: always 表示如果服务启动不成功会一直尝试(重要)
- volumes: 加载本地目录下的配置文件到容器目标地址下
启动/关闭服务与测试
启动服务
docker-compose up -d
测试
打开网页 http://ip_addr
访问测试即可
关闭服务
docker-compose down
参考
https://github.com/ityouknow/spring-boot-examples
http://www.ityouknow.com/springboot/2018/03/28/dockercompose-springboot-mysql-nginx.html