SpringCloud+Docker项目部署经验

一、服务器初始化

1. Linux 服务器安装宝塔面板

2.使用ssh root@ip 的方式远程连接

3.安装Docker ,参考:http://www.xiefeng.org/?id=3中的Docker安装

二、项目配置

1.项目中 eureka 配置需加上: prefer-ip-address: true 具体配置列如:

eureka:

  instance:

    prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址

  client:

    serviceUrl:

      defaultZone: http://xxx.xxx.xxx.xxx :9000/eureka/ #ip+port

    register-with-eureka: false

    fetch-registry: false

2.其余微服务的yml文件中也需配置:prefer-ip-address: true 具体配置列如:

eureka:

instance:

    lease-renewal-interval-in-seconds: 60 #没过60秒给注册中心发送心跳

    lease-expiration-duration-in-seconds: 120 #超过120秒没发送心跳,让注册中心删除实例

    prefer-ip-address: true

  client:

    service-url:

      defaultZone: http://xxx.xxx.xxx.xxx:9000/eureka #ip+port

3.微服务的pom.xml文件,配置打包插件,具体配置列如:

<build>

        <finalName>${project.artifactId}</finalName>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

            <!-- 跳过单元测试 -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-surefire-plugin</artifactId>

                <configuration>

                    <skipTests>true</skipTests>

                </configuration>

            </plugin>

            <plugin>

                <groupId>com.spotify</groupId>

                <artifactId>docker-maven-plugin</artifactId>

                <version>1.0.0</version>

                <configuration>

                    <imageName>${project.artifactId}</imageName>

                    <dockerDirectory>${project.basedir}</dockerDirectory>

                    <resources>

                        <resource>

                            <targetPath>/</targetPath>

                            <directory>${project.build.directory}</directory>

                            <include>${project.build.finalName}.jar</include>

                        </resource>

                    </resources>

                </configuration>

                <!-- 运行命令 mvn clean package docker:build 打包并生成docker镜像 -->

            </plugin>

        </plugins>

    </build>

4.编译项目并打包 ,使用idea自带的打包方式 : 右侧Maven按钮 -> 项目[root]->双击package ->打包成功,获取jar包;

三. 服务器创建文件夹(使用宝塔面板)

1.在服务器非系统盘符中(如果有)创建对应文件夹,以项目为例如下:

1)  mhxs-eureka-server (eureka注册与发现)

2)  mhxs-web-comment-api (客户端)

3)  mhxs-web-novel-api (客户端)

4)  mhxs-web-user-api (客户端)

5)  mhxs-gateway (网关zuul,集成了swagger2)

2.上传对应的jar文件到对应对应的文件夹中.

3.在对应文件夹中的分别创建Dockerfile文件,并编辑内容例如:

FROM java:8

MAINTAINER "维护者:ww" 

VOLUME /www/jarslogs

ADD mhxs-web-user-api-1.jar /app.jar

EXPOSE 9003

CMD java -jar /app.jar

注1:其中微服务jar包修改了版本(如:xx-1.jar,xxx-2.jar,xxx-3.jar,....),对应文件夹下的同理修改,目的是为了方便后期版本回退.

注2:注意修改对应的jar名称和端口

4.编写创建镜像的脚本文件 : build_images.sh 和 相应jar文件夹一级,具体内容列如:

#!/usr/bin/env bash

set -eo pipefail

modules=(mhxs-eureka-server mhxs-web-comment-api mhxs-web-novel-api mhxs-web-user-api mhxs-gateway)

for module in "${modules[@]}"; do

    docker build -t ${module} /www/jars/${module}

done

注:其中modules中的为对应的 jar文件夹名称

5.使用ssh连接到linux服务器,进入到build_image.sh 文件夹下,创建Docker镜像,操作如下:

sh build_image.sh

6.查看镜像

Docker images

7.在jar包文件夹同一层中创建启动镜像脚本:start_services.sh具体内容例如:

#!/bin/bash

# eureka-server服务器检测

serverStatus=0

# 访问eureka注册中心,获取http状态码

CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code}  http://api.badgerlibrary.com:9000`

# 判断状态码为200

if [[ $CODE -eq 200 ]]; then

    serverStatus=1

else 

    serverStatus=0

fi

# eureka-server服务器异常,启动服务器

if [[ $serverStatus -eq 0 ]]; then

    echo "eureka-server服务启动中......."

    docker run -d -p 9000:9000 mhxs-eureka-server

    while :

        do

            # 访问eureka注册中心,获取http状态码

            CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code}  http://api.badgerlibrary.com:9000`

            # 判断状态码为200

            if [[ $CODE -eq 200 ]]; then

                # 输出绿色文字,并跳出循环

                echo -e "\033[42;34m server is ok \033[0m"

                break

            else

                # 暂停1秒

                echo -e "server is starting >>>>>>"

                sleep 1

            fi

        done

    # while结束时,也就是eureka启动完成后,执行容器中的run.sh。

    echo -e "\033[42;34m eureka-server 启动成功 \033[0m"   


    sleep 1

    echo -e "comment 开始启动"

    docker run -d -p 9001:9001 mhxs-web-comment-api


    sleep 1

    echo -e "novel 开始启动"

    docker run -d -p 9002:9002 mhxs-web-novel-api


    sleep 1

    echo -e "user 开始启动"

    docker run -d -p 9003:9003 mhxs-web-user-api


    sleep 1

    echo -e "gateway 开始启动"

    docker run -d -p 8088:8088 mhxs-gateway 

    echo -e "comment/novel/user/gateway 启动中,请稍后查看:http://api.badgerlibrary.com:9000"

else

    echo "server 服务正常"

    ##### 检测comment服务

    CODEComment=`curl -I -m 10 -o /dev/null -s -w %{http_code}  https://api.badgerlibrary.com/api/comment/index`

    # 判断状态码为200

    if [[ $CODEComment -eq 200 ]]; then

        echo "comment 服务正常"

    else

        echo "comment 服务异常,重启中......."

        docker run -d -p 9001:9001 mhxs-web-comment-api

    fi

    sleep 1

    ##### 检测novel服务

    CODENovel=`curl -I -m 10 -o /dev/null -s -w %{http_code}  https://api.badgerlibrary.com/api/novel/index`

    # 判断状态码为200

    if [[ $CODENovel -eq 200 ]]; then

        echo "novel 服务正常"

    else

        echo "novel 服务异常,重启中......."

        docker run -d -p 9002:9002 mhxs-web-novel-api

    fi

    sleep 1

    ##### 检测user服务

    CODEUser=`curl -I -m 10 -o /dev/null -s -w %{http_code}  https://api.badgerlibrary.com/api/user/index`

    # 判断状态码为200

    if [[ $CODEUser -eq 200 ]]; then

        echo "user 服务正常"

    else

        echo "user 服务异常,重启中......."

        docker run -d -p 9003:9003 mhxs-web-user-api

    fi

    sleep 1

    ##### 检测gateway服务

    CODEGateway=`curl -I -m 10 -o /dev/null -s -w %{http_code}  https://api.badgerlibrary.com/doc.html`

    # 判断状态码为200

    if [[ $CODEGateway -eq 200 ]]; then

        echo "gateway 服务正常"

    else

        echo "gateway 服务异常,重启中......."

        docker run -d -p 8088:8088 mhxs-gateway

    fi 

fi

注1: 其中CODE用于检测对应服务是否已经启动成功,需根据具体项目修改.

注2: 启动方式分为全顺序启动和非全顺序启动

8: 查看镜像容器:

docker ps -a

9:更新jar:

1) docker ps -a 查看全部容器

2) docker stop CONTAINER ID CONTAINER ID CONTAINER ID .... 方式停止镜像运行,关闭服务

    注: CONTAINER ID 为对应容器的ID

3) docker rm CONTAINER ID CONTAINER ID CONTAINER ID .... 方式删除镜像容器

4) docker rmi IMAGE ID  IMAGE ID  IMAGE ID  .... 方式删除对应镜像

5) docker images 查看镜像列表,确认需要删除的镜像全部删除.

6) 按照对应的1到8的步骤,更新jar。

10.查看日志,有两种方法

1)直接通过宝塔面板可以找到对应日志位置:

日志默认都会以json-file的格式存储于/var/lib/docker/containers/<容器id>/<容器id>-json.log下

2) 使用命令查看

docker logs -f 容器ID

-f :不间断持续输出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354