本文使用Dockerfile把springboot的jar文件构建成镜像,并且把外部配置文件挂载到了宿主机上面,方便后续更新。
username: localUser
password: 123456
server:
port: 8006
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+"}";
}
}
}
#添加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 .
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框架篇】其它文章如下,后续会继续更新。