怎么在Docker中部署一個(gè)Spring-boot項(xiàng)目

本篇文章給大家分享的是有關(guān)怎么在Docker中部署一個(gè)Spring-boot項(xiàng)目,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

郟縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

 1.1 快速啟動(dòng) pom.xml加入如下依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
  </parent>

  <properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </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>
    <finalName>spring-docker</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

Spring-boot啟動(dòng)類

@SpringBootApplication
public class DockerApplication {

  public static void main(String[] args) {
    SpringApplication.run(DockerApplication.class, args);
  }
}

測(cè)試API

@RestController
public class DockerStarterApi {

  @GetMapping("/api/docker/hello")
  public String hello() {
    return "hello docker";
  }
}

配置啟動(dòng)配置文件 application.yml

server:
 port: 9090 # 為了展示效果, 這里改了默認(rèn)端口8080

檢查Spring啟動(dòng)

.  ____     _      __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::    (v2.0.2.RELEASE)

...

2018-12-17 17:26:13.385 INFO 48740 --- [      main] o.s.j.e.a.AnnotationMBeanExporter    : Registering beans for JMX exposure on startup
2018-12-17 17:26:13.448 INFO 48740 --- [      main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 9090 (http) with context path ''
2018-12-17 17:26:13.453 INFO 48740 --- [      main] pers.study.docker.DockerApplication   : Started DockerApplication in 1.982 seconds (JVM running for 2.602)

檢查API是否生效

$ curl -XGET 'http://localhost:9090/api/docker/hello'
hello docker

瀏覽器檢查

http://localhost:9090/api/docker/hello

怎么在Docker中部署一個(gè)Spring-boot項(xiàng)目

1.2 打包啟動(dòng)

項(xiàng)目打包

完成上面步驟之后,執(zhí)行打包命令:

$ mvn clean -U -Dmaven.test.skip compile package

因?yàn)樯厦娴膒om文件里面定義了 finalName ,所以在這里會(huì)看到編譯打包之后 target 目錄下會(huì)生成 spring-docker.jar

<finalName>spring-docker</finalName>

測(cè)試運(yùn)行

$ java -jar target/spring-docker.jar

不出意外(有問題留言~)運(yùn)行結(jié)果同上并檢查API是否生效即可.

二、Docker快速安裝

接下來開始準(zhǔn)備Docker

安裝

官網(wǎng)下載安裝

檢查安裝、查看幫助

$ docker --version
Docker version 18.06.0-ce, build 0ffa825

$ docker --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
...

鏡像加速

中國(guó)官方鏡像加速

三、配置Spring-boot + Docker

pom.xml 添加docker plugin

<properties>
    <docker.image.prefix>springboot</docker.image.prefix>
  </properties>

  <build>
    <plugins>
      <!-- Docker maven plugin -->
      <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.0.0</version>
        <configuration>
          <imageName>${docker.image.prefix}/${project.build.finalName}</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>
    </plugins>
  </build>

創(chuàng)建 Dockerfile 文件

根據(jù)上面 pom.xml 文件配置 <dockerDirectory>src/main/docker</dockerDirectory> ,這里配置了docker配置文件的目錄,所以需要再 src/main 下面創(chuàng)建docker文件夾,同時(shí)創(chuàng)建 Dockerfile 文件。

目錄機(jī)構(gòu)如圖:

怎么在Docker中部署一個(gè)Spring-boot項(xiàng)目

docker配置文件結(jié)構(gòu).png

編輯 Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD spring-docker.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

FROM 表示以Java8為基礎(chǔ)鏡像

VOLUME 表示掛載目錄

ADD 拷貝打包文件并重命名為 app.jar

ENTRYPOINT 根據(jù)下面的官方文檔解釋大致是為了縮短tomcat啟動(dòng)時(shí)間而添加的一個(gè)系統(tǒng)屬性。

We added a VOLUME pointing to /tmp because that is where a Spring Boot application creates working directories for Tomcat by default. The effect is to create a temporary file on your host under /var/lib/docker and link it to the container under /tmp . This step is optional for the simple app that we wrote here but can be necessary for other Spring Boot applications if they need to actually write in the filesystem.

