一、环境
CentOS7 及以上(我是阿里云服务器)
Java8
SpringBoot
Mysql5.0 及以上
二、准备工作
- docker pull mysql:5.7 下载mysql5.7版本镜像
- 启动mysql容器
docker run --name simple-mysql -e MYSQL_ROOT_PASSWORD=my_sql_521 -p 3306:3306 -d mysql:5.7
- 进入容器中创建数据库和表
docker exec -it simple-mysql2 /bin/bash 进入容器
mysql -uroot -p 进入mysql交互式界面,创建库表 - 创建SpringBoot的web项目连接服务器的mysql,编写一点业务逻辑,使其可以获取到数据库中的数据。核心代码如下:
# 配置 server.port=8090 spring.datasource.username=root spring.datasource.password=my_sql_521 spring.datasource.url=jdbc:mysql://39.106.xxx.xx:3306/docker-mysql spring.datasource.driver-class-name=com.mysql.jdbc.Driver
// 启动类 @SpringBootApplication @ComponentScan @MapperScan("com.ccyang.dockerdemo.dao") public class DockerDemoApplication { public static void main(String[] args) { SpringApplication.run(DockerDemoApplication.class, args); } }
// 接口层 @RestController public class LoginController { @Autowired private UserMapper userMapper; @GetMapping("/getUser") public UserVO getUser(@RequestParam String user_name){ UserVO admin = userMapper.getUser(user_name); return admin; } }
// pojo public class UserVO { private String id; private String username; private String password; private int age;
// dao层 public interface UserMapper { @Select("select id, username, password, age from user where username = #{username}") UserVO getUser(@Param("username") String username); }
- 启动项目,访问 localhost:8090/getUser?user_name=admin,即可从服务器MySQL中获取数据。
三、编写Dockerfile
-
通过maven向springboot项目打包,上传到服务器。
-
编写dockerfile
# 基于java8镜像 FROM java:8 LABEL maintainer="ccyang<think_xxxx@163.com>" # 我将jar名字改为了app.jar,此句指 app.jar 复制到 /app/目录下,即:/app/app.jar COPY app.jar /app/ # 设置当前工作目录为 app目录,即:root@04c5cxxx:/app# WORKDIR /app # 暴露的端口 EXPOSE 8090 # 执行命令 CMD ["java","-jar","app.jar"]
-
构建镜像
docker build -t web . 注意:最后的" . "指当前目录下的Dockerfile
-
run创建容器即可
docker run --name webapp -d -p 8091:8090 web
注意: -p 8091:8090 8091是浏览器访问的端口,映射到容器的8090端口。
四、基于上面方案的改进
```
# 配置
server.port=8090
spring.datasource.username=root
spring.datasource.password=my_sql_521
# ip使用环境变量配置的方式。注意windows运行或打包时要在启动参数中配置环境变量
spring.datasource.url=jdbc:mysql://${MYSQL_PATH}:3306/docker-mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
```
SpringBoot项目中properties配置文件内容可通过符号 " ${ENV} "引用环境变量。windows和centOS都一样。
在启动容器时,通过 -e 可以指定容器中的环境变量
例如:
docker run --name webDemo -d -e MYSQL_PATH=39.106.xxx.xx -p 8091:8090 web2
五、基于上面方案的再改进
```
# 配置
server.port=8090
spring.datasource.username=root
spring.datasource.password=my_sql_521
# ip使用环境变量配置的方式。注意windows运行或打包时要在启动参数中配置环境变量
spring.datasource.url=jdbc:mysql://${MYSQL_PATH}:3306/docker-mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
```
还是上述配置,但是我不想用指定ip的方式启动容器,因此使用 --link来操作,并且mysql容器也不用再做端口映射。
docker run --name webDemo2 --link simple-mysql2 -d -e MYSQL_PATH=simple-mysql2 -p 8091:8090 web2