文章目录
1.简介
本文使用Dockerfile把springboot的jar文件构建成镜像,并且把外部配置文件挂载到了宿主机上面,方便后续更新。
2.准备一个springboot项目
2.1.项目里配置文件内容
username: localUser
password: 123456
server:
port: 8006
2.2.编写一个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+"}";
}
}
}
2.3.准备好构建镜像需要的文件
2.4.编写Dockerfile文件
#添加Java启动的必要镜像
FROM openjdk: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"]
3.构建镜像并运行
3.1.把需要构建的文件上传到服务器
3.2.修改配置文件内容
为了能确定是否使用了docker容器里外部配置文件,修改username属性
vi conf/application.yml
username: devUser
:wq
执行下面命令构建镜像
# -t 是指定镜像名称和版本号 myapp是镜像名, :后面的是版本号, . 代表指定当前目录的Dockerfile构建
docker build -t myapp:v1 .
看到Successfuly 就代表构建镜像成功
3.3.启动镜像
docker run -d -p 8006:8006 --name myapp myapp:v1
3.4.测试配置文件属性是否变化
curl 127.0.0.1:8006/print
项目里的配置文件是localUser,现在看到的是devUser,代表镜像里的jar已经使用了外部的配置文件
4.挂载配置文件到宿主机
实际生产环境,不可能把配置文件放到镜像里面,修改太麻烦,这个时候就需要把程序的配置文件挂载到宿主机的目录
4.1.停止并删除刚刚构建的容器
docker stop myapp
docker rm myapp
4.2.修改配置文件
把配置文件里的username改成prodUser
vi conf/application.yml
username: prodUser
:wq
4.3.构建容器并指定配置外部文件
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 | 指定镜像名称和版本 |
4.4.测试挂载配置后的效果
curl 127.0.0.1:8006/print
看到下面的username=prodUser 代表宿主机的配置文件已经生效了.
4.5.再次修改配置文件
vi conf/application.yml
username: prodUser_19951224
:wq
4.6.重启容器
docker restart myapp
4.7.查看效果
看到username=prodUser19951224,代表修改宿主机的配置文件后,重启docker容器后就生效了。
5.关于Dockerfile中的VOLUME作用
VOLUME是指定某些目录挂载为匿名卷用的,通过执行 docker inspect myapp 可以查看挂载信息,下面的Source是宿主机的路径存储,Destination是容器里的路径,往容器的/tmp目录下写的文件会保存到Source对应的路径下
6.总结
- 首先要在构建镜像的Dockerfile文件中启动jar的命令里加上
–spring.config.location=/conf/application.yml ,指定使用容器里的/conf/application.yml作为项目的启动配置文件 - 使用docker run 构建容器的时候, 使用 -v 命令把/conf目录挂载到宿主机的指定位置**
7.项目配套代码
创作不易,要是觉得我写的对你有点帮助的话,麻烦在gitee上帮我点下 Star
【SpringBoot框架篇】其它文章如下,后续会继续更新。
- 1.搭建第一个springboot项目
- 2.Thymeleaf模板引擎实战
- 3.优化代码,让代码更简洁高效
- 4.集成jta-atomikos实现分布式事务
- 5.分布式锁的实现方式
- 6.docker部署,并挂载配置文件到宿主机上面
- 7.项目发布到生产环境
- 8.搭建自己的spring-boot-starter
- 9.dubbo入门实战
- 10.API接口限流实战
- 11.Spring Data Jpa实战
- 12.使用druid的monitor工具查看sql执行性能
- 13.使用springboot admin对springboot应用进行监控
- 14.mybatis-plus实战
- 15.使用shiro对web应用进行权限认证
- 16.security整合jwt实现对前后端分离的项目进行权限认证
- 17.使用swagger2生成RESTful风格的接口文档
- 18.使用Netty加websocket实现在线聊天功能
- 19.使用spring-session加redis来实现session共享
- 20.自定义@Configuration配置类启用开关
- 21.对springboot框架编译后的jar文件瘦身
- 22.集成RocketMQ实现消息发布和订阅
- 23.集成smart-doc插件零侵入自动生成RESTful格式API文档
- 24.集成FastDFS实现文件的分布式存储
- 25.集成Minio实现文件的私有化对象存储
- 26.集成spring-boot-starter-validation对接口参数校验
- 27.集成mail实现邮件推送带网页样式的消息
- 28.使用JdbcTemplate操作数据库
- 29.Jpa+vue实现单模型的低代码平台
- 30.使用sharding-jdbc实现读写分离和分库分表
- 31.基于分布式锁或xxx-job实现分布式任务调度
- 32.基于注解+redis实现表单防重复提交
- 33.优雅集成i18n实现国际化信息返回
- 34.使用Spring Retry完成任务的重试