直接进入正题:
1:首先创建一个springboot项目
2:创建一个测试用的controller:
@RequestMapping(value="/test")
@RestController
public class TestController {
@Autowired
private JdbcTemplate jdbcTemplate;
@RequestMapping(value="/getvalue")
public Map test(){
return getvaue();
}
public Map 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 [email protected]
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 [email protected]
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中都指定了,
从图中看,是有的,然后进入数据库,查看没有生成表,和表中的数据:
数据表和数据都生成成功,那么我们的mysql服务已经启动好;
7、查看springboot项目:localhost:8080 项目启动成功;