javascript
SpringCloud学习成长之 十一 Docker部署cloud项目
一、docker簡介
Docker是一個開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個輕量級的、可移植的、自給自足的容器。開發(fā)者在筆記本上編譯測試通過的容器可以批量地在生產(chǎn)環(huán)境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集群和其他的基礎(chǔ)應(yīng)用平臺。?
Docker通常用于如下場景:
- web應(yīng)用的自動化打包和發(fā)布;
- 自動化測試和持續(xù)集成、發(fā)布;
- 在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺應(yīng)用;
- 從頭編譯或者擴展現(xiàn)有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環(huán)境。
Docker 的優(yōu)點
-
1、簡化程序:?
Docker 讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上,便可以實現(xiàn)虛擬化。Docker改變了虛擬化的方式,使開發(fā)者可以直接將自己的成果放入Docker中進行管理。方便快捷已經(jīng)是 Docker的最大優(yōu)勢,過去需要用數(shù)天乃至數(shù)周的 任務(wù),在Docker容器的處理下,只需要數(shù)秒就能完成。 -
2、避免選擇恐懼癥:?
如果你有選擇恐懼癥,還是資深患者。Docker 幫你 打包你的糾結(jié)!比如 Docker 鏡像;Docker 鏡像中包含了運行環(huán)境和配置,所以 Docker 可以簡化部署多種應(yīng)用實例工作。比如 Web 應(yīng)用、后臺應(yīng)用、數(shù)據(jù)庫應(yīng)用、大數(shù)據(jù)應(yīng)用比如 Hadoop 集群、消息隊列等等都可以打包成一個鏡像部署。 -
3、節(jié)省開支:?
一方面,云計算時代到來,使開發(fā)者不必為了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思維定勢。Docker 與云的結(jié)合,讓云空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。
?
二、準(zhǔn)備工作
環(huán)境條件:
- linux系統(tǒng),不建議windows
- docker最新版本
- jdk 1.8
- maven3.0
本文采用的工程來自第一篇文章的工程,采用maven的方式去構(gòu)建項目,并采用docker-maven-plugin去構(gòu)建docker鏡像。
三、改造工程、構(gòu)建鏡像
改造eureka-server工程
在pom文件加上插件:
<build><plugins><plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- tag::plugin[] --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.3</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> <!-- end::plugin[] --> </plugins> </build>?
Spotify 的 docker-maven-plugin 插件是用maven插件方式構(gòu)建docker鏡像的。
- imageName指定了鏡像的名字,本例為 forep/eureka-server
- dockerDirectory指定 Dockerfile 的位置
- resources是指那些需要和 Dockerfile 放在一起,在構(gòu)建鏡像時使用的文件,一般應(yīng)用 jar 包需要納入。
修改下配置文件:
server:port: 8761 eureka:instance:prefer-ip-address: trueclient:registerWithEureka: false fetchRegistry: false編寫dockerfile文件:
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 8761docker file編寫指令:
- FROM
FROM指令必須指定且需要在Dockerfile其他指令的前面,指定的基礎(chǔ)image可以是官方遠程倉庫中的,也可以位于本地倉庫。后續(xù)的指令都依賴于該指令指定的image。當(dāng)在同一個Dockerfile中建立多個鏡像時,可以使用多個FROM指令。
- VOLUME
格式為:
VOLUME ["/data"]使容器中的一個目錄具有持久化存儲數(shù)據(jù)的功能,該目錄可以被容器本身使用,也可以共享給其他容器。當(dāng)容器中的應(yīng)用有持久化數(shù)據(jù)的需求時可以在Dockerfile中使用該指令。
- ADD
從src目錄復(fù)制文件到容器的dest。其中src可以是Dockerfile所在目錄的相對路徑,也可以是一個URL,還可以是一個壓縮包
- ENTRYPOINT
指定Docker容器啟動時執(zhí)行的命令,可以多次設(shè)置,但是只有最后一個有效。
- EXPOSE
為Docker容器設(shè)置對外的端口號。在啟動時,可以使用-p選項或者-P選項。
構(gòu)建鏡像
執(zhí)行構(gòu)建docker鏡像maven命令:
mvn clean mvn package docker:build構(gòu)建eureka-server鏡像成功。
同理構(gòu)建service-hi鏡像
- pom文件導(dǎo)入同eurek-server
- 修改下配置文件:
在這里說下:defaultZone發(fā)現(xiàn)服務(wù)的host改為鏡像名。
-
dockefile 編寫同eureka-server
-
構(gòu)建鏡像:
這時我們運行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啟動鏡像
Compose 是一個用于定義和運行多容器的Docker應(yīng)用的工具。使用Compose,你可以在一個配置文件(yaml格式)中配置你應(yīng)用的服務(wù),然后使用一個命令,即可創(chuàng)建并啟動配置中引用的所有服務(wù)。下面我們進入Compose的實戰(zhàn)吧。
采用docker-compose的方式編排鏡像,啟動鏡像:
version: '3' services:eureka-server:image: forezp/eureka-serverrestart: alwaysports:- 8761:8761 service-hi: image: forezp/service-hi restart: always ports: - 8763:8763輸入命令: docker-compose up
發(fā)現(xiàn)2個鏡像按照指定的順序啟動了。
?
五、采用docker-compose編排并啟動鏡像
docker-compose也可以構(gòu)建鏡像,現(xiàn)在我們采用docker-compose的方式構(gòu)建鏡像。
現(xiàn)在以eureka-server為例:?
將Dockerfile移到eureka-server的主目錄,改寫ADD的相對路徑:
?
同理修改service-hi目錄;
編寫構(gòu)建鏡像docker-compose-dev文件:
version: '3' services:eureka-server:build: eureka-serverports:- 8761:8761 service-hi: build: service-hi ports: - 8763:8763?
命令構(gòu)建鏡像并啟動:
docker-compose -f docker-compose.yml -f docker-compose-dev.yml up?
轉(zhuǎn)載于:https://www.cnblogs.com/kuoAT/p/9144325.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的SpringCloud学习成长之 十一 Docker部署cloud项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: paraloo是什么型号
- 下一篇: gradle idea java ssm