Docker 部署 SpringBoot(十二)

??上篇文章介紹了SpringBoot關(guān)于jar和war部署:SpringBoot 打包部署(十一),本篇繼續(xù)介紹關(guān)于項目的部署:Docker部署Spring Boot。


一、Docker簡介

??Docker 是一個開源的應(yīng)用容器引擎,基于Go 語言并遵從Apache2.0協(xié)議開源。
??Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上,也可以實現(xiàn)虛擬化。
??容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。


二、適合的版本

  • Docker對系統(tǒng)及內(nèi)核的要求:

??Docker 運行在 CentOS 7 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 3.10 以上。
??Docker 運行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 2.6.32-431 或者更高版本。

  • Docker支持以下的CentOS版本:

??CentOS 6.5 (64-bit) 或更高的版本
??CentOS 7 (64-bit)---首選(本篇文章基于Centos7介紹)

  • Docker 支持以下的 Ubuntu 版本:

??Ubuntu Precise 12.04 (LTS)
??Ubuntu Trusty 14.04 (LTS)
??Ubuntu Wily 15.10


三、環(huán)境準備

??Docker部署SpringBoot項目之前,請確保安裝了JDK、Maven以及Docker。JDK與Maven的安裝本章就不做介紹了,請自行搜百度。
??本篇文章測試基于Linux CentOS 7,所以Docker要求CentOS 7 系統(tǒng)的內(nèi)核版本高于3.10,先查看你的系統(tǒng)是否支持docker。

  • 通過命令 uname -r 查看
[root@moabZ ~]# uname -r3.10.0-862.6.3.el7.x86_64
  • yum安裝docker
yum install docker
  • 安裝好后,啟動docker并設(shè)置開啟自啟動
service docker start  
chkconfig docker on

??也可用CentOS7支持的新式systemmd語法,如下

systemctl start docker.service //啟動
systemctl enable docker.service //設(shè)置開啟自啟動
  • 配置國內(nèi)加速鏡像服務(wù),修改保存后重啟 Docker 以使配置生效。
vim /etc/docker/daemon.json
{"registry-mirrors": ["https://registry.docker-cn.com"]}
//重啟Docker使配置生效systemctl  restart  docker
  • 輸入docker version命令,返回docker版本相關(guān)信息,證明docker安裝成功。

四、SpringBoot項目

  • 添加pom依賴
 <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>
  • 創(chuàng)建TestDockerController
@RestController
public class TestDockerController {    

    @RequestMapping("/")    
    public String index() {       
         return "Hello,this is my first Docker!";    
    }
}

在TestController中添加一個index()方法,訪問返回:Hello,this is my first docker。

  • 啟動類
@SpringBootApplication
public class SpringbootDockerApplication {

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

}

??啟動項目后,瀏覽器訪問:http://ip地址:8080/,頁面返回:Hello,this is my first docker!,說明 Spring Boot 項目配置正常。


五、配置Docker

  • 在pom里添加Docker插件
<!--添加 Docker鏡像名稱springbootdocker-->
<properties>
  <docker.image.prefix>springbootdocker</docker.image.prefix>
</properties>
<!--在build的 plugins中添加 Docker構(gòu)建插件 -->
<!-- Docker maven plugin -->
<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>
<!-- Docker maven plugin -->

上述pom.xml包含了docker-maven-plugin的配置:
imageName指定了鏡像的名字,上述的鏡像名稱就是springbootdocker。
dockerDirectory指定Dockerfile的位置,也就是在src/main/docker目錄下創(chuàng)建Dockerfile。
resources是指那些需要和Dockerfile放在一起,在構(gòu)建鏡像時使用的文件。

  • 創(chuàng)建Dockerfile

??在src/main/docker目錄下創(chuàng)建Dockerfile,此主要為了說明如何來構(gòu)建鏡像。

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

