将spring-cloud项目打包成docker镜像并启动
- 项目地址
- 步骤
- pom.xml 里面加入如下配置:
<build>
<finalName>spring-cloud-eureka-server01-service</finalName>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<!-- leegoo0820/spring-cloud-eureka-server01-service(name):0.0.1(tag)-->
<imageName>leegoo0820/spring-cloud-eureka-server01-service:0.0.1</imageName>
<!-- 基础镜像 -->
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 目录地址,也就是target生成的地址 -->
<directory>${project.build.directory}</directory>
<!--需要复制的jar包 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
- 将项目文件传到linux 服务器:
- 使用maven命令进行打包(需要提前配置maven(3.5版本已经失效,需要自己去apache官网查看最新的下载地址) 环境,和java环境才能进行打包):
mvn clean package docker:build
- 然后使用
docker images
会看到spring-cloud-eureka-server01-service
镜像 - 随后启动
[root@localhost spring-cloud-eureka-server]# docker run -p 8761:8761 --name my_eureka leegoo0820/spring-cloud-eureka-server01-service:0.0.1
- 如果希望只执行
maven clean package
达到mvn clean package docker:build
的效果 ,那么可以在pom.xml
文件里面增加如下配置,简单理解为就是配置了execution
后,会执行对应的命令,当前命令是build
<build>
<finalName>spring-cloud-eureka-server01-service</finalName>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<!-- 新加部分开始 -->
<executions>
<execution>
<id>build-images</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<!-- 新加部分结束 -->
<configuration>
<!-- leegoo0820/spring-cloud-eureka-server01-service(name):0.0.1(tag)-->
<imageName>leegoo0820/spring-cloud-eureka-server01-service:0.0.1</imageName>
<!-- 基础镜像 -->
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 目录地址,也就是target生成的地址 -->
<directory>${project.build.directory}</directory>
<!--需要复制的jar包 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
安装docker-compose
(linux)
- 安装
docker-compose
(linux)
- 下载
docker-compose
(前提必须有docker)
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 授权
docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- 建立软链接(类似于在path 增加了
docker-compose
)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- 检查是否安装完成
[root@localhost my_files]# docker-compose --version
docker-compose version 1.24.0, build 0aa59064
- 增加
docker-compose
自动补全功能 (Place the completion script in/etc/bash_completion.d/
)
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
使用docker-compose 进行服务编排
- 首先在项目下创建
docker-compose.yml
文件, 比如我的项目名是spring-cloud-eureka-server
,那么就是spring-cloud-eureka-server/docker-compose.yml
- 编辑
docker-compose.yml
内容
version: "2"
services:
eurela:
image: spring-cloud-eureka-server_eurela
volumes: #挂载目录
- "/usr/tmp/data/eureka"
container_name: spring-cloud-eureka-server_eurela
build: . #找Dockerfile文件位置, .代表当前文件下的Dockerfile文件
ports: #开放端口
- "8767:8761"
- 将项目传入到linux 服务器,随后到达项目的目录下 ,执行
docker-compose
命令
docker-compose up -d
#-d 后台运行
#如果要删除刚运行的容器
# docker-compose stop 项目名 没有的话默认停止所有
# docker-compose rm 项目名 没有的话默认删除所有
使用docker-compose
同时部署多个docker 应用
- 使用
docker-compose
同时部署多个docker 应用
- 修改
spring-cloud-eureka-client01
中pom.xml
配置,加入如下内容 链接: - 修改
spring-cloud-eureka-server01
中的pom.xml
,加入如下内容 链接, - 修改
spring-cloud-eureka-server02
中的pom.xml
.加入如下内容 链接,
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<!-- leegoo0820/spring-cloud-eureka-server01-service(name):0.0.1(tag)-->
<imageName>leegoo0820/${project.artifactId}:${project.version}</imageName>
<forceTags>true</forceTags>
<!-- 基础镜像 -->
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 目录地址,也就是target生成的地址 -->
<directory>${project.build.directory}</directory>
<!--需要复制的jar包 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
- 修改
spring-cloud-eureka-client01
中application.yml
配置 - 修改
spring-cloud-eureka-server01中
application.yml`配置 - 修改
spring-cloud-eureka-server02
中application.yml
配置
eureka:
client:
service-url:
#此处新加配置 ,因为docker 中使用localhost是不能找到eureka服务器的,宿主机都是单独的ip段
#client 需要绑定多个eureka
#但是servier01 和但是servier02 只需要对方的 服务编排 "名字"即可,下方会增加服务编排 spring-cloud-eureka-server01 和 spring-cloud-eureka-server02配置
defaultZone: http://spring-cloud-eureka-server01:8761/eureka/,http://spring-cloud-eureka-server02:8761/eureka/
instance:
prefer-ip-address: true #ip注册
- 增加
docker-compose.yml
,内容如下,直达链接
version: "2"
services:
#此处就是服务编排的名称
spring-cloud-eureka-server01:
#image: 此处指定生成的image ,如果没有的话可能会去docker.io下载
image: leegoo0820/spring-cloud-eureka-server01-service:0.0.1-SNAPSHOT
volumes: #挂载目录
- "/usr/tmp/data/spring-cloud-eureka-server01"
container_name: spring-cloud-eureka-server_eureka01
build: .
ports: #开放端口
- "8761:8761"
#links:
# - spring-cloud-eureka-server02:discovery
#environment: 设置环境参数
# - spring.profile.active=dev
spring-cloud-eureka-server02:
#image: java 指定镜像名或者id,没有就会下载
image: leegoo0820/spring-cloud-eureka-server02-service:0.0.1-SNAPSHOT
volumes: #挂载目录
- "/usr/tmp/data/spring-cloud-eureka-server02"
container_name: spring-cloud-eureka-server_eureka02
build: .
ports: #开放端口
- "8762:8762"
spring-cloud-eureka-client01:
image: leegoo0820/spring-cloud-eureka-client01:0.0.1-SNAPSHOT
volumes: #挂载目录
- "/usr/tmp/data/spring-cloud-eureka-client01"
container_name: spring-cloud-eureka-client01
build: .
ports: #开放端口
- "8846:8846"
- 访问
http://192.168.109.133:8846/say
返回servier结果