史上最简单的SpringCloud教程第⼗⼀篇:docker部署springcloud项⽬
⼀、docker简介
Docker是⼀个开源的引擎,可以轻松的为任何应⽤创建⼀个轻量级的、可移植的、⾃给⾃⾜的容器。开发者在笔记本上编译测试通过的容器可以批量地在⽣产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集和其他的基础应⽤平台。
Docker通常⽤于如下场景:
web应⽤的⾃动化打包和发布;
⾃动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应⽤;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建⾃⼰的PaaS环境。
Docker 的优点
1、简化程序:
Docker 让开发者可以打包他们的应⽤以及依赖包到⼀个可移植的容器中,然后发布到任何流⾏的 Linux 机器上,便可以实现虚拟化。
Docker改变了虚拟化的⽅式,使开发者可以直接将⾃⼰的成果放⼊Docker中进⾏管理。⽅便快捷已经是 Docker的最⼤优势,过去需要⽤数天乃⾄数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
2、避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!⽐如 Docker 镜像;Docker 镜像中包含了运⾏环境和配置,所以Docker 可以简化部署多种应⽤实例⼯作。⽐如 Web 应⽤、后台应⽤、数据库应⽤、⼤数据应⽤⽐如 Hadoop 集、消息队列等等都可以打包成⼀个镜像部署。
3、节省开⽀:
⼀⽅⾯,云计算时代到来,使开发者不必为了追求效果⽽配置⾼额的硬件,Docker 改变了⾼性能必然⾼价格的思维定势。Docker 与云的结合,让云空间得到更充分的利⽤。不仅解决了硬件管理的问题,也改变了虚拟化的⽅式。
上⾯⽂字参考了相关⽂章;另,关于docker 的安装和基本的使⽤见。
⼆、准备⼯作
环境条件:
linux系统,不建议windows
docker最新版本
jdk 1.8
maven3.0
本⽂采⽤的⼯程来⾃第⼀篇⽂章的⼯程,采⽤maven的⽅式去构建项⽬,并采⽤docker-maven-plugin去构建docker镜像。
三、改造⼯程、构建镜像
改造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>docker打包镜像
</plugin>
<!-- end::plugin[] -->
</plugins>
</build>
Spotify 的 docker-maven-plugin 插件是⽤maven插件⽅式构建docker镜像的。
imageName指定了镜像的名字,本例为 forep/eureka-server
dockerDirectory指定 Dockerfile 的位置
resources是指那些需要和 Dockerfile 放在⼀起,在构建镜像时使⽤的⽂件,⼀般应⽤ jar 包需要纳⼊。修改下配置⽂件:
server:
port: 8761
eureka:
instance:
prefer-ip-address: true
client:
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","-d=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8761
docker file编写指令:
FROM
FROM <image>
FROM <image>:<tag>
FROM <image> <digest>
FROM指令必须指定且需要在Dockerfile其他指令的前⾯,指定的基础image可以是官⽅远程仓库中的,也可以位于本地仓库。后续的指令都依赖于该指令指定的image。当在同⼀个Dockerfile中建⽴多个镜像时,可以使⽤多个FROM指令。
VOLUME
格式为:
VOLUME ["/data"]
使容器中的⼀个⽬录具有持久化存储数据的功能,该⽬录可以被容器本⾝使⽤,也可以共享给其他容
器。当容器中的应⽤有持久化数据的需求时可以在Dockerfile中使⽤该指令。
ADD
从src⽬录复制⽂件到容器的dest。其中src可以是Dockerfile所在⽬录的相对路径,也可以是⼀个URL,还可以是⼀个压缩包
ENTRYPOINT
指定Docker容器启动时执⾏的命令,可以多次设置,但是只有最后⼀个有效。
EXPOSE
为Docker容器设置对外的端⼝号。在启动时,可以使⽤-p选项或者-P选项。
构建镜像
执⾏构建docker镜像maven命令:
mvn clean
mvn package docker:build
构建eureka-server镜像成功。
同理构建service-hi镜像
pom⽂件导⼊同eurek-server
修改下配置⽂件:
eureka:
client:
serviceUrl:
defaultZone: eureka-server:8761/eureka/ # 这个需要改为eureka-server server:
port: 8763
spring:
application:
name: service-hi
在这⾥说下:defaultZone发现服务的host改为镜像名。
dockefile 编写同eureka-server
构建镜像:
mvn clean
mvn package docker:build
这时我们运⾏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应⽤的⼯具。使⽤Compose,你可以在⼀个配置⽂件(yaml格式)中配置你应⽤的服务,然后使⽤⼀个命令,即可创建并启动配置中引⽤的所有服务。下⾯我们进⼊Compose的实战吧。
采⽤docker-compose的⽅式编排镜像,启动镜像:
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
发现2个镜像按照指定的顺序启动了。
五、采⽤docker-compose编排并启动镜像
docker-compose也可以构建镜像,现在我们采⽤docker-compose的⽅式构建镜像。
现在以eureka-server为例:
将Dockerfile移到eureka-server的主⽬录,改写ADD的相对路径:
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","-d=file:/dev/./urandom","-jar","/app.jar"]
EXPOSE 8761
同理修改service-hi⽬录;
编写构建镜像docker-compose-dev⽂件:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。