??FROM openjdk:8-jdk-alpine是指Docker Hub上官方提供的java鏡像,版本號是8也就是jdk1.8,有了這個基礎(chǔ)鏡像后,Dockerfile可以通過FROM指令直接獲取它的狀態(tài)——也就是在容器中java是已經(jīng)安裝的。
??VOLUME ,我們添加了一個VOLUME指向/ tmp的內(nèi)容,因為這是Spring Boot應(yīng)用程序默認為Tomcat創(chuàng)建工作目錄的地方。效果是在/var/lib/docker下的主機上創(chuàng)建一個臨時文件,并將其鏈接到/tmp下的容器。
??ADD springboot-dockerr-0.0.1-SNAPSHOT.jar將應(yīng)用jar包復(fù)制到/app.jar
??ENTRYPOINT表示容器運行后默認執(zhí)行的命令。為了縮短 Tomcat 的啟動時間,添加java.security.egd的系統(tǒng)屬性指向/dev/urandom作為 ENTRYPOINT。


六、Docker部署項目

  • 打包
    把新建的項目拷貝到服務(wù)器上,進入項目路徑下進行打包
mvn package
  • 構(gòu)建docker鏡像
    ?構(gòu)建鏡像有兩種方式:

方式一:在Linux里創(chuàng)建一個docker文件夾,里面放置DockerfileSpringBoot打包的項目springboot-docker-0.0.1-SNAPSHOT.jar,在該docker文件下執(zhí)行docker build -t dockerName .

執(zhí)行docker build命令,docker就會根據(jù)Dockerfile里你定義好的命令進行構(gòu)建新的鏡像。
-t代表要構(gòu)建的鏡像的tag
dockerName是生成的鏡像名稱,
.代表當(dāng)前目錄,也就是Dockerfile所在的目錄。
然后就可以看到在下載各種依賴的maven、各種jar,構(gòu)建完畢后,啟動項目。

方式二:把項目拷貝到服務(wù)器,cd到項目springboot-docker目錄下,然后執(zhí)行mvn package docker:build

?我們構(gòu)建鏡像選擇的是方式二

mvn package docker:build

??出現(xiàn)如下信息表示構(gòu)建成功

  • 鏡像構(gòu)建成功。通過docker images查看鏡像:

springbootdocker/springboot-docker 就是我們構(gòu)建好的鏡像,下一步就是運行該鏡像。

  • 啟動鏡像
docker run -p 8080:8080 -t springbootdocker/springboot-docker

-p表示端口映射,冒號左邊為docker容器外的端口號,右邊為容器內(nèi)的端口號。 8080:8080意思是將docker容器的8080端口映射到服務(wù)器上的8080端口。

  • 查看運行鏡像

??啟動完成之后我們使用docker ps查看正在運行的鏡像:

??可以看到我們構(gòu)建的容器正在在運行,訪問瀏覽器:http://ip:8080/,返回

說明使用 Docker 部署 Spring Boot 項目成功!


七、Docker應(yīng)用場景

??Web應(yīng)用的自動化打包和發(fā)布。
??自動化測試和持續(xù)集成、發(fā)布。
??在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺應(yīng)用。


八、優(yōu)缺點

  • 優(yōu)點:

??1、更快速的交付和部署
??2、更高效的資源應(yīng)用
??3、更輕松的遷移和擴展
??4、更簡單的更新管理

  • 缺點:

??1、必須是在64位機器上運行,并且目前僅支持X86_64和AMD64,32位系統(tǒng)暫時不支持
??2、系統(tǒng)的Linux內(nèi)核必須是3.8或者更高的,內(nèi)核支持Device Mapper、AUFS、VFS、BTRFS等存儲格式。
??3、內(nèi)核必須支持cgroups和命令空間。


九、總結(jié)

??Docker部署SpringBoot至此結(jié)束了,通過本篇文章我們簡單了解了Docker簡介、Docker安裝以及在項目中的配置。下一篇我們繼續(xù)學(xué)習(xí)通過Jenkins部署Spring Boot。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容