利用docker-compose一键部署

利用docker-compose一键部署

The ultimate measure of a man is not where he stands at the moments of comfort and convenience but where he stands at times of challenge and controversy

前言

采用maven聚合工程搭建一个简单的微服务,包括 注册中心服务提供者服务消费者,采用docker-compose一键部署

总体目录结构

利用docker-compose一键部署

快速编写微服务

common-api

很明显,这是一个公用api模块,里边就做一件事,提供接口约束

利用docker-compose一键部署

nacos-server-provider

很明显,这是服务的提供者,引入 common-api依赖,实现接口,并且提供对外访问url

利用docker-compose一键部署

利用docker-compose一键部署

nacos-server-consumer

我们使用 feign来实现RPC调用 privider提供的服务,引入对应的依赖


    org.springframework.cloud
    spring-cloud-starter-openfeign
    2.1.0.RELEASE

    com.netflix.archaius
    archaius-core
    0.7.6

            com.google.guava
            guava

注意,记得需要在启动类上添加上@EnableFeignClients注解,然后写一个feign调用接口,以及对应的兜底方法

利用docker-compose一键部署

利用docker-compose一键部署

同样需要有提供调用的url

利用docker-compose一键部署

后续调用的接口就是: nacos-server-consumer:端口/consumer/sayHello,然后就会找到微服务名称为nacos-server-provider的提供者,调用他提供的服务方法

编写docker-compose文件

除去微服务中心Nacos,其他的均配合Dockerfile完成镜像的构建

common-api的Dockerfile

(可以使用体积更加小的jdk源镜像,这里为了演示方便就怎么简单怎么来)

FROM java:8
MAINTAINER iamamg97@163.com

RUN echo "-------------------[nacos-server-common-api制作完成!!!]----------------------"

nacos-server-provider的Dockerfile

FROM java:8
MAINTAINER iamamg97@163.com

