直接进入正题:

1:首先创建一个springboot项目

2:创建一个测试用的controller:

@RequestMapping(value="/test")
@RestController
public class TestController {

    @Autowired
    private JdbcTemplate jdbcTemplate;


    @RequestMapping(value="/getvalue")
    public Map<String,Object> test(){
        return getvaue();
    }

    public Map<String,Object> getvaue(){

        String sql="SELECT * FROM person";
        return jdbcTemplate.queryForMap(sql);
    }
}

3、在项目的根目录下新建一个docker-compose.yml,文件内容:

version : '2'
services:
  mysqldbserver:
    container_name: mysqldbserver
    build:
      context: .
      dockerfile: mysqldb-dockerfile
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
      - "MYSQL_DATABASE=testdb"
      - "MYSQL_ROOT_HOST=%"
    ports:
      - "3307:3307"
    networks:
      - net-spring-db
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=20M',
          '--character-set-server=utf8',
          '--collation-server=utf8_general_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
  springappserver:
    container_name: springappserver
    build:
      context: .
      dockerfile: springapp-dockerfile
    ports:
      - "8080:8080"
    networks:
      - net-spring-db
    volumes:
      - /vol/development
    depends_on:
      - mysqldbserver
    links:
      - mysqldbserver

networks:
  net-spring-db:
    driver: bridge

docker-compose.yml的文件总引用了两个dockerfile:分别是mysql的dockerfile和springboot的dockerfile,

名字分别为:mysqldb-dockerfile、springapp-dockerfile

接下来我们在项目根目录下创建这两个dockerfile:

mysqldb-dockerfile:

FROM mysql:5.7.17

MAINTAINER xxx xx@xxx.com

ADD init.sql /docker-entrypoint-initdb.d/

文件中copy了init.sql到docker-entrypoint-initdb.d/ 文件夹下 , init.sql是一个数据库初始化脚本,内容如下:

use testdb;

CREATE TABLE person (
  id int(11) NOT NULL AUTO_INCREMENT,
  first varchar(100) NOT NULL,
  last varchar(100) NOT NULL,
  dateofbirth DATE DEFAULT null,
  placeofbirth varchar(100) not null,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into person (first,last,dateofbirth,placeofbirth) values('Dursun','KOC', STR_TO_DATE('02/10/1982', '%m/%d/%Y'),'Erzincan');

创建了一个数据表,并插入了一条记录;

我们再来看看springapp-dockerfile:

FROM java:8-jre

MAINTAINER xxx xx@xxxxx.com

VOLUME /vol/development

RUN mkdir -p /vol/development

WORKDIR /vol/development

COPY build/libs/*.jar /vol/development/app.jar

CMD ["java", "-Xmx200m", "-Djava.security.egd=file:/dev/./urandom","-jar","/vol/development/app.jar"]

上面的dockerfile中

(1)以java:8-jre作为基础镜像,因为这是一个java项目,需要jre作为运行环境;

(2)指定了挂载目录 /vol/development

 (3)创建了目录/vol/development

(4)指定了工作目录 /vol/development

(5)将打包好的java项目文件,copy到工作目录下

(6)指定容器启动之后的要执行的命令,就是启动java项目;

4、执行 :docker-compose up 

5、查看运行的容器:docker ps 

mysql和springboot都启动起来了,

6、查看mysql是否执行了Init.sql脚本,进入容器:

docker exec -it mysqldbserver bash

然后进入数据库,数据库的信息都在docker-compose.yml中都指定了,

查看有没有testdb数据库:

从图中看,是有的,然后进入数据库,查看没有生成表,和表中的数据:

数据表和数据都生成成功,那么我们的mysql服务已经启动好;

7、查看springboot项目:localhost:8080   项目启动成功;

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