将spring-cloud项目打包成docker镜像并启动

  1. 项目地址
  2. 步骤
  • 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)

  1. 安装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 应用

  1. 使用docker-compose 同时部署多个docker 应用
  • 修改spring-cloud-eureka-client01pom.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-client01application.yml配置
  • 修改 spring-cloud-eureka-server01中application.yml`配置
  • 修改 spring-cloud-eureka-server02application.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结果