jjzjj

【云原生】docker+k8微服务容器化实战

跳楼梯企鹅 2024-05-18 原文

博主昵称:跳楼梯企鹅
博主主页面链接:博主主页传送门

博主专栏页面连接:专栏传送门--网路安全技术
创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。
博主座右铭:发现光,追随光,成为光,散发光;
博主研究方向:渗透测试、机器学习 ;
博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;


 

目录

一、Docker

1.服务docker化

2.私有仓库管理

3.Docker下的服务通讯

二、服务编排

1.Kubernetes

2.Mesos

3.Swarm

三、CICD

1.Gitlab触发构建

2.Jenkins pipeline流水线

3.Kubect操作k8s集群

四、微服务入门

1.微服务入门

2.优势劣势

3.如何通讯

4.如何发现、更新和部署

五、微服务周边

1.SpringBoot

2.SpringCloud

3.Dubbo

六、微服务开发

1.服务划分

2.rpc通讯

3.跨语言调用


一、Docker

 

1.服务docker化

部署user-service

  • 编写Dockfile文件
#源镜像
FROM golang:1.13

#设置工作目录
WORKDIR $GOPATH/src

RUN mkdir user-service

COPY user-service $GOPATH/src/user-service


#切换工作目录
WORKDIR $GOPATH/src/user-service

RUN mkdir log

#暴露端口
EXPOSE 9090

#最终运行docker的命令
ENTRYPOINT  ["nohup","./user-service",">log/log.log", "&"]
  • 编写build.sh脚本
#!/bin/bash
rm -rf user-service
go build .
docker build -t mic-user-service -f Dockerfile .

执行build.sh构建镜像

  • 编写start.sh脚本
#!/bin/bash
docker stop mic_user_service
docker rm mic_user_service
docker run -p 9090:9090 --name mic_user_service -v /usr/local/docker/micservice/user-service/log:/go/src/user-service/log  -d mic-user-service

启动容器 ./start.sh

user-server服务依赖mysql服务,请访问 docker搭建mysql

部署user-edge-service

  • 编写Dockfile文件
#源镜像
FROM golang:1.13

#设置工作目录
WORKDIR $GOPATH/src

RUN mkdir user-edge-service

COPY user-edge-service $GOPATH/src/user-edge-service
COPY config.ini $GOPATH/src/user-edge-service


#切换工作目录
WORKDIR $GOPATH/src/user-edge-service
RUN mkdir log


#暴露端口
EXPOSE 9091

#最终运行docker的命令
ENTRYPOINT  ["nohup","./user-edge-service",">/dev/null", "&"]
  • 编写build.sh脚本
#!/bin/bash
rm -rf user-edge-service
go build .
docker build -t mic-user-edge-service:latest

执行build.sh构建镜像

  • 编写start.sh脚本
#!/bin/bash
docker stop mic_user_edge_service
docker rm mic_user_edge_service
docker run -p 9091:9091 --name mic_user_edge_service -v /usr/local/docker/micservice/user-edge-service/log:/go/src/user-edge-service/log -d mic-user-edge-service

启动容器 ./start.sh

使用docker-compose编排容器

上面的方式需要一个一个单独启动容器服务,我们可以是用docker-compose来管理容器

  • 安装docker-compose

    yum install docker-conpose

  • 编写docker-compose.yml

version: '3'

networks:
  default:
    external:
      name: micservice-network

services:
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    volumes:
      - /usr/local/docker/mysql/conf:/etc/mysql
      - /usr/local/docker/mysql/logs:/var/log/mysql
      - /usr/local/docker/mysql/data:/var/lib/mysql
    environment:
      - TZ="Asia/Shanghai"
  redis:
    image: redis:5.0.4
    ports:
      - 6379:6379
    volumes:
      - /usr/local/docker/redis/logs:/usr/local/redis/logs
      - /usr/local/docker/redis/redis.conf:/etc/redis_default.conf
      - /usr/local/docker/redis/data:/data
    environment:
      - TZ="Asia/Shanghai"
  mongo:
    image: mongo:latest
    ports:
      - 27017:27017
    volumes:
      - /usr/local/docker/mongo/data:/data/db
      - /usr/local/docker/mongo/conf/mongodb.cnf:/etc/mongo.conf
    environment:
      - TZ="Asia/Shanghai"
  user-service:
    image: mic-user-service:latest
    ports:
      - 9090:9090
    volumes:
      - /usr/local/docker/micservice/user-service/log:/go/src/user-service/log
    environment:
      - TZ="Asia/Shanghai"
  user-edge-service:
    image: mic-user-edge-service:latest
    ports:
      - 9091:9091
    links:
      - user-service
    volumes:
      - /usr/local/docker/micservice/user-edge-service/log:/go/src/user-edge-service/log
    environment:
      - TZ="Asia/Shanghai"
  • 相关命令