To reduce Tomcat startup time we added a system property pointing to "/dev/urandom" as a source of entropy. This is not necessary with more recent versions of Spring Boot, if you use the "standard" version of Tomcat (or any other web server).

配置完成!

四、Docker啟動(dòng)Spring-boot

進(jìn)入 module 執(zhí)行:

$ mvn package docker:build

[INFO] Scanning for projects...

...

 ---> Running in e1f8aba72bdf
Removing intermediate container e1f8aba72bdf
 ---> 36a61c09f09a
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 36a61c09f09a
Successfully tagged springboot/spring-docker:latest
[INFO] Built springboot/spring-docker
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.367 s
[INFO] Finished at: 2018-12-17T20:48:21+08:00
[INFO] ------------------------------------------------------------------------

查看鏡像

$ docker images
REPOSITORY         TAG         IMAGE ID      CREATED       SIZE
springboot/spring-docker  latest       36a61c09f09a    2 minutes ago    123MB

運(yùn)行鏡像

$ docker run -p 9090:9090 -t springboot/spring-docker
 .  ____     _      __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::    (v2.0.2.RELEASE)

2018-12-17 12:53:21.502 INFO 1 --- [      main] pers.study.docker.DockerApplication   : Starting DockerApplication v1.0-SNAPSHOT on 94991c04be5d with PID 1 (/app.jar started by root in /)
2018-12-17 12:53:21.509 INFO 1 --- [      main] pers.study.docker.DockerApplication   : No active profile set, falling back to default profiles: default

···

2018-12-17 12:53:25.255 INFO 1 --- [      main] o.s.j.e.a.AnnotationMBeanExporter    : Registering beans for JMX exposure on startup
2018-12-17 12:53:25.337 INFO 1 --- [      main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 9090 (http) with context path ''
2018-12-17 12:53:25.353 INFO 1 --- [      main] pers.study.docker.DockerApplication   : Started DockerApplication in 4.485 seconds (JVM running for 5.346)

查看容器

$ docker ps
CONTAINER ID    IMAGE           COMMAND         CREATED       STATUS       PORTS                                  NAMES
94991c04be5d    springboot/spring-docker  "java -Djava.securit…"  53 seconds ago   Up 52 seconds    0.0.0.0:9090->9090/tcp                          quizzical_bhabha

驗(yàn)證啟動(dòng),訪問API

$ curl -XGET 'http://localhost:9090/api/docker/hello'
hello docker

至此Docker部署spring-boot搭建完成。

五、移除鏡像

 停止容器

$ docker stop 94991c04be5d
94991c04be5d

刪除容器

$ docker rm 94991c04be5d
94991c04be5d

刪除鏡像

$ docker image rm springboot/spring-docker
Untagged: springboot/spring-docker:latest
Deleted: sha256:36a61c09f09ab88cfe5a05f564deb57498682f4a6f3ec01d2a8c4fdc80ac1e41
Deleted: sha256:3f9aef70be6d4d43c205454d8874f10bc2f7280f70eb88cd1f04937b7965dd27
Deleted: sha256:9a5800e93615bb4c5128bb36d31ec494327c01f1a9a768c1ff538badf76628b9
Deleted: sha256:d9c66f907448fa9e61fd5f9267d7fcf8e1f4b52d0a20466414f2f45777261284

六、其他配置功能

添加環(huán)境屬性

$ docker run -e "SPRING_PROFILES_ACTIVE=prod" -p 9090:9090 -t springbooot/spring-docker

后臺(tái)啟動(dòng)運(yùn)行

$ docker run -p 9090:9090 -d springboot/spring-docker

開啟容器Debug 修改 Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD spring-docker.jar app.jar
ENV JAVA_OPTS ''
CMD java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar app.jar

docker run

$ docker run -e "JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" -p 9090:9090 -p 5005:5005 -t springboot/spring-docker

以上就是怎么在Docker中部署一個(gè)Spring-boot項(xiàng)目,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享文章:怎么在Docker中部署一個(gè)Spring-boot項(xiàng)目
當(dāng)前網(wǎng)址:http://bm7419.com/article44/pcddee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)軟件開發(fā)、定制網(wǎng)站、品牌網(wǎng)站制作商城網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)