docker-compose 启动一个springboot 连接mysql
使用docker-compose启动一个springboot应用连接一个docker启动的mysql,docker-compose的安装很简单,可参考官方安装docker-compose, springboot例子在github源码 【learn2】模块
1 构建springboot工程,这里用gradle作为构建工具,运行gradle task打成一个jar包,maven方法类似,就不介绍了。
2 编写springboot的dockerfile, 具体的意思可参阅相关资料,也不介绍了。注意ADD的就是我们上一步打成的Jar包,与dockerfile放一个目录就好了。
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD learn2-1.0-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
3 编写docker-compose.yml,与jar包和dockerfile放同一目录。
先说mysql的配置,直接从docker hub下载,image
对应的就是docker hub的镜像, ports
对应端口映射,与docker -p差不多一个意思,environment
配置mysql创建的库,root的密码,还有允许访问的IP配为%,restart
每次都重新启动。
再说springboot工程的配置,context,dockerfil
e对应dockerfile的位置,ports端口映射,
volumes
表示将物理机的当前目录映射到docker虚拟机/vol/development
里面,depends_on
依赖mysql
控制容器启动顺序让mysql
先启。
version : '2'
services:
learn2:
build:
context: .
dockerfile: dockerfile
ports:
- "8080:8080"
volumes:
- .:/vol/development
depends_on:
- mysql
mysql:
image: docker.io/mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: '%'
restart: always
4 注意的一点,第一步打jar包构建的springboot工程application.yml
中,mysql的连接方式使用mysql的镜像名而不是ip。
spring:
datasource:
url: jdbc:mysql://mysql:3306/test?characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
jpa:
database: MYSQL
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate:
dialect : org.hibernate.dialect.MySQL5Dialect
5 启动 在docker-compose.yml
目录下运行 docker-compose up
,如果后台运行加一个-d
,会发现mysql
先从docker hub
下载并启动,然后启动springboot工程,OK,可以使用springboot访问mysql了,springboot的例子里 我只注入了一个Datasource
,输出了一个toString()
,只是个简单例子证明连接成功了。