Spring Boot 項目 Docker部署,并掛載配置文件到宿主機上
點擊上方“程序員大白”,選擇“星標”公眾號
重磅干貨,第一時間送達

0x01:簡介
使用 Dockerfile 把 SpringBoot 的 jar 文件構建成鏡像, 并且把外部配置文件掛載到了宿主機上方便后續(xù)更新。
0x02:準備一個 SpringBoot 項目
項目里配置文件內容
username: root
password: root123
server:
port: 8006編寫一個 web 接口,用于測試重定向配置文件
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);
}
}
控制器
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 文件
#添加Java啟動的必要鏡像
FROM java:8
#將本地文件掛載到當前容器
VOLUME /tmp
#復制jar文件和配置文件所在的目錄到容器里
ADD my-app.jar /app.jar
ADD conf /conf
#聲明需要暴露的端口
EXPOSE 8006
#配置容器啟動后執(zhí)行的命令,并指定使用項目外部的配置文件
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
執(zhí)行下面命令構建鏡像
# -t 是指定鏡像名稱和版本號 myapp是鏡像名, :后面的是版本號, . 代表指定當前目錄的Dockerfile構建
docker build -t myapp:v_1.0 .
看到Successfuly 就代表構建鏡像成功
0x03:啟動鏡像
docker run -d -p 8006:8006 --name myapp myapp:v_1.0測試配置文件屬性是否變化
curl 127.0.0.1:8006/printUserInfo
項目里的配置文件是 localUser,現在看到的是 devUser,代表鏡像里的 jar 已經使用了外部的配置文件
0x04:掛載配置文件到宿主機
實際生產環(huán)境,不可能把配置文件放到鏡像里面,修改太麻煩,這個時候就需要把程序的配置文件掛載到宿主機的目錄
停止并刪除剛剛構建的容器
docker stop myapp
docker rm myapp修改配置文件,把配置文件里的 username 改成 prodUser
vi conf/application.yml
username: prodUser
:wq構建容器并指定配置外部文件
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指定鏡像名稱和版本
測試掛載配置后的效果
curl 127.0.0.1:8006/printUserInfo
看到下面的username=prodUser 代表宿主機的配置文件已經生效了。
再次修改配置文件
vi conf/application.yml
username: prodUser_good
:wq重啟容器
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 目錄掛載到宿主機的指定位置
推薦閱讀
國產小眾瀏覽器因屏蔽視頻廣告,被索賠100萬(后續(xù))
年輕人“不講武德”:因看黃片上癮,把網站和786名女主播起訴了
關于程序員大白
程序員大白是一群哈工大,東北大學,西湖大學和上海交通大學的碩士博士運營維護的號,大家樂于分享高質量文章,喜歡總結知識,歡迎關注[程序員大白],大家一起學習進步!

