目錄
簡介
本文使用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+"}";
}
}
}
準備好構建鏡像需要的文件
編寫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 就代表構建鏡像成功
啓動鏡像
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框架篇】其它文章如下,後續會繼續更新。