前言
??之前已經(jīng)說(shuō)過(guò)docker的安裝,也舉了一個(gè)官網(wǎng)版本的部署的列子。但是我們主要還是做java的,這次就來(lái)說(shuō)一說(shuō)如何用docker部署SpringBoot應(yīng)用。
開(kāi)始
搭建一個(gè)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的啟動(dòng)類(lèi)
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!";
}
}
這是一個(gè)最簡(jiǎn)單的SpringBoot應(yīng)用,我們?cè)诒镜貑?dòng),訪問(wèn)http://localhost:8080/say/hello會(huì)在瀏覽器中顯示hello world!。如下圖效果:

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

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

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

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

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

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