使用Docker運作Java應用程式
部署軟體混亂; 需要克服許多問題才能生成順暢且無痛的部署過程。諸如環境設定,依賴性地獄,編排管理以及系統可用性等問題是部署新應用程式時遇到的許多問題中的一小部分。
Docker可以給我們一種打破依賴性地獄問題的方法,也就是說,如果兩個應用程式依賴于兩個不同的Java版本,并且它們必須在同一主機上運作,那麼将它們隔離到它們自己的docker環境中可能會有所幫助。Docker也可以用來聲明性地建構你的依賴環境,能夠運作你的應用程式并與外部世界進行通信。
Docker使用容器的想法。容器與虛拟機(VM)類似。但是,在虛拟機将自己隔離到擁有自己的作業系統時,容器将共享作業系統核心和其他主機資源。容器是輕量級的,并且允許應用程式在具有通用互動點集的任何主機上運作,進而可以輕松地複制和縮放應用程式。
安裝Docker
Docker在你的作業系統上運作一個守護程序。守護程序将成為目前主機或安裝了docker的虛拟機上所有容器的編排器。
Docker适用于所有主要的作業系統發行版。如果運作Windows 10,則可以運作Docker for Windows。如果您運作的Windows版本低于Windows 10,那麼您将不得不運作Docker Toolbox軟體。Docker for Mac适用于Mac使用者。
由于其在伺服器和雲架構中的普遍使用,Docker專為Linux發行版而建構。是以,docker可以在Linux上本地運作。
使用Spring Boot建立簡單的Java應用程式
為了示範運作Java應用程式的docker的使用,我們将使用Spring Boot架構建立一個簡單的應用程式 。然後,我們将采用此應用程式,并将其封裝在碼頭圖像中 - 碼頭圖像是我們軟體的預建版本。然後,我們可以擷取此泊塢窗圖像,并在泊塢窗容器中運作它,并準備部署和擴充應用程式。
這是一個非常基本的程式,它将在通路url'/ hello-world'時列印hello world:
打包你好;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableAutoConfiguration
公開課你好{
@RequestMapping( “/你好世界”)
String home(){
傳回“Hello World!”;
}
公共靜态無效的主要(字元串[]參數)抛出異常{
SpringApplication.run(Hello.class,args);
}
}
這裡沒有什麼特别之處,它是一個簡單的應用程式,将用于示範如何輕松地使用docker打包并孤立運作。
在我的開發機器上,我可以使用maven建構我的應用程式,并在指令行上運作以下指令:
mvn clean package
這将為我生成一個.jar檔案,然後我可以導航到并使用本地java運作安裝在我的機器上:
java -jar target / hello-world.jar
這些都是手動完成的。但是,您可以建構一個Docker鏡像,讓您可以在任何地方運作應用程式,而無需本地安裝Java。你甚至可以使用docker來建構你的應用程式,使用一個預裝maven的docker鏡像,讓你無需原生安裝maven。
Docker允許您避開開發環境與生産環境略有不同的問題。許多錯誤可以從生産和開發機器之間環境設定的細微差異開始,這可能導緻數小時的挫折; 碼頭工可以幫助您避免這種沮喪。
建立你的第一個Dockerfile
要使用docker運作應用程式,您需要一個運作版本為java的docker鏡像。Docker Hub提供大量預制圖像供大衆使用。事實證明,已經有一個可用的圖像,可以讓你運作一個安裝了java的容器。然後,我們可以使用這個圖像來運作你的Java應用程式。
下面是一個自定義dockerfile的例子,它可以通過我們的spring應用程式實作:
FROM anapsix / alpine-java:最新的
COPY hello-world.jar /
EXPOSE 8080
CMD java -jar hello-world.jar
我們将這個檔案命名為Dockerfile,然後我們将使用以下指令從它建構一個圖像:
docker build -t hello-world-img。
指令末尾的點很重要,因為它表示在目前位置使用已聲明的dockerfile(docker守護程序預設為查找名為Dockerfile的檔案)。然後,我們可以運作:
docker images
以顯示我們有一個名為hello-world-img的可用圖像。
運作你的新Docker鏡像
在容器中運作docker鏡像很簡單。通過執行以下指令來運作映像:
docker run -d -p 8080:8080 hello-world-img
這将啟動hello-world-img容器,随後啟動spring引導應用程式,将容器的8080端口綁定到我們的主機'8080端口。
我們現在可以導航到 http:// localhost:8080 / hello-world并檢視終點輸出的預期響應。
結論使用Docker運作Java應用程式可以幫助您實作更接近全自動化的部署機制。您可以設想采用顯示的指令,并将它們作為持續內建管道的一部分運作。然後,該管道可以建構,打包,部署和運作以docker作為驅動力的所有應用程式。Docker容器是輕量級的,易于部署,并且可以阻止你遇到“它在我的環境中工作”這個着名的問題。節省自己的環境問題,并開始學習Docker以改善您的應用程式。