一. 應用場景
假設現在我們有一個單獨的基於Spring Boot開發的應用,如何將其部署到Docker容器上,並能正確的訪問到呢?這裏有兩種方式:
- 使用Maven插件(docker-maven-plugin)將Spring Boot應用打包爲Docker Image,並上傳到私有鏡像倉庫Docker Registry
- 使用Dockerfile爲Spring Boot應用構建Docker Image
其中,第1種方式需要依賴自建的Registry鏡像倉庫,而第2種方式不需要依賴自建的鏡像倉庫,只需要應用的jar包和一個Dockerfile文件即可。
二. 擼起袖子就是幹
-
在src/main目錄下新建docker/Dockerfile文件
-
編寫Dockfile
# 該鏡像需要依賴的基礎鏡像
FROM java:8
# 將當前目錄下的jar包複製到docker容器的/目錄下
ADD spring-boot-study-0.0.1-SNAPSHOT.jar /spring-boot-study.jar
# 在容器構建過程中創建一個spring-boot-study.jar文件,可以用該命令自定義容器的行爲,比如安裝一些軟件,創建一些文件等
RUN bash -c 'touch /spring-boot-study.jar'
# 聲明服務運行在9527端口(只聲明不會打開端口)
EXPOSE 9527
# 指定docker容器啓動時運行jar包
ENTRYPOINT ["java", "-jar","/spring-boot-study.jar"]
# 指定維護者的名字
MAINTAINER wanghong
- Maven打包應用
在項目根目錄下,即pom.xml文件所在的目錄,執行以下命令:
mvn clean package -P dev
或者在IDEA中直接雙擊 package命令:
- 將應用jar包及Dockerfile文件上傳到Linux服務器
- 在Linux上構建docker鏡像
在Dockerfile所在目錄執行以下命令:
# -t 表示指定鏡像倉庫名稱/鏡像名稱:鏡像標籤 .表示使用當前目錄下的Dockerfile
docker build -t hong/spring-boot-study:0.0.1-SNAPSHOT .
- 運行應用
docker run -p 9527:9527 --name spring-boot-study hong/spring-boot-study:0.0.1-SNAPSHOT
- 查看所有的容器
- 如果中途有出錯,刪除鏡像和容器
docker rmi -f 鏡像ID
docker rm 容器ID
- 訪問服務