Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务

冒泡APP(升级版)之基于docker-compose部署微服务

      • 1. 将项目打成jar包
      • 2. 在docker容器中安装docker-compose
      • 3. 基于docker-compose部署微服务

前言:随着项目初始化的结束,接踵而来的问题则是我们应该如何去部署这些服务,如果依然采用之前单体项目的部署方式,那无疑是非常消耗时间的,有点事倍功半的感觉,部署起来会非常不方便。目前公司采用的是Jenkins+Gitlab自动化部署,这种方式我也有去考虑过,不过感觉有点不太适合,因为这需要更多的服务器资源来配合完成。比较了几款当下非常流行的部署技术,最终考虑选择使用docker-compose来进行部署,因为目前的这些服务都会被部署在同一台服务器上面,使用docker-compose相对而言会更加的适合一些。为了服务的成功部署以及运行,小主今日从腾某云上又购置了一台2核4G的服务器,即将进入今日的部署研究工作,希望这次的分享能够给大家带来帮助。

Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第1张图片

1. 将项目打成jar包

部署工作的开始需要考虑的是如何将项目打成jar包并成功运行。我们需要将bubble-diary-service、bubble-member-service以及bubble-gateway打成jar包,由于目前没有搭建maven私服,只能使用mvn install命令将需要依赖的jar/pom工程打入本地maven仓库,在执行打包命令之前,如果是jar工程的话需要在pom.xml文件中加入maven打包插件。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
        plugin>
    plugins>
build>

加入打包插件后,我们在将bubble-common-base、bubble-member-api等工程打成jar包的时候出现了异常,异常如下:

Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.4.2:repackage (repackage) on project bubble-common-base: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.4.2:repackage failed: Unable to find main class

经过错误的描述信息,我们可以知道这是因为bubble-common-base、bubble-member-api等工程中没有加入主启动类所导致的异常。因此我们可以将maven插件给过滤掉。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
            <configuration>
                <skip>trueskip>
            configuration>
        plugin>
    plugins>
build>

当然,bubble-common-base、bubble-member-api等工程将maven插件去掉也可以解决install失败的问题。
注意:在打jar包之前需要将所有项目都打入本地maven仓库哟!(mvn install)
Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第2张图片
Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第3张图片

把所有需要被依赖的工程打入到本地maven仓库之后,我们就可以将bubble-diary-service、bubble-member-service以及bubble-gateway这些工程打成jar包啦。(mvn clean package)

Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第4张图片
打成的jar包会生成在target目录下面。
Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第5张图片

2. 在docker容器中安装docker-compose

安装开始的第一步当然是得先打开那可爱的FinalShell工具呀嘻嘻嘻。
Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第6张图片
1.从github上下载docker-compose二进制文件进行安装

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

不过由于github的下载速度非常慢,我这里选择从daocloud上下载。

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第7张图片
2.添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

3.测试安装结果

docker-compose --version

Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第8张图片
有一说一,安装docker-compose实在是太简单了,连我这种Java开发小白也能上手运维部署,docker真是太牛了。

3. 基于docker-compose部署微服务

在部署之前,我们需要去简单的学习一下dockerfile以及docker-compose等相关知识,在这里我就先不聊这些题外话了。
OK,话不多说,开始进行部署!
准备工作:整理先前打包好的3个Jar包以及编写Dockerfile文件。

创建一个部署的文件夹
其目录结构如下所示:
-------bubble
--------------bubble-diary
---------------------Dockerfile
---------------------bubble-diary.jar
--------------bubble-member
---------------------Dockerfile
---------------------bubble-member.jar
--------------bubble-gateway
---------------------Dockerfile
---------------------bubble-gateway.jar
--------------docker-compose.yml

bubble-diary.Dockerfile

FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
# 复制文件到容器
ADD bubble-diary.jar /bubble-diary.jar
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","-Duser.timezone=GMT+08 -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m","/bubble-diary.jar","--spring.profiles.active=dc"]

bubble-member.Dockerfile

FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
# 复制文件到容器
ADD bubble-member.jar /bubble-member.jar
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","-Duser.timezone=GMT+08 -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m","/bubble-member.jar","--spring.profiles.active=dc"]

bubble-gateway.Dockerfile

FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
# 复制文件到容器
ADD bubble-gateway.jar /bubble-gateway.jar
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","-Duser.timezone=GMT+08 -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m","/bubble-gateway.jar","--spring.profiles.active=dc"]

docker-compose.yml

version: '3.0'
services:
  bubble-gateway:
    image: bubble-gateway:1.0.0 # 指定镜像名称
    build: ./bubble-gateway # 指定Dockerfile所在路径
    container_name: bubble-gateway # 指定启动容器名称
    ports:
      - 81:81
    volumes:
      - /etc/localtime:/etc/localtime:ro # 同步宿主机与容器时间,ro代表readonly只读
    restart: always
  bubble-member:
    image: bubble-member:1.0.0
    build: ./bubble-member
    container_name: bubble-member
    ports:
      - 8070:8070
    volumes:
      - /etc/localtime:/etc/localtime:ro
    restart: always
  bubble-diary:
    image: bubble-diary:1.0.0
    build: ./bubble-diary
    container_name: bubble-diary
    ports:
      - 8060:8060
    volumes:
      - /etc/localtime:/etc/localtime:ro
    restart: always

东西准备好了之后,我们在服务器的根目录上创建一个bubble文件夹,然后按照上面的目录结构上传到服务器
Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第9张图片

再进入到bubble目录下,执行docker-compose运行命令。

docker-compose up -d

Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第10张图片
Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第11张图片
补充几条命令用于杀死所有进程、删除所有容器以及所有镜像,方便部署。

docker kill $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)

下面的命令是基于Dockerfile构建镜像并运行,在执行命令的时候需要进入到有Dockerfile文件的目录。

docker build -f Dockerfile -t bubble-gateway:v1 .
docker run -it bubble-gateway:v1 

到了这里我们依然是访问不了的,因为我们还需要去腾讯云把端口开放出来。
Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第12张图片
OK,如果可以访问了,则说明已经成功部署
Mr. Cappuccino的第13杯咖啡——冒泡APP(升级版)之基于docker-compose部署微服务_第13张图片
好啦,到这里项目部署就已经结束啦,小伙伴们有什么疑问可以咨询小主哟

早成者未必有成,晚达者未必不达。不可以年少而自恃,不可以年老而自弃。

你可能感兴趣的:(Bubble,docker,mr,jenkins,docker-compose,运维)