1. 程式人生 > >使用docker發布spring cloud應用

使用docker發布spring cloud應用

tap -s eight 端口 left 虛擬 http str entos

本文涉及到的項目:

  cloud-simple-docker:一個簡單的spring boot應用

  Docker是一種虛擬機技術,準確的說是在linux虛擬機技術LXC基礎上又封裝了一層,可以看成是基於LXC的容器技術。可以把容器看做是一個簡易版的Linux環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。容器是用來裝東西的,Docker可以裝載應用本身及其運行環境進容器,這是一個很小的文件,然後把這個文件扔到任何兼容的服務器上就可以運行,也是基於這一點,Docker可以同時讓應用的部署、測試和分發都變得前所未有的高效和輕松!

  下面例子參考“Spring Boot with Docker”官方例子。

  1)建立一個簡單的應用,只有一個類,包含main方法,代碼如下:

  @SpringBootApplication

  @RestController

  public class Application {

  @RequestMapping("/")

  public String home() {

return "Hello Docker World";

  }

  public static void main(String[] args) {

SpringApplication.run(Application.class, args);

  }

  }

  2)建立Dockerfile

  # 基於那個鏡像

  FROM daocloud.io/java:8

  # 將本地文件夾掛載到當前容器(tomcat使用)

  VOLUME /tmp

  # 拷貝文件到容器

  ADD cloud-simple-docker-1.0.0.jar /app.jar

  # 打開服務端口

  EXPOSE 8080

  # 配置容器啟動後執行的命令

  ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

  這裏特別要註意,這裏的FROM采用國內的docker鏡像,如果連國外的docker鏡像下載,基本是不太可能下載下來的,原因大家都知道。

  有了Dockerfile,就可以部署docker了。

  3)部署docker示例

  部署分為2步,分別是創建鏡像、運行。

  • 創建鏡像

  將編譯後的jar文件考到服務器某個目錄,這裏是tmp目錄。然後將Dockerfile也考到該目錄,最後進入到該目錄下運行命令:

  docker build -t local/cloud-docker-hello .

  別掉了後面的“.”符號,這個符號表示目錄,這個命令執行成功,你會看到以下界面:

  技術分享圖片

  運行成功後,就創建了一個鏡像,可以使用docker images來查看該鏡像。

  • 運行鏡像

  有了鏡像就可以運行了,使用下面命令運行:

  docker run -p 8080:8080 –t local/cloud-simple-docker

  其中8080:8080表示本機端口映射到Docker實例端口。如果本機端口沒有打開,還需要打開該端口,打開端口在centos 7中使用firewall-cmd命令:

  firewall-cmd --zone=public --add-port=8080/tcp --permanent

  firewall-cmd –reload

  成功後可以使用docker ps –a查看鏡像運行情況:

  local/cloud-docker-hello | latest | 3ef51d55eb27 | 22 minutes ago | 667.2 MB

  可以看到這個包括了java運行環境的web應用鏡像是667MB。

  該步驟運行結果如下:

  技術分享圖片

  最後使用curl命令或者直接在瀏覽器打開,可以直接測試該應用。使用curl命令如下:

  curl http://localhost:8080

  返回:Hello Docker World

  docker應用,水比較深,這裏只是舉一個hello world級別的例子。Spring Boot with Docker例子還提供了一個maven插件docker-maven-plugin,這個插件可以直接將項目編譯為docker鏡像。另外這個插件還可以讓你結合jenkins完成項目的持續集成和自動部署。具體來說就是jenkins自動通過git或svn拉到工程代碼,然後使用maven進行編譯,再調用項目中的Dockerfile生成鏡像。如此以來不管是什麽應用,只需要部署docker就可以了,那些配置,那些亂七八糟的環境搭建都不需要了。

使用docker發布spring cloud應用