【SpringBoot框架篇】6.docker部署,并挂载配置文件到宿主机上面

目录

  • 简介
  • 准备一个springboot项目
    • 项目里配置文件内容
    • 编写一个web接口,用于测试重定向配置文件
    • 准备好构建镜像需要的文件
    • 编写Dockerfile文件
  • 构建镜像并运行
    • 把需要构建的文件上传到服务器
    • 修改配置文件内容
    • 启动镜像
    • 测试配置文件属性是否变化
  • 挂载配置文件到宿主机
    • 停止并删除刚刚构建的容器
    • 修改配置文件
    • 构建容器并指定配置外部文件
    • 测试挂载配置后的效果
    • 再次修改配置文件
    • 重启容器
    • 查看效果
  • 总结
  • 项目配套代码

简介

本文使用Dockerfile把springboot的jar文件构建成镜像,并且把外部配置文件挂载到了宿主机上面,方便后续更新。

准备一个springboot项目

项目里配置文件内容

username: localUser
password: 123456
server:
  port: 8006

编写一个web接口,用于测试重定向配置文件

package com.ljm.boot.dockerbuild;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class DockerBuildApplication {

    public static void main(String[] args) {
        SpringApplication.run(DockerBuildApplication.class, args);
    }

    @RestController
    public class  WebController{

        @Value("${username}")
        private String username;

        @Value("${password}")
        private String password;

        @RequestMapping("/print")
        public String printUserInfo(){
            return "User{username="+username+",password="+password+"}";
        }

    }
}

准备好构建镜像需要的文件

【SpringBoot框架篇】6.docker部署,并挂载配置文件到宿主机上面_第1张图片

编写Dockerfile文件

#添加Java启动的必要镜像
FROM  java:8
#将本地文件挂载到当前容器
VOLUME   /tmp
#复制jar文件和配置文件所在的目录到容器里
ADD  my-app.jar  /app.jar
ADD  conf       /conf
#声明需要暴露的端口
EXPOSE  8006
#配置容器启动后执行的命令,并指定使用项目外部的配置文件
ENTRYPOINT  ["java","-Xms256m","-Xmx256m","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.config.location=/conf/application.yml"]

构建镜像并运行

把需要构建的文件上传到服务器

在这里插入图片描述

修改配置文件内容

为了能确定是否使用了docker容器里外部配置文件,修改username属性

vi conf/application.yml
username: devUser
:wq

执行下面命令构建镜像

# -t 是指定镜像名称和版本号   myapp是镜像名, :后面的是版本号, . 代表指定当前目录的Dockerfile构建
docker build -t myapp:v1 .

看到Successfuly 就代表构建镜像成功
【SpringBoot框架篇】6.docker部署,并挂载配置文件到宿主机上面_第2张图片

启动镜像

docker run -d -p 8006:8006  --name myapp myapp:v1

测试配置文件属性是否变化

curl 127.0.0.1:8006/print

项目里的配置文件是localUser,现在看到的是devUser,代表镜像里的jar已经使用了外部的配置文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200504221835538.png
在这里插入图片描述

挂载配置文件到宿主机

实际生产环境,不可能把配置文件放到镜像里面,修改太麻烦,这个时候就需要把程序的配置文件挂载到宿主机的目录

停止并删除刚刚构建的容器

docker stop myapp
docker rm myapp

修改配置文件

把配置文件里的username改成prodUser

vi conf/application.yml
username: prodUser
:wq

构建容器并指定配置外部文件

docker run -d -p 8006:8006 -v /home/ljm/docker-build/conf:/conf --name myapp myapp:v1
参数 描述(-p -v : 左边的参数都是宿主机,右边是容器)
-d 守护进程的方式启动
-p 把容器内的端口8006映射到宿主机的8006
-v 把宿主机上的 /home/ljm/docker-build/conf挂载到容器的/conf目录上面
–name 容器的名称
myapp:v1 指定镜像名称和版本

测试挂载配置后的效果

curl 127.0.0.1:8006/print

看到下面的username=prodUser 代表宿主机的配置文件已经生效了.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200504224105474.png
在这里插入图片描述

再次修改配置文件

vi conf/application.yml
username: prodUser_19951224
:wq

重启容器

docker restart myapp

查看效果

看到username=prodUser19951224,代表修改宿主机的配置文件后,重启docker容器后就生效了。
在这里插入图片描述

总结

1.首先要在构建镜像的Dockerfile文件中启动jar的命令里加上
–spring.config.location=/conf/application.yml
指定使用容器里的/conf/application.yml作为项目的启动配置文件

2.使用docker run 构建容器的时候, 使用 -v 命令把/conf目录挂载到宿主机的指定位置

项目配套代码

github地址
要是觉得我写的对你有点帮助的话,麻烦在github上帮我点 Star

【SpringBoot框架篇】其它文章如下,后续会继续更新。

  • 1.搭建第一个springboot项目
  • 2.Thymeleaf模板引擎实战
  • 3.优化代码,让代码更简洁高效
  • 4.集成jta-atomikos实现分布式事务
  • 5.分布式锁的实现方式
  • 6.docker部署,并挂载配置文件到宿主机上面
  • 7.项目发布到生产环境
  • 8.搭建自己的spring-boot-starter
  • 9.dobbo入门实战
  • 10.API接口限流实战
  • 11.Spring Data Jpa实战
  • 12.使用druid的monitor工具查看sql执行性能
  • 13.使用springboot admin对springboot应用进行监控
  • 14.mybatis-plus实战

你可能感兴趣的:(springBoot)