#启动所有服务
 docker-compose up -d 
 #启动某个
 docker-compose up user-service -d 
 # 停止所有容器服务
 docker-compose stop

资料来源

2.私有仓库管理

什么是 Harbor ?

  • Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
  • Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
  • Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

Harbor的特性:

  1. 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
  2. 基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
  3. 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
  4. 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  5. 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
  6. 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  7. 支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  8. Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

Harbor的构成:
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

 

1)Proxy: Harbor 的 Registry、 UI、Token 服务等组件,都处在nginx反向代理后边。该代理将来自浏览器、docker clients
的请求转发到后端不同的服务上。

2)Registry:负责储存Docker 镜像,并处理Docker push/pull命令。由于要对用户进行访问控制,即不同用户对Docker 镜像
有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,
Registry会通过公钥对Token进行解密验证。

3)Core services:Harbor的核心功能,主要提供以下3个服务:

  • UI (harbor-ui) :提供图形化界面,帮助用户管理Registry上的镜像 (image) ,并对用户进行授权。
  • WebHook:为了及时获取Registry上image 状态变化的情况,在Registry上配置 Webhook, 把状态变化传递给 UI 模块。
  • Token 服务:负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token,会被重定向到 Token 服务,获得 Token 后再重新向Registry 进行请求。

4)Database (harbor -db) :为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

5)Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。

6)Log collector (harbor-log) :负责收集其他组件的日志到一个地方。

 

3.Docker下的服务通讯

 

1. 每台机器上都有一个网卡,有的甚至有两个网卡 , ETHD 10.1.1.10/8就表示一个网卡

2. docker启动以后, 会出现一个docker0,我们可以通过ifconfig来查看

交换机一旦创建以后, 就会创建一个叫namespace的东西,名字叫做network namespace. 全名叫做网络命名空间.也就是上图中蓝色方框VethX,不同的网络命名空间会形成相互隔离,一端固定在容器内容, 成为虚拟网卡, 另一端固定在本机。

 只要多一个容器就会多一个veth。也就是说一端在容器里,另一端在本机里,作为连通的作用。 并且, 网络命名空间会将不同的网络隔离开来,各用个的。这样就实现了隔离,以及怎样与本机进行交互。这样,容器和容器之间就可以通讯了。  这解决的是容器和容器间进行通讯。 这是通过docker0网桥解决的。

二、服务编排

1.Kubernetes

kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

 安装

国内安装k8s途径

  • 使用kubeadmin离线安装
  • 使用阿里公有云平台k8s
  • 通过yum官方仓库
  • 二进制包形式安装,kubeasz

安装kubeadmin加载k8s镜像

# 以下命令在三台虚拟机执行 yz10  yz20  yz21
mkdir /usr/local/k8s-install
cd /usr/local/k8s-install

k8s离线部署

10.211.55.10  yz10   Master节点
10.211.55.20  yz20   Node节点
10.211.55.21  yz21   Node节点
# 1. 调整时区
timedatectl set-timezone Asia/Shanghai
# 2. 关闭selinux和防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
# 3. k8sadmin镜像下载附带对应的docker
# 4. 镜像上传到每个节点
mkdir -p /usr/local/k8s-install
scp -r kubernetes-1.14 root@yz10:/usr/local/k8s-install

# 5. 安装docker,记得配置加速器
tar -xf docker-ce-18.09.tar.gz
cd docker 
yum localinstall -y *.rpm

# 6. 确认cgroup为 cgroupfs
docker info|grep cgroup
# 7. 安装kubeadm
tar -xf kube114-rpm.tar.gz
cd kube114-rpm
yum localinstall -y *.rpm

# 8. 关闭交换区
swapoff -a  #关闭
vi /etc/fstab
# 注释这行 永久关闭
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

