spring boot——結合docker
前言
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 liunx機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。Docker自2013年以來非常火熱,因為它能把開發、測試、運維緊密的聯系起來。spring boot又能很好的融合Docker,讓我們看一下spring boot是怎樣與Docker結合的吧。
一、創建新項目
pom.xml

properties節點中設置docker鏡像的前綴“springboot”:
<docker.image.prefix>springboot</docker.image.prefix>
加入maven插件“docker-maven-plugin”:
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.11</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>

創建“src/main/docker/Dockerfile”文件:
FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD spring12.jar app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
FROM為使用哪個鏡像
VOLUME為掛載路徑
ADD為復制文件到鏡像中
RUN為初始化時運行的命令
ENV為設置環境變量
ENTRYPOINT為啟動時運行的命令
項目結構如圖:
二、部署Docker
選擇一個linux系統,如ubuntu或centos,在此之前需安裝jdk和maven
1.安裝docker環境:
ubuntu為:
$ apt-get install docker.io -y
centos為:
$ yum install docker-io -y
2.生成鏡像
下面以ubuntu為例
$ mvn package docker:build
3.查看鏡像
$ docker images
發現了“springboot/spring12”,
其中“springboot”是之前設置的docker鏡像前綴“<docker.image.prefix>springboot</docker.image.prefix>”,
“spring12”是生成的文件名“<finalName>spring12</finalName>”,這些都在pom.xml中設置。
4.運行鏡像
$ docker run -p 8080:8080 -t springboot/spring12
輸入網址測試:
docker的部署基本完成了,在生成鏡像后也可以加入“-DpushImage”參數,再生成完畢的時候把鏡像推送的鏡像倉庫中
$ mvn package docker:build -DpushImage
總結
上述的實現方式並不完美,實際項目中還需要讓spring boot應用在后台運行,並且能實現啟動服務器后自動啟動docker容器。其思路是,通常會使用supervisord來輔助完成,思路是在supervisord的配置文件中執行shell腳本。然而這同樣不完美,而最好的做法是實現“持續集成”,其思路是使用jenkins來結合git鈎子,當提交新版本的代碼后,jenkins去執行shell腳本pull代碼,然后maven打包,接下來生成最新版的docker鏡像,最后推送新鏡像和運行docker容器。
參考官方文檔:http://spring.io/guides/gs/spring-boot-docker/
代碼:https://github.com/carter659/spring-boot-12.git