COPY /target/*.jar /provider.jar
ENTRYPOINT ["java","-jar","/provider.jar"]
RUN echo "-------------------[nacos-server-provider制作完成!!!]----------------------"

nacos-server-consumer的Dockerfile

FROM java:8
MAINTAINER iamamg97@163.com

COPY /target/*.jar /consumer.jar
ENTRYPOINT ["java","-jar","/consumer.jar"]
RUN echo "-------------------[nacos-server-consumer制作完成!!!]----------------------"

编写docker-compose.yml文件

前面的都没什么好讲的,现在来说一下这个 docker-compose.yml文件,这是docker-compose进行容器编排的时候需要用到的配置文件,先给出完整的yml文件,然后逐块进行说明

version: '3.0'
services:
  nacos-common-api:
    build:
      context: ./common-api
      dockerfile: Dockerfile
  nacos-server-provider:
    build:
      context: ./nacos-server-provider
      dockerfile: Dockerfile
    ports:
      - 9001:9001
    depends_on:
      - nacos-common-api
  nacos-server-consumer:
    build:
      context: ./nacos-server-consumer
      dockerfile: Dockerfile
    ports:
      - 9002:9002
    depends_on:
      - nacos-common-api

networks:
  default:
    external:
      name: nacos-net

docker-compose.yml主要包含三大块内容,分别是 versionservicesnetworks

  • 进来就需要给一个version版本号,这个版本号不是随意给的,是得根据你 docker版本来决定的 利用docker-compose一键部署 docker版本通过 docker --version可以得到,我服务器上的版本是1.31.1, 所以我version选择3.0即可 利用docker-compose一键部署
  • services块里边就是每个服务的定义,根据上述配置文件进一步分析
  • build代表是一个构建对象,配合 context上下文路径和 dockerfile文件进行构建
  • ports是暴露的端口,可以有多个,例如这里就是暴露对应服务的端口供外部访问
  • depends_on是依赖于哪一个容器,同样是可以有多个,例如上述的provider和consumer都依赖于公用的api接口
  • networks块管的是网络 上述意思就是使用容器外部的网络 nacos-net,这个是我预先通过 docker network create出来的,也可以不采用这样子的方式,具体的可以参考官方文档

开始部署

  • 首先我们对整个父工程进行clean,install ⚠️这里需要注意,打成jar的服务需要在pom文件中添加如下插件

            org.springframework.boot
            spring-boot-maven-plugin

  • 然后把nacos容器给启动起来利用docker-compose一键部署
  • 在父工程目录下执行 docker-compose up -d一键部署利用docker-compose一键部署
  • 测试一下是否部署成功,进入nacos可视化页面,发现这两个服务已经注册上来了利用docker-compose一键部署
  • 网页访问一下,也没有问题(⚠️如果访问不到的有可能是服务器安全组没有开放对应的端口) 利用docker-compose一键部署

取消部署

我们 docker ps一下,发现provider、consumer容器是正在运行的

利用docker-compose一键部署

直接在父工程目录下使用 docker-compose down一键停止对应的容器服务,再ps一下就发现容器已经停止了,最后一行由于使用网络是网络引入的,所以不会remove,如果在编排的时候没有指定网络, 实际上docker会自定义一个网络,待到down的时候也会remove掉

利用docker-compose一键部署

总结

可能本文的例子还是不能深刻的说明docker-compose容器编排的好处,因为就只有简单的几个服务,但是一旦服务多起来了,使用docker-compose的优势就体现出来了,而且其实最主要的还是docker-compose.yml的编写,这个真的需要下点功夫

(🤔说的好,我选k8s…)

Original: https://www.cnblogs.com/iamamg97/p/15694037.html
Author: 码农Amg
Title: 利用docker-compose一键部署

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608671/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Eureka多节点数据不同步问题

    前言 以下为找到问题后搜到的文章,这里做下记录,如果解决了您的问题可以为原位作者点赞 以下为原文 转载自joshua317博客 Spring Boot-yaml格式,eureka客…

    Java 2023年6月8日
    089
  • java POI实现Excel单元格数据换行

    Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); Sheet sheet = wb.createSheet();…

    Java 2023年5月29日
    0101
  • 手把手,带你用数据做好迭代复盘改进 | 敏捷开发落地指南

    摘要:高效落地敏捷开发,先从这3个关键活动着手,带你用数据做好迭代复盘改进。数据说话,借助云效项目协作·Projex 高效开展迭代复盘,高效落地敏捷开发。 在前 2 篇文章《敏捷开…

    Java 2023年6月8日
    0104
  • jdk自带监控程序jvisualvm的使用

    监控小程序的配置 生产环境tomcat的配置 编辑应用所在的tomcat服务器下的bin目录下的catalina.sh文件,修改如下: 配置如下内容: export JAVA_OP…

    Java 2023年5月30日
    091
  • java8 lambda操作

    package com.simon.java8; import java.util.*; import java.util.stream.Collectors; public cl…

    Java 2023年5月29日
    091
  • 史上最全SpringBoot学习笔记-动力节点王鹤2021版springboot

    1.1 JavaConfig 1.2 @ImporResource 1.3 @PropertyResource 2.1 介绍 2.2 创建Spring Boot项目 2.4 Spr…

    Java 2023年6月9日
    071
  • centos6无法安装nginx

    sed -i  “s|enabled=1|enabled=0|g” /etc/yum/pluginconf .d /fastestmirror .conf mv …

    Java 2023年5月30日
    088
  • Logistic Regression with a Neural Network mindset

    文章内容为吴恩达深度学习第二周的编程作业 ipynbg格式代码及数据集–>陈能豆 密码: o1bn #!/usr/bin/env python coding: u…

    Java 2023年6月5日
    0100
  • MybatisPlus——全网配置最全的代码生成器

    MybatisPlus代码生成器 这里讲解的是新版 (mybatis-plus 3.5.1+版本),旧版不兼容 官方文档:https://baomidou.com/(建议多看看官方…

    Java 2023年6月14日
    073
  • Java AQS 的胡言乱语修正版

    前言 适合读者:3 年以上经验的同学 谈到并发编程,基本上都会想到JDK 的 JUC 工具包,它包含 锁,并发工具类,原子类,线程池,还有阻塞队列,这是从网上找的一个大致的知识体系…

    Java 2023年6月5日
    0103
  • java中如何打印出一个类中所有变量呢?

    下文笔者将讲述,使用java代码打印出一个类中所有变量的方法分享,如下所示: 在日常开发中,我们经常需获取一个类的变量信息,然后操作变量,那么该如何编写此类代码呢?当然我们可以借助…

    Java 2023年6月15日
    091
  • 大刘终于当上架构师了

    今天这篇文章是架构师大刘的故事,架构师大刘——3 个 180 的男人(身高、体重、房子…………的贷款) 如果你想将来成为一名架构师,…

    Java 2023年6月7日
    075
  • 若依3.6.0使用Mybatis-plus分页失效以及完美替换Pagehelper

    一、前言 小编最近在经历后端框架的迁移,虽然不是小编来做,但是有个分页的情况让小编和一个同事去搞。说一下小编这边的需求:原来框架使用 Mybatis-plus进行分页,要更换的新框…

    Java 2023年6月15日
    095
  • 【最新版】30分钟教你搭建属于自己的个人博客

    【最新版】30分钟教你搭建属于自己的个人博客 简介: 本教程是以Hexo和Coding pages 为基础,搭建个人的静态博客网站 Hexo Hexo官网 快速、简洁且高效的博客框…

    Java 2023年6月8日
    0100
  • 环形链表_141_142

    给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 如果链表中存在环 ,则返回 true 。 …

    Java 2023年6月5日
    080
  • MySQL三:存储引擎

    转载~ 一、MySQL存储引擎概述 「数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据」。不同的存储引擎提供不同的存储机制、…

    Java 2023年6月8日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球