使用docker釋出spring cloud應用
本文涉及到的專案:
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命令如下:
返回:Hello Docker World
docker應用,水比較深,這裡只是舉一個hello world級別的例子。Spring Boot with Docker例子還提供了一個maven外掛docker-maven-plugin,這個外掛可以直接將專案編譯為docker映象。另外這個外掛還可以讓你結合jenkins完成專案的持續整合和自動部署。具體來說就是jenkins自動通過git或svn拉到工程程式碼,然後使用maven進行編譯,再呼叫專案中的Dockerfile生成映象。如此以來不管是什麼應用,只需要部署docker就可以了,那些配置,那些亂七八糟的環境搭建都不需要了。