Docker部署SpringBoot應用的實現步驟
前言
部署項目時可能會需要依賴於node.js、Redis、RabbitMQ、MySQL等,這些服務部署時所需要的函數庫、依賴項各不相同,甚至會有沖突。給部署帶來瞭極大的困難。而Docker確巧妙的解決瞭這些問題,Docker為瞭解決依賴的兼容問題的,采用瞭兩個手段:
- 將應用的Libs(函數庫)、Deps(依賴)、配置與應用一起打包
- 將每個應用放到一個隔離容器去運行,避免互相幹擾
本文將講解如何使用Docker來部署我們平時用SpringBoot開發的項目:
Dockerfile
什麼是 Dockerfile?
Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含瞭一條條構建鏡像所需的指令和說明。
Dockerfile語法
構建自定義的鏡像時,並不需要一個個文件去拷貝,打包。
我們隻需要告訴Docker,我們的鏡像的組成,需要哪些BaseImage、需要拷貝什麼文件、需要安裝什麼依賴、啟動腳本是什麼,將來Docker會幫助我們構建鏡像。
而描述上述信息的文件就是Dockerfile文件。
Dockerfile就是一個文本文件,其中包含一個個的指令(Instruction),用指令來說明要執行什麼操作來構建鏡像。每一個指令都會形成一層Layer。
打包SpringBoot項目
準備項目:
項目端口
server.port=8080
在templates文件夾下新建index.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Docker部署SpringBoot應用</title> </head> <body> <h1>Docker部署SpringBoot應用</h1> <img src="/static/img/2.jpg" alt="" width="100%"> </body> </html>
定義主頁Controller,跳轉到index
@Controller public class indexController { @RequestMapping("/") public String index(){ return "index"; } }
在本地預覽效果:
在本地將SpringBoot應用打包成jar
準備maven-compiler-plugin插件
<build> <!--編譯打包後的文件包名--> <finalName>app</finalName> <plugins> <plugin> <!--GAV坐標(G組織id,A項目id,V版本號)--> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <!--配置: 一般而言,target與source是保持一致的,但是,有時候為瞭讓程序能在其 他版本的jdk中運行(對於低版本目標jdk,源代碼中不能使用低版本jdk中不 支持的語法),會存在target不同於source的情況--> <configuration> <!--源代碼使用的JDK版本--> <source>1.8</source> <!-- 需要生成的目標class文件的編譯版本 --> <target>1.8</target> <!-- 字符集編碼,防止中文亂碼 --> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
maven是個項目管理工具,如果不告訴它代碼要使用什麼樣的jdk版本編譯,它就會用編譯插maven-compiler-plugin默認的jdk版本來處理,這樣就容易出現版本不匹配的問題,以至於可能導致編譯不通過的問題。例如代碼中要是使用上瞭Java8的新特性,比如函數式編程,但是maven在編譯的時候使用的是Java7,那這一段代碼是完全不可能編譯成.class文件的。為瞭避免出現這種情況,在構建maven項目的時候,我習慣性第一步就是配置maven-compiler-plugin插件,指定項目源碼的jdk 版本,編譯後的 jdk 版本,以及編碼方式。
然後執行clean,最後執行package進行項目打包
出現BUILD SUCCESS說明打包成功瞭
打包成功後會出現target文件夾,目錄下就會有剛剛打包的jar包
準備jar包和Dockerfile
復制jar到桌面或自定義位置,在本地創建編寫Dockerfile文件(註:名字必須為Dockerfile,去掉後綴名)
編寫Dockerfile
Dockerfile指令
FROM java:8-alpine COPY ./app.jar /tmp/app.jar ENTRYPOINT java -jar /tmp/app.jar
Dockerfile說明
FROM java:8-alpine:
基於java8構建鏡像,默認構建java鏡像需要安裝配置環境變量,而java:8-alpine這個鏡像已經幫我們把前面的步驟都做完瞭
COPY ./app.jar /tmp/app.jar
復制jar包
ENTRYPOINT java -jar /tmp/app.jar
入口命令
使用工具將jar和Dockerfile上傳到服務器
上傳位置看個人,我存放的位置:/tmp/docker
cd tmp mkdir docker
選擇上傳文件
上傳到/tmp/docker
目錄下
構建鏡像
進入上傳文件的目錄:cd /tmp/docker
,輸入ls
查看文件
輸入命令構建鏡像
docker build -t test:1.0 .
格式:docker build -t 鏡像名稱:版本號 Dockerfile所在目錄路徑
命令說明:
build
:docker的二級命令
- 構建鏡像
-t
- -名稱: 一般的鏡像名稱格式:名稱:版本號(
test:1.0
)
.
- Dockerfile所在目錄,因為我們已經進入瞭Dockerfile所在的目錄,
.
代表當前目錄
可以看到構建鏡像的時候會以我們編寫Dockerfile的三條命令分為3個步驟執行
查看鏡像
查看Docker中的鏡像命令:
docker images
可以看到我們自定義鏡像test
創建並運行容器
運行Docker鏡像命令:
docker run --name springboot -p 8080:8080 -d test:1.0
命令說明:
docker run
: docker二級命令
- 創建並運行容器
--name
- 定義容器名稱,後面跟上容器名稱(
springboot
)
-p
端口映射
- 左邊端口為Linux的端口 ,右邊為容器的端口號
- 將linux端口映射在容器端口號上,這樣訪問linux端口等於訪問容器端口號
-d
- 後臺運行容器 ,否則退出之後容器就會停止運行
test:1.0
–>鏡像名稱
- 選擇自定義鏡像
test
的1.0版本來創建容器
創建並運行容器成功!
查看正在運行的鏡像
正在運行的鏡像命令
docker ps
瀏覽器訪問服務器的8080端口
手機訪問:
查看日志
查看容器日志命令
docker logs -f springboot
說明:
查看容器日志但是不是實時更新,想要查看新的日志還需要重復運行
docker logs + 容器名稱
實時更新日志
docker logs -f + 容器名稱
Docker部署SpringBoot應用教程結束!
到此這篇關於Docker部署SpringBoot應用的文章就介紹到這瞭,更多相關Docker部署SpringBoot應用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- springboot中的dockerfile使用
- maven-compiler-plugin版本指定方式
- Springboot服務Docker化自動部署的實現方法
- idea整合docker快速部署springboot應用的詳細過程
- idea集合docker實現鏡像打包一鍵部署