docker学习(八) docker-compose 启动一个springboot 连接mysql

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,dockerfile对应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(),只是个简单例子证明连接成功了。

上一篇 windows下使用docker

下一篇 搭建swarm集群

没有更多推荐了,返回首页