首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Spring Boot 项目 Docker部署,并挂载配置文件到宿主机上

Spring Boot 项目 Docker部署,并挂载配置文件到宿主机上

作者头像
BUG弄潮儿
发布2021-04-12 11:19:39
发布2021-04-12 11:19:39
6.8K0
举报
文章被收录于专栏:JAVA乐园JAVA乐园
0x01:简介

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

0x02:准备一个 SpringBoot 项目

项目里配置文件内容

代码语言:javascript
复制
username: root
password: root123
server:
  port: 8006

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

代码语言:javascript
复制
package com.olive.dockerbuild;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class DockerBuildApplication {


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

}

控制器

代码语言:javascript
复制
package com.olive.dockerbuild.controller;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class  WebController{

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

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

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

}

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

编写 Dockerfile 文件

代码语言:javascript
复制
#添加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 属性

代码语言:javascript
复制
vi conf/application.yml
username: devUser
:wq

执行下面命令构建镜像

代码语言:javascript
复制
# -t 是指定镜像名称和版本号   myapp是镜像名, :后面的是版本号, . 代表指定当前目录的Dockerfile构建
docker build -t myapp:v_1.0 .

看到Successfuly 就代表构建镜像成功

0x03:启动镜像

代码语言:javascript
复制
docker run -d -p 8006:8006  --name myapp myapp:v_1.0

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

代码语言:javascript
复制
curl 127.0.0.1:8006/printUserInfo

项目里的配置文件是 localUser,现在看到的是 devUser,代表镜像里的 jar 已经使用了外部的配置文件

0x04:挂载配置文件到宿主机

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

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

代码语言:javascript
复制
docker stop myapp
docker rm myapp

修改配置文件,把配置文件里的 username 改成 prodUser

代码语言:javascript
复制
vi conf/application.yml
username: prodUser
:wq

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

代码语言:javascript
复制
docker run -d -p 8006:8006 -v /usr/springboot/docker-build/conf:/conf --name myapp myapp:v_1.0

参数描述(-p -v : 左边的参数都是宿主机,右边是容器)

  • -d守护进程的方式启动
  • -p把容器内的端口8006映射到宿主机的8006
  • -v把宿主机上的 /usr/springboot/docker-build/conf 挂载到容器的 /conf 目录上面
  • –name容器的名称
  • myapp:v_1.0指定镜像名称和版本

测试挂载配置后的效果

代码语言:javascript
复制
curl 127.0.0.1:8006/printUserInfo

看到下面的username=prodUser 代表宿主机的配置文件已经生效了。

再次修改配置文件

代码语言:javascript
复制
vi conf/application.yml
username: prodUser_good
:wq

重启容器

代码语言:javascript
复制
docker restart myapp

查看效果

看到username=prodUser_good,代表修改宿主机的配置文件后,重启 docker 容器后就生效了。

0x05:总结

1. 首先要在构建镜像的 Dockerfile 文件中启动 jar 的命令里加上

–spring.config.location=/conf/application.yml

指定使用容器里的 /conf/application.yml 作为项目的启动配置文件

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档