前言
??之前已經(jīng)說過docker的安裝,也舉了一個官網(wǎng)版本的部署的列子。但是我們主要還是做java的,這次就來說一說如何用docker部署SpringBoot應(yīng)用。
開始
搭建一個SpringBoot應(yīng)用
POM文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<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>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
SpringBoot的啟動類
package com.tuchen.docker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
controller層
package com.tuchen.docker.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/say")
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello world!";
}
}
這是一個最簡單的SpringBoot應(yīng)用,我們在本地啟動,訪問http://localhost:8080/say/hello會在瀏覽器中顯示hello world!。如下圖效果:

至此,我們SpringBoot的demo程序已經(jīng)寫好了!
開始部署
上傳jar包
??首先創(chuàng)建一個我們部署用的工作目錄,用來存放jar包和docker的一些文件,我這里創(chuàng)建了一個test目錄,并且已經(jīng)把jar包打包好上傳進來了。
關(guān)于如何上傳,mac用戶可以在本機的終端窗口用scp命令直接上傳。我本人用的windows系統(tǒng),使用的是圖形化上傳工具SecureFX。
??現(xiàn)在如果你已經(jīng)上傳好了,你的目錄下面應(yīng)該是這個樣子:

編寫Dockfile
??接下來就開始編寫Dockerfile了,首先在jar包的同級目錄創(chuàng)建名字為Dockerfile的文件(注意大小寫,并且沒有后綴),將下列內(nèi)容拷貝進去:
# 指定jdk1.8鏡像為運行環(huán)境
FROM java:8
# 將本地的jar包拷貝進容器中,并且改名為app.jar
COPY docker-springboot-1.0-SNAPSHOT.jar /app.jar
# 暴露8080端口
EXPOSE 8080
# 容器啟動后執(zhí)行java的啟動命令 啟動SpringBoot應(yīng)用
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar
??Dockerfile創(chuàng)建好了以后,你的目錄應(yīng)該是這個樣子,包含一個jar包,一個Dockerfile:

接下來在test目錄下使用命令構(gòu)建image(注意后面的點):
#創(chuàng)建一個名字為hello的鏡像
$ docker build -t hello .
構(gòu)建鏡像過程中,docker產(chǎn)生的日志:

執(zhí)行docker images查看已經(jīng)構(gòu)建好的鏡像:

鏡像構(gòu)建好了以后就開始啟動容器了:
$ docker run -d -p 8080:8080 hello
容器內(nèi)部啟動java應(yīng)用可能會有點慢,等15秒左右用瀏覽器打開http://你服務(wù)器的地址:8080/say/hello就可以看到那個熟悉的hello world?。?br>

結(jié)束
??到這里,一個簡易的SpringBoot已經(jīng)在Docker容器中啟動了,當然生產(chǎn)環(huán)境中的啟動沒有這么簡單,但是大致套路是差不多的。我也在慢慢學習,一步一步跟進中。