前言
Springboot 可謂是當代Web項目當中的一股清流。不管是控制反轉、依賴注入、切面編程。使用起來非常的得心應手,SpringBoot 最大的特點就是約定大於配置
減少繁瑣的配置。能自動化加載需要的配置項,大大減少程序員的配置功能。不再在繁瑣的XML里面配置一大堆東西。也非常難受。
Docker 與Springboot項目結合起來,最好的使用容器的方法就是:
- 各盡其責,一個容器負責一個功能
- 減少容器鏡像大小。容器里面除去應用的依賴以外不需要其他冗余。
- 容器輕量化
Docker-Springboot
還是按照構建Springboot 的方式。訪問 https://start.spring.io/
選擇自己的JAVA版本以及Springboot 版本下載即可。
解壓導入。就手寫一個簡單的控制器,訪問 http://localhost:8080/ 就返回一段話即可。
@RestController
@RequestMapping
public class DockerController {
@GetMapping("/")
public String index() {
return "Hello Docker-spring";
}
}
POM 文件加入Docker 支持
在POM 插件中引入maven對於Docker 的支持插件。並設置Dockerfile
文件所在的文件夾(上下文文件夾)以及設置鏡像的鏡像名稱
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
創建 Dockerfile
在配置文件中我們設置的是src/main/docker
因此在main文件夾下創建一個docker 文件夾。並新建一個Dockerfile
文件
## 基礎鏡像
FROM openjdk:8-jdk-alpine
## 設置掛載點
VOLUME /tmp
## 復制並修改重命名
ADD docker-springboot-1.0.jar app.jar
## 設置啟動參數
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
簡單說下:
- FROM 用於指定基礎鏡像,當然運行Springboot 肯定需要java運行環境
openjdk:8-jdk-alpine
- VOLUME 用於掛載
- ADD 用於復制,將上下文內的
docker-springboot-1.0.jar
復制到鏡像內,並改名為app.jar
- ENTRYPOINT 詳見下方
VOLUME 命令
用於定義匿名卷,用於創建掛載點,比如 VOLUME /tmp
就會向容器內掛載一個 /tmp 目錄,為什么需要這個目錄,因為springboot 內置的tomcat 使用的是 /tmp 作為工作目錄。使用這個命令后。產生的效果是:在宿主主機docker 的工作目錄Docker Root Dir: /var/lib/docker
創建一個臨時文件,將這個文件鏈接到容器的 /tmp 下。
ADD 命令
ADD 命令用於在構建鏡像時,復制上下文中的文件到鏡像內。
格式:
ADD <源路徑>... <目標路徑>
ADD ["<源路徑>",... "<目標路徑>"]
ENTRYPOINT 命令
ENTRYPOINT 命令用於給容器配置一個可執行的程序。也可理解為容器的默認程序,就好比這個容器運行着,它里面肯定需要跑一個東西吧。和CMD 命令有相似之處。
不同點
- CMD 命令可以被覆蓋,若執行
docker run <image> <command>
后面跟的命令<command>
則會覆蓋CMD 命令的內容。 - ENTRYPOINT 只允許在Dockerfile 當中出現一次。多指定則會覆蓋。
可以通過
docker run --entrypoint
重寫容器入口點
Docker 部署環境
windows 構建特別吃力。所以選擇將源程序上傳Linux 服務器進行構建鏡像。
我這里上傳碼雲 需要的小伙伴可以直接下載構建:
安裝JDK
yum install java-1.8.0-openjdk
## 檢查安裝情況
java -version
安裝GIT
yum install git
git version
安裝maven
yum install maven
mvn -v
通過以上的操作,我們已經安裝了基本的構建環境,當然docker 我就不說了,之前的文章已經教大家配置加速以及安裝了。maven 在安裝后,也需要配置阿里雲的中央倉庫,這樣下載依賴會快很多!!
部署docker
## 拉取遠程代碼
git clone https://gitee.com/mrc1999/springboot-docker.git
cd springboot-docker
## 通過maven 進行構建jar文件
mvn package
## 啟動jar 文件進行測試 是否啟動有誤
java -jar target/docker-springboot-1.0.jar
## 構建鏡像
mvn package docker:build
[INFO] Building image springboot/docker-springboot
Step 1/4 : FROM openjdk:8-jdk-alpine
---> a3562aa0b991
Step 2/4 : VOLUME /tmp
---> Using cache
---> f4498cadadb0
Step 3/4 : ADD docker-springboot-1.0.jar app.jar
---> d15f2d616127
Removing intermediate container f29f59469095
Step 4/4 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
---> Running in 8afde38ee3e4
---> 1d5ac55f0a92
Removing intermediate container 8afde38ee3e4
Successfully built 1d5ac55f0a92
[INFO] Built springboot/docker-springboot
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.931s
[INFO] Finished at: Sat Feb 08 14:43:28 CST 2020
[INFO] Final Memory: 29M/88M
[INFO] ------------------------------------------------------------------------
查看鏡像
## 查看是否已經構建成功
docker images
## 嘗試運行
docker run -d -p 8080:8080 springboot/docker-springboot
## 查看運行情況
docker ps
參考
https://www.cnblogs.com/ityouknow/p/8599093.html