# 9. 配置网桥
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

# 10. 通过镜像安装k8s
docker load -i k8s-114-images.tar.gz
docker load -i flannel-dashboard.tar.gz

2.Mesos

Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初由加州大学伯克利分校的是AMPLab开发的,后在Twitter得到广泛使用。

 

Mesos是一个分布式的架构,具有主从关系,master和slave。Zookeeper能做到首领选举(选mesos的master)等功能。要注意的是zookeeper也需要选举master。应用程序跑在frameworks上,它也是分布式的软件,包括scheduler和executor。图中蓝色部分是mesos本身,白色部分是需要自己开发的framework。这些需要自己开发的framework也需要考虑高可用性的问题,这算是mesos的缺点之一。Mesos使用protocol buffer和libprocess来进行通信。

1)zookeeper做为leader election。每个master起来的时候都要向zookeeper的quorum注册znode。

2)master主要用于管理slave node的状态,知道slave在哪儿,有哪些资源,同时知道各个框架的信息。比如Hadoop和MPI框架的基本信息。master还可以发resource offer。如果master down了,zookeeper可以马上从standby master里面选一个。因为几个master里面共享的东西很少,不需要数据的同步。

3)slave负责运行任务,同时不断的向master发消息,报告可用资源和在运行的任务的状态。这两种消息并不相同,报告任务状态的消息保证一定delivery,而其他消息并不保证。

4)framwork是一个分布式的应用,包括scheduler和executor。其中scheduler部分要和master紧密通信,接受master发送的offer,scheduler收到offer后决定是不是要跑某个task。executor真正的去执行任务。Offer的发送由master决定。

3.Swarm

Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
Swarm 和 Kubernetes 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些。
Docker Swarm 包含两方面:一个企业级的 Docker 安全集群,以及一个微服务应用编排引擎。
集群方面,Swarm 将一个或多个 Docker 节点组织起来,使得用户能够以集群方式管理它们。
Swarm 默认内置有加密的分布式集群存储(encrypted distributed cluster store)、加密网络(Encrypted Network)、公用TLS(Mutual TLS)、安全集群接入令牌 Secure Cluster Join Token)以及一套简化数字证书管理的 PKI(Public Key Infrastructure)。我们可以自如地添加或删除节点。
编排方面,Swarm 提供了一套丰富的 API 使得部署和管理复杂的微服务应用变得易如反掌。通过将应用定义在声明式配置文件中,就可以使用原生的 Docker 命令完成部署。
此外,甚至还可以执行滚动升级、回滚以及扩缩容操作,同样基于简单的命令即可完成。
以往,Docker Swarm 是一个基于 Docker 引擎之上的独立产品。自 Docker 1.12 版本之后,它已经完全集成在 Docker 引擎中,执行一条命令即可启用。到 2018 年,除了原生 Swarm 应用,它还可以部署和管理 Kubernetes 应用。

从集群角度来说,一个 Swarm 由一个或多个 Docker 节点组成。这些节点可以是物理服务器、虚拟机、树莓派(Raspberry Pi)或云实例。唯一的前提就是要求所有节点通过可靠的网络相连。
节点会被配置为管理节点(Manager)或工作节点(Worker)。管理节点负责集群控制面(Control Plane),进行诸如监控集群状态、分发任务至工作节点等操作。工作节点接收来自管理节点的任务并执行。
Swarm 的配置和状态信息保存在一套位于所有管理节点上的分布式 etcd 数据库中。该数据库运行于内存中,并保持数据的最新状态。关于该数据库最棒的是,它几乎不需要任何配置,作为 Swarm 的一部分被安装,无须管理。
关于集群管理,最大的挑战在于保证其安全性。搭建 Swarm 集群时将不可避免地使用 TLS,因为它被 Swarm 紧密集成。
在安全意识日盛的今天,这样的工具值得大力推广。Swarm 使用 TLS 进行通信加密、节点认证和角色授权。自动密钥轮换(Automatic Key Rotation)更是锦上添花!其在后台默默进行,用户甚至感知不到这一功能的存在。
关于应用编排,Swarm 中的最小调度单元是服务。它是随 Swarm 引入的,在 API 中是一个新的对象元素,它基于容器封装了一些高级特性,是一个更高层次的概念。当容器被封装在一个服务中时,我们称之为一个任务或一个副本,服务中增加了诸如扩缩容、滚动升级以及简单回滚等特性。

