DOCKER 學習筆記3 使用Docker部署SpringBoot


前言

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 服務器進行構建鏡像。
我這里上傳碼雲 需要的小伙伴可以直接下載構建:

https://gitee.com/mrc1999/springboot-docker

安裝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

image.png

image.png

參考

https://www.cnblogs.com/ityouknow/p/8599093.html

碼雲示例

https://gitee.com/mrc1999/springboot-docker


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM