我的编程空间,编程开发者的网络收藏夹
学习永远不晚

docker封装Spring Cloud(单机版)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

docker封装Spring Cloud(单机版)

微服务统一在一个git项目里面,项目的大致结构如下:

./
├── auth-server
│   ├── pom.xml
│   └── class="lazy" data-src
├── common
│   ├── pom.xml
│   └── class="lazy" data-src
├── config-server
│   ├── pom.xml
│   └── class="lazy" data-src
├── eureka-server
│   ├── pom.xml
│   └── class="lazy" data-src
├── gateway
│   ├── pom.xml
│   └── class="lazy" data-src
├── pom.xml
└── service-user
    ├── pom.xml
    └── class="lazy" data-src

主要有5个微服务器,分别是eureka,config,auth,user,gateway

 

dockerfile

先来介绍eureka-server服务的dockerfile,其他微服务也是类似的,只不过jar包名和端口不一样,其他的都一样。

内容如下:

FROM mayan31370/openjdk-alpine-with-chinese-timezone:8-jdk
ADD repositories /etc/apk/repositories
ADD eureka-server.jar /
ADD run.sh /
RUN chmod 755 run.sh && mkdir -p /data/log/tomcat && apk update && apk add git

EXPOSE 8761
ENTRYPOINT [ "/run.sh"]

解释:

这里使用基础镜像为:mayan31370/openjdk-alpine-with-chinese-timezone:8-jdk

它使用的是openjdk-8,解决了中文乱码问题,时区问题等等。

/etc/apk/repositories 是alpine系统的更新源配置。相当于ubuntu的/etc/apt/soure.list

eureka-server.jar 是eureka微服务打的jar包

run.sh 是eureka微服务启动命令,由于命令过程,写在了shell脚本里面

RUN 里面写了一些命令,主要是添加脚本执行权限,创建日志目录,由于eureka微服务写的日志是这个,因此需要提前创建。

由于config微服务器,需要从gitlab拉取配置文件,因此还需要安装git命令才能执行:git clone http://xxx。

EXPOSE 是这容器需要暴露的端口

ENTRYPOINT 表示容器里面的服务器启动命令

 

repositories

 这个采用的的是阿里云的更新源

#aliyun
https://mirrors.aliyun.com/alpine/v3.6/main/
https://mirrors.aliyun.com/alpine/v3.6/community/

run.sh

这个是Java应用的启动命令

#!/bin/sh
java -Xms${JVM} -Xmx${JVM} -XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=256m -jar /eureka-server.jar

这里有一个jvm变量,待会docker启动时,会传入此变量。

 

构建镜像

上面介绍的几个文件,都在eureka-server目录。进入此目录,使用build命令构建

cd eureka-server
docker build -t eureka-server:1 .

运行镜像

先创建网桥,1台服务器只需要创建一次即可。

再运行容器

docker network create testnet
docker run -it -d --restart=always --name eureka-server --network testnet --network-alias eureka-server -p 8761:8761 -v /data/log/tomcat:/data/log/tomcat -e JVM=128m eureka-server:1

环境介绍

gitlab版本:GitLab 社区版 10.5.1 

jenkins版本:2.219

服务器:centos 7.6(单机)

 

由于jenkins服务器的操作系统为:centos 6.9,它不能安装docker,因此docker打包动作需要在服务器上面执行。

ansible分组

vi /etc/ansible/hosts

内容如下:

[test_java]
192.168.28.34

 

ansible playbook

发布模板

vi /opt/ansible/test/docker_java.yml

内容如下:

---
 # 需要传入变量HOSTS,ENV,PROJECT_NAME,PREFIX,PORT,JVM
 # 分别表示: 主机, 环境,项目名,路径前缀(拼接jenkins jar包路径),端口,jvm大小
 - hosts: "{{ HOSTS }}"
   remote_user: root
   become: yes
   become_method: sudo
   # 声明变量
   vars:
     # 远程项目基础目录
     BASE_DIR: "/data/code"
     # 远程项目目录名
     PROJECT_DIR: "{{ ENV }}_{{ PROJECT_NAME }}_{{ PORT }}"
     # 完整的jenkins 项目跟路径
     JENKINS_DIR: "/data/jenkins_data/workspace/{{ JOB_NAME }}/{{ PREFIX }}"
   tasks:
    #删除原来的包
     - name: move old package
       file: path={{ BASE_DIR }}/{{ PROJECT_DIR }}/{{ PROJECT_NAME }}.jar state=absent
    #同步jar包到目标服务器
     - name: synchronous jar packet
       synchronize:
         class="lazy" data-src: "{{ JENKINS_DIR }}/target/{{ PROJECT_NAME }}.jar"
         dest: "{{ BASE_DIR }}/{{ PROJECT_DIR }}/"
    #复制jmx_exporter文件
     - name: copy repositories
       shell: \cp /data/alpine/repositories {{ BASE_DIR }}/{{ PROJECT_DIR }}/
    #同步dockerfile到目标服务器
     - name: synchronous dockerfile
       synchronize:
         class="lazy" data-src: "{{ JENKINS_DIR }}/dockerfile"
         dest: "{{ BASE_DIR }}/{{ PROJECT_DIR }}/"
    #同步run.sh到目标服务器
     - name: synchronous run.sh
       synchronize:
         class="lazy" data-src: "{{ JENKINS_DIR }}/run.sh"
         dest: "{{ BASE_DIR }}/{{ PROJECT_DIR }}/"

    # 打包镜像
     - name: docker build
       shell: cd {{ BASE_DIR }}/{{ PROJECT_DIR }} && docker build -t {{ PROJECT_NAME }}:{{ BUILD_NUMBER }} .
    #删除之前的docker
     - name: docker rm image
       shell: docker rm -f {{ PROJECT_NAME }}
       ignore_errors: yes

    #启动docker
     - name: docker run image
       # # 提前创建bridge网络:docker network create testnet
       shell: docker run -it -d --restart=always --name {{ PROJECT_NAME }} --network testnet --network-alias {{ PROJECT_NAME }} -p {{ PORT }}:{{ PORT }} -v /data/log/tomcat:/data/log/tomcat -e JVM={{ JVM }} {{ PROJECT_NAME }}:{{ BUILD_NUMBER }}
     - name: view port,Wait for 55 seconds
       shell: sleep 55;docker exec {{ PROJECT_NAME }} netstat -anpt|grep {{ PORT }}

 

回滚模板

vi /opt/ansible/test/docker_java_rollback.yml

内容如下:

---
 # 需要传入变量HOSTS,PROJECT_NAME,PORT,JVM,BUILD_ID
 # 分别表示: 主机, 项目名,端口,jvm大小,回滚的构建ID
 - hosts: "{{ HOSTS }}"
   remote_user: root
   become: yes
   become_method: sudo

   tasks:
    #删除之前的docker
     - name: docker rm image
       shell: docker rm -f {{ PROJECT_NAME }}
       ignore_errors: yes

    #启动docker
     - name: docker run image
       # # 提前创建bridge网络:docker network create testnet
       shell: docker run -it -d --restart=always --name {{ PROJECT_NAME }} --network testnet --network-alias {{ PROJECT_NAME }} -p {{ PORT }}:{{ PORT }} -v /data/log/tomcat:/data/log/tomcat -e JVM={{ JVM }} {{ PROJECT_NAME }}:{{ BUILD_ID }}
     - name: view port,Wait for 55 seconds
       shell: sleep 55;docker exec {{ PROJECT_NAME }} netstat -anpt|grep {{ PORT }}

 

新建job

新建一个job,名字为:test_eureka_server,使用自由风格

通用配置

1.png

 

参数化构建

1.png

 

 源码管理

1.png

 

 构建

 1.png

 

 执行shell

1.png

 

完整内容如下:

case $Status  in
  Deploy)
    echo "Status:$Status"
    ansible-playbook -v /opt/ansible/test_java.yml -e "HOSTS=test_java JOB_NAME=${JOB_NAME} BUILD_NUMBER=${BUILD_NUMBER} ENV=test PROJECT_NAME=eureka-server PREFIX=eureka-server PORT=8761 JVM=128m"
    echo "Completing!"
    ;;
  Rollback)
    echo "Status:$Status"
    echo "BUILD_ID:$BUILD_ID"
    ansible-playbook -v /opt/ansible/test_java_rollback.yml -e "HOSTS=test_java JOB_NAME=${JOB_NAME} BUILD_ID=${BUILD_ID} PROJECT_NAME=eureka-server PORT=8761 JVM=128m"
    echo "Completing!"
    ;;
  *)
  exit
    ;;
esac

 

点击最下面的保存,最后点击构建即可

1.png

 

 发布时,build_id无需填写。回滚时,选择Rollback,输入指定的build_id即可。

1.png


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

docker封装Spring Cloud(单机版)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

docker封装Spring Cloud(单机版)

微服务统一在一个git项目里面,项目的大致结构如下:./├──auth-server│├──pom.xml│└──src├──common│├──pom.xml│└──src├──config-server│├──pom.xml│└──sr
2023-01-31

jenkins发布Spring Cloud(单机版)

有一台测试服务器,需要部署Spring Cloud。通过Jenkins来发布!环境说明gitlab版本:GitLab 社区版 10.5.1jenkins版本:2.219测试服务器:操作系统为centos7.6项目说明微服务统一在一个git项
2023-01-31

Centos7安装Greenplum5.3单机版教程

环境:centos7 ,Greenplum5.31. Greenplum 5.3 下载安装包下载 https://download.csdn.net/download/Angel_asp/25520724数据库源码地址:https://github.com/g
Centos7安装Greenplum5.3单机版教程
2020-11-25

flutter怎么封装点击菜单工具栏组件checkBox多选版

这篇“flutter怎么封装点击菜单工具栏组件checkBox多选版”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“flutt
2023-06-30

RabbitMQ单机版部署安装的示例分析

这篇文章主要介绍了RabbitMQ单机版部署安装的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的
2023-06-29

如何安装Hadoop单机版和全分布式

这篇文章主要介绍“如何安装Hadoop单机版和全分布式”,在日常操作中,相信很多人在如何安装Hadoop单机版和全分布式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何安装Hadoop单机版和全分布式”的疑
2023-06-09

Hadoop单机版和全分布式(集群)安装

Hadoop,分布式的大数据存储和计算, 免费开源!有Linux基础的同学安装起来比较顺风顺水,写几个配置文件就可以启动了,本人菜鸟,所以写的比较详细。为了方便,本人使用三台的虚拟机系统是Ubuntu-12。设置虚拟机的网络连接使用桥接方式
2022-06-04

Linux平台HBase单机版如何安装和配置

这篇文章主要介绍了Linux平台HBase单机版如何安装和配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。下载HBase for linux平台的tar包并解压缩,本例为h
2023-06-03

linux环境不使用hadoop安装单机版spark的方法

大数据持续升温, 不熟悉几个大数据组件, 连装逼的口头禅都没有。 最起码, 你要会说个hadoop, hdfs, mapreduce, yarn, kafka, spark, zookeeper, neo4j吧, 这些都是装逼的必备技能。
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录