三、CICD

1.Gitlab触发构建

Jenkins使用配置

安装Gitlab和Blue Ocean插件

安装Role-based Authorization Strategy插件

 Role-based Authorization Strategy插件用于角色的权限管理。

 新建用户,系统管理-->管理用户

 更改认证方式,系统管理 --> 全局安全配置,默认创建的用户登录后可以做任何操作,取决于默认的认证授权方式。

 创建角色,系统管理 --> Manage and Assign Roles

 对角色分配权限

 将用户分配到角色

 登录

2.Jenkins pipeline流水线

关于流水线(Pipline)

Jenkins 从 2.0 开始逐渐从一个 CI 工具转变成为 CD 工具,Pipeline 在其中扮演着至关重要的角色。配置由界面选择逐渐脚本化(采用 Groovy 脚本),我们可以将配置连同代码一起存放在代码仓库,实现版本控制。一次编写,到处运行。

在 Pipeline 中有两个主要关键字需要先简单的了解,可能有些地方还能见到 Step 关键字:

1. Stage:阶段,这其实就是我们将任务细分为多个过程。

2. Node:节点,前面提到过,Jenkins 是可以分布式的,Node 标记着具体在 Master 还是 Slave 运行这个构建。

修改之前的流水线配置

建议写好粘贴进去:

node {
    stage("拉取代码"){
        echo 'STEP 1:clone code'
    }
    stage("打包代码"){
        echo 'STEP 2:code package'
    }
    stage("上线发布"){
        echo 'STEP 3:deploy package'
    }
}

 Pipeline 语法说明

  1. 流水线支持两种语法:声明式和脚本式流水线。两种语法都支持构建持续交付流水线。且均可用在web ui或者Jenkinsfile中定义流水线,通常认为创建一个Jenkinsfile并将其检入源代码控制仓库是最佳实践。
  2. 创建jenkinsfile jenkinsfile是一个文本文件,它包含了Jenkins流水线的定义并被检入源代码控制仓库。下面的流水线实现了基本的三阶段持续交付流水线。 jenkinsfile(declarative pipeline)
pipeline{
    agent any
    stages{
        stage("Build"){
            steps{
                echo "building..."
            }
        }
        stage("Test"){
            steps{
                echo "Test..."
            }
        }
        stage("Deploy"){
            steps{
                echo "Deploy..."
            }
        }
    }
}

 

  • always: 无论流水线或阶段的完成状态如何,都允许在post部分运行该步骤。
  • changed: 只有当前流水线或阶段的完成状态与它之前的运行不同时,才允许在post部分运行该步骤。
  • failure:只有当前流水线或阶段的完成状态为failure,才允许post部分运行该步骤,通常web ui是红色。
  • success: 只有当前流水线或阶段的完成状态为success,才允许post部分运行该步骤,通常web ui是蓝色或绿色。
  • unstable: 只有当前流水线或阶段的完成状态是unstable,才允许在post部分运行该步骤,通常由于测试失败,代码违规等造成的,通常web ui是黄色的。
  • aborted只有当前流水线或阶段的完成状态是aborted,才允许在post部分运行该步骤,通常流水线被手动的aborted,通常web ui是灰色的。

3.Kubect操作k8s集群

kubectl是k8s的客户端程序,也是k8s的命令行工具,kubectl提供了大量的子命令可以让用户和集群进行交互。

kubectl 连接 Kubernetes 集群

  • Kubernetes 版本页面下载最新的 kubectl 客户端。
  • 安装和设置 kubectl 客户端。

    有关详细信息,参见 安装和设置 kubectl

  • 配置集群凭据。

    您可以在集群信息页面查看集群凭据。

    1. 登录容器服务管理控制台
    2. 在 Kubernetes菜单下,单击集群进入 Kubernetes 集群列表页面。
    3. 选择所需的集群并单击右侧的管理。
    4. 您可以在连接信息处查看集群的连接地址。
    5. 拷贝集群凭据到本地文件中,您可创建并将集群凭据保存到 $HOME/.kube/config(kubectl 预期凭据所在的位置)。或者命名一个新的文件,如 /tmp/kubeconfig,并执行命令
       export KUBECONFIG=/tmp/kubeconfig。
    6. 执行上述操作后,您可执行以下命令,确认集群连接情况。
