spring Cloud 第十一篇:docker部署spring cloud項(xiàng)目
一、docker簡(jiǎn)介
Docker是一個(gè)開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。開發(fā)者在筆記本上編譯測(cè)試通過的容器可以批量地在生產(chǎn)環(huán)境中部署,包括VMs(虛擬機(jī))、bare metal、OpenStack 集群和其他的基礎(chǔ)應(yīng)用平臺(tái)。
Docker通常用于如下場(chǎng)景:
web應(yīng)用的自動(dòng)化打包和發(fā)布;
自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布;
在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺(tái)應(yīng)用;
從頭編譯或者擴(kuò)展現(xiàn)有的OpenShift或Cloud Foundry平臺(tái)來搭建自己的PaaS環(huán)境。
Docker 的優(yōu)點(diǎn)
1、簡(jiǎn)化程序:
Docker 讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,便可以實(shí)現(xiàn)虛擬化。Docker改變了虛擬化的方式,使開發(fā)者可以直接將自己的成果放入Docker中進(jìn)行管理。方便快捷已經(jīng)是 Docker的最大優(yōu)勢(shì),過去需要用數(shù)天乃至數(shù)周的 ? ?任務(wù),在Docker容器的處理下,只需要數(shù)秒就能完成。
2、避免選擇恐懼癥:
如果你有選擇恐懼癥,還是資深患者。Docker 幫你 ? ?打包你的糾結(jié)!比如 Docker 鏡像;Docker 鏡像中包含了運(yùn)行環(huán)境和配置,所以 Docker 可以簡(jiǎn)化部署多種應(yīng)用實(shí)例工作。比如 Web 應(yīng)用、后臺(tái)應(yīng)用、數(shù)據(jù)庫應(yīng)用、大數(shù)據(jù)應(yīng)用比如 Hadoop 集群、消息隊(duì)列等等都可以打包成一個(gè)鏡像部署。
3、節(jié)省開支:
一方面,云計(jì)算時(shí)代到來,使開發(fā)者不必為了追求效果而配置高額的硬件,Docker 改變了高性能必然高價(jià)格的思維定勢(shì)。Docker 與云的結(jié)合,讓云空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。
上面文字參考了相關(guān)文章;另,關(guān)于docker 的安裝和基本的使用見相關(guān)教程。
二、準(zhǔn)備工作
環(huán)境條件:
linux系統(tǒng),不建議windows
docker最新版本
jdk 1.8
maven3.0
本文采用的工程來自第一篇文章的工程,采用maven的方式去構(gòu)建項(xiàng)目,并采用docker-maven-plugin去構(gòu)建docker鏡像。
三、改造工程、構(gòu)建鏡像
在pom文件加上插件:
Spotify 的 docker-maven-plugin 插件是用maven插件方式構(gòu)建docker鏡像的。
imageName指定了鏡像的名字,本例為 forep/eureka-server
dockerDirectory指定 Dockerfile 的位置
resources是指那些需要和 Dockerfile 放在一起,在構(gòu)建鏡像時(shí)使用的文件,一般應(yīng)用 jar 包需要納入。
修改下配置文件:
server: ??port:?8761 eureka: ??instance: ????prefer-ip-address:?true ??client: ????registerWithEureka:?false ????fetchRegistry:?false
FROM?frolvlad/alpine-oraclejdk8:slim VOLUME?/tmp ADD?eureka-server-0.0.1-SNAPSHOT.jar?app.jar #RUN?bash?-c?'touch?/app.jar' ENTRYPOINT?["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE?8761
FROM
FROM?
FROM指令必須指定且需要在Dockerfile其他指令的前面,指定的基礎(chǔ)image可以是官方遠(yuǎn)程倉庫中的,也可以位于本地倉庫。后續(xù)的指令都依賴于該指令指定的image。當(dāng)在同一個(gè)Dockerfile中建立多個(gè)鏡像時(shí),可以使用多個(gè)FROM指令。
VOLUME
格式為:
VOLUME?["/data"]
使容器中的一個(gè)目錄具有持久化存儲(chǔ)數(shù)據(jù)的功能,該目錄可以被容器本身使用,也可以共享給其他容器。當(dāng)容器中的應(yīng)用有持久化數(shù)據(jù)的需求時(shí)可以在Dockerfile中使用該指令。
ADD
從src目錄復(fù)制文件到容器的dest。其中src可以是Dockerfile所在目錄的相對(duì)路徑,也可以是一個(gè)URL,還可以是一個(gè)壓縮包
ENTRYPOINT
指定Docker容器啟動(dòng)時(shí)執(zhí)行的命令,可以多次設(shè)置,但是只有最后一個(gè)有效。
EXPOSE
為Docker容器設(shè)置對(duì)外的端口號(hào)。在啟動(dòng)時(shí),可以使用-p選項(xiàng)或者-P選項(xiàng)。
執(zhí)行構(gòu)建docker鏡像maven命令:
mvn?clean mvn?package?docker:build
構(gòu)建eureka-server鏡像成功。
pom文件導(dǎo)入同eurek-server
修改下配置文件:
eureka: ??client: ????serviceUrl: ??????defaultZone:?http://eureka-server:8761/eureka/?#?這個(gè)需要改為eureka-server server: ??port:?8763 spring: ??application: ????name:?service-hi
在這里說下:defaultZone發(fā)現(xiàn)服務(wù)的host改為鏡像名。
dockefile 編寫同eureka-server
構(gòu)建鏡像:
mvn?clean mvn?package?docker:build
這時(shí)我們運(yùn)行docke的eureka-server 和service-hi鏡像:
docker?run?-p?8761:?8761?-t?forezp/eureka-server docker?run?-p?8763:?8763?-t?forezp/service-hi
訪問localhost:8761
四、采用docker-compose啟動(dòng)鏡像
Compose 是一個(gè)用于定義和運(yùn)行多容器的Docker應(yīng)用的工具。使用Compose,你可以在一個(gè)配置文件(yaml格式)中配置你應(yīng)用的服務(wù),然后使用一個(gè)命令,即可創(chuàng)建并啟動(dòng)配置中引用的所有服務(wù)。下面我們進(jìn)入Compose的實(shí)戰(zhàn)吧。
采用docker-compose的方式編排鏡像,啟動(dòng)鏡像:
version:?'3' services: ??eureka-server: ????image:?forezp/eureka-server ????restart:?always ????ports: ??????-?8761:8761 ??service-hi: ????image:?forezp/service-hi ????restart:?always ????ports: ??????-?8763:8763
輸入命令: docker-compose up
發(fā)現(xiàn)2個(gè)鏡像按照指定的順序啟動(dòng)了。
源碼下載:https://github.com/forezp/SpringCloudLearning/tree/master/chapter11
五、采用docker-compose編排并啟動(dòng)鏡像
docker-compose也可以構(gòu)建鏡像,現(xiàn)在我們采用docker-compose的方式構(gòu)建鏡像。
現(xiàn)在以eureka-server為例:
將Dockerfile移到eureka-server的主目錄,改寫ADD的相對(duì)路徑:
FROM?frolvlad/alpine-oraclejdk8:slim VOLUME?/tmp ADD?./target/eureka-server-0.0.1-SNAPSHOT.jar?app.jar #RUN?bash?-c?'touch?/app.jar' ENTRYPOINT?["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE?8761
同理修改service-hi目錄;
編寫構(gòu)建鏡像docker-compose-dev文件:
version:?'3' services: ??eureka-server: ????build:?eureka-server ????ports: ??????-?8761:8761 ??service-hi: ????build:?service-hi ????ports: ??????-?8763:8763
命令構(gòu)建鏡像并啟動(dòng):
docker-compose?-f?docker-compose.yml?-f?docker-compose-dev.yml?up
源碼下載:https://github.com/forezp/SpringCloudLearning/tree/master/chapter11-2
https://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ==&mid=2247483895&idx=1&sn=ef32c35cbcd73d4c81eea3bece18508f&chksm=9bed2085ac9aa9937117d4a377ce8b758b8af2a4c6f9e614f344f2d854c36235940e06fe61ec&scene=21#wechat_redirect
Docker 鏡像服務(wù) Spring Cloud Spring
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。