国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Web服務器 > 正文

Docker容器化spring boot應用詳解

2024-09-01 13:54:34
字體:
來源:轉載
供稿:網友

前置條件

容器化spring boot應用所需環境:

  1. jdk 1.8 +
  2. maven 3.0 +

我們的需求是:使用maven打包,將spring boot應用制作成docker鏡像并上傳到docker hub。在其他機器上,可以直接docker pull并運行容器。

創建spring boot應用

spring boot 包結構為:

└── src  └── main    └── java      └── me        └── ithakar

創建spring boot Application主類,src/main/java/me/ithakar/Application.java

package me.ithakar;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplication@RestControllerpublic class Application {  @RequestMapping("/")  public String home() {    return "docker app running";  }  public static void main(String[] args) {    SpringApplication.run(Application.class, args);  }}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>me.ithakar</groupId>  <artifactId>docker-app</artifactId>  <version>0.1.0</version>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.3.RELEASE</version>  </parent>  <properties>    <java.version>1.8</java.version>  </properties>  <dependencies>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-test</artifactId>      <scope>test</scope>    </dependency>  </dependencies>  <build>    <plugins>      <plugin>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-maven-plugin</artifactId>      </plugin>    </plugins>  </build></project>

打包并啟動應用

mvn package && java -jar target/docker-app-0.1.0.jar

訪問 http://localhost:8080/ ,獲得響應:

docker app running

則spring boot應用啟動成功

創建Dockerfile文件

Dockerfile是一個文本文件,類似shell腳本,其內包含了一條條的指令。每一條指令的內容,就是描述對應的鏡像層應當如何構建。

Dockerfile位置:src/main/docker/Dockerfile

FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD docker-app-0.1.0.jar app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  1. FROM 命令指定基礎鏡像,以一個鏡像為基礎,在其上進行定制。在這里我們的基礎鏡像是frolvlad/alpine-oraclejdk8:slim。
  2. VOLUME 定義匿名卷。對于可能需要操作數據庫類需要保存動態數據的應用,其數據文件應該保存在主句的卷,而不是容器的儲存層。在這里我們是將其掛載在了/tmp這個位置,從而保證了容器的無狀態化。
  3. ADD 命令是較高級的復制命令,將jar包復制到/app.jar
  4. ENTRYPOINT 容器運行后默認執行的命令

添加maven docker插件

docker maven插件是為了方便java開發者,由spotify公司開發的一款maven插件。添加以下代碼至pom.xml文件中。

<properties>  <docker.image.prefix>ithaka</docker.image.prefix></properties><build>  <plugins>    <plugin>      <groupId>com.spotify</groupId>      <artifactId>docker-maven-plugin</artifactId>      <version>0.4.11</version>      <configuration>        <imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>        <dockerDirectory>src/main/docker</dockerDirectory>        <pushImage>true</pushImage>        <resources>          <resource>            <targetPath>/</targetPath>            <directory>${project.build.directory}</directory>            <include>${project.build.finalName}.jar</include>          </resource>        </resources>      </configuration>    </plugin>  </plugins></build>

注意,docker.image.prefix中的ithaka為我的docker hub 賬戶,使用時將其換成自己的

使用maven命令打包應用、構建docker鏡像并上傳鏡像到docker hub:

mvn package docker:build -DpushImage

此時我們將得到一個報錯:

[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.4.11:build (default-cli) on project docker-app: Exception caught: denied: requested access to the resource is denied

這是因為我們在maven中push時,并沒有包含docker的用戶信息,所以權限校驗失敗。

解決方法為,在maven全局setting.xml配置中,添加docker hub server信息

<server>    <id>docker-hub</id>    <username>ithaka</username>    <password>密碼</password>    <configuration>      <email>郵箱</email>    </configuration></server>

在pom.xml中的docker-maven-plugi插件中,指定server

<plugin>  <groupId>com.spotify</groupId>  <artifactId>docker-maven-plugin</artifactId>  <configuration>    <serverId>docker-hub</serverId>  </configuration></plugin>

再繼續執行

mvn package docker:build -DpushImage

出現

The push refers to a repository [docker.io/ithaka/docker-app]
8c02854cd300: Pushed
a03c3b5dbe04: Pushed
8018d52798bb: Pushed
1e6468b956ae: Pushed
3fb66f713c9f: Pushed

0.0.1: digest: sha256:63456345745755577c19103dcf4838894e34d45a68a1ec23b2f69d6f059 size: 1375

即為上傳docker hub成功。

啟動docker容器

在另外一臺機器上,執行命令

docker run -p 8080:8080 -t ithaka/docker-app

訪問http://ip:8080/ ,獲得響應:

docker app running

docker應用啟動成功

參考文檔:

Spring Boot with Docker

docker-maven-plugin

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 拜城县| 溧阳市| 武安市| 通州市| 焉耆| 凉山| 丽水市| 陆良县| 江川县| 清河县| 富锦市| 荆门市| 鄂托克前旗| 来宾市| 林口县| 昌江| 墨玉县| 灵宝市| 寻乌县| 敦化市| 定南县| 沿河| 光山县| 海门市| 卢湾区| 宁强县| 名山县| 石楼县| 张北县| 安吉县| 观塘区| 荔波县| 湖口县| 特克斯县| 措勤县| 安阳市| 武陟县| 藁城市| 垣曲县| 揭阳市| 马关县|