# kubectl cluster-info
Kubernetes Master is running at https://xxxxxx.serverless-1.kubernetes.cn-shanghai.aliyuncs.com:6443

四、小结

后期将将微服务器相关知识

有关【云原生】docker+k8微服务容器化实战的更多相关文章

  1. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  2. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  3. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  4. 【云原生】SpringCloud-Spring Boot Starter使用测试 - 2

    目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一

  5. ruby-on-rails - 私有(private) gem 没有安装在 docker 中 - 2

    我正在尝试使用docker运行一个Rails应用程序。通过github的sshurl安装的gem很少,如下所示:Gemfilegem'swagger-docs',:git=>'git@github.com:xyz/swagger-docs.git',:branch=>'my_branch'我在docker中添加了keys,它能够克隆所需的repo并从git安装gem。DockerfileRUNmkdir-p/root/.sshCOPY./id_rsa/root/.ssh/id_rsaRUNchmod700/root/.ssh/id_rsaRUNssh-keygen-f/root/.ss

  6. ruby-on-rails - 将 Heroku 环境变量传输到 Docker 实例 - 2

    我在Heroku上构建了一个必须在Docker容器内运行的RoR应用程序。为此,我使用officialDockerfile.因为它在Heroku中很常见,所以我需要一些附加组件才能使这个应用程序完全运行。在生产中,变量DATABASE_URL在我的应用程序中可用。但是,如果我尝试其他一些使用环境变量(在我的例子中是Mailtrap)的加载项,变量不会在运行时复制到实例中。所以我的问题很简单:如何让docker实例在Heroku上执行时知道环境变量?您可能会问,我已经知道我们可以在docker-compose.yml中指定一个environment指令。我想避免这种情况,以便能够通过项目

  7. ruby - 更新 gem 时 Docker 包安装缓存问题 - 2

    我在开发和生产中都使用docker,真正困扰我的一件事是docker缓存的简单性。我的ruby​​应用程序需要bundleinstall来安装依赖项,因此我从以下Dockerfile开始:添加GemfileGemfile添加Gemfile.lockGemfile.lock运行bundleinstall--path/root/bundle所有依赖项都被缓存,并且在我添加新gem之前效果很好。即使我添加的gem只有0.5MB,从头开始安装所有应用程序gem仍然需要10-15分钟。由于依赖项文件夹的大小(大约300MB),然后再花10分钟来部署它。我在node_modules和npm上遇到了

  8. 【详解】Docker安装Elasticsearch7.16.1集群 - 2

    开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建

  9. 你真正了解什么是接口测试么?接口实战一“篇”入魂 - 2

    最近在工作中,看到一些新手测试同学,对接口测试存在很多疑问,甚至包括一些从事软件测试3,5年的同学,在聊到接口时,也是一知半解;今天借着这个机会,对接口测试做个实战教学,顺便总结一下经验,分享给大家。计划拆分成4个模块跟大家做一个分享,(接口测试、接口基础知识、接口自动化、接口进阶)感兴趣的小伙伴记得关注,希望对你的日常工作和求职面试,带来一些帮助。注:文章较长有5000多字,希望小伙伴们认真看完,当然有些内容对小白同学不是太友好,如果你需要详细了解其中的一些概念或者名词,请在文章之后留言,后续我将针对大家的疑问,整理输出一些大家感兴趣的文章。随着开发模式的迭代更新,前后端分离已不是新的概念,

  10. 转转测试环境docker化实践 - 2

        测试环境对于任何一个软件公司来讲,都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的docker动态环境+docker稳定环境环境体系。期间环境系统不断的演进,去适应转转集群扩张、新业务的扩展,走了一些弯路,但最终我们将系统升级到了我们认为的终极方案。下面我们介绍一下转转环境的演进和最终的解决方案。1测试环境演进1.1单体环境    转转在2017年成立之初,5台64G内存的机器,搭建5个完整的测试环境。就满足了转转的日常所需。一台分给开发,几台分给测试。通过沟通协调就能解决多分支并行开发下冲突问题。1.2动态环境+稳定环境    随着微服务化的进

随机推荐