Docker整合JavaWeb(极简的方式)

一、环境

CentOS7 及以上(我是阿里云服务器)
Java8
SpringBoot	
Mysql5.0 及以上

二、准备工作

  1. docker pull mysql:5.7 下载mysql5.7版本镜像
  2. 启动mysql容器

    docker run --name simple-mysql -e MYSQL_ROOT_PASSWORD=my_sql_521 -p 3306:3306 -d mysql:5.7

  3. 进入容器中创建数据库和表

    docker exec -it simple-mysql2 /bin/bash 进入容器
    mysql -uroot -p 进入mysql交互式界面,创建库表

  4. 创建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);
    }
    
  5. 启动项目,访问 localhost:8090/getUser?user_name=admin,即可从服务器MySQL中获取数据。

三、编写Dockerfile

  1. 通过maven向springboot项目打包,上传到服务器。

  2. 编写dockerfile

    # 基于java8镜像
    FROM java:8
    LABEL maintainer="ccyang"
    # 我将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"]
    
  3. 构建镜像

    docker build -t web . 注意:最后的" . "指当前目录下的Dockerfile

  4. run创建容器即可

    docker run --name webapp -d -p 8091:8090 web
    注意: -p 8091:8090 8091是浏览器访问的端口,映射到容器的8090端口。

  5. 通过浏览器访问即可:39.106.xxx.xxx:8091/getUser?user_name=admin

四、基于上面方案的改进

```
# 配置
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

你可能感兴趣的:(Docker,docker)