一键启动多个服务

Published on with 0 views and 0 comments

背景

因为业务的原因,经常会需要快速启动具有某一方面特性的服务去进行功能测试,由此以来频繁复杂的部署会让人感到疲累。所以对于一些服务,我们最好还是使用docker来进行快速部署,以达到快速测试的目的。

Docker

docker需知

在使用docker之前,先来看看docker的架构图,原理和干什么的就不详细解释了,那理解起来更浪费时间。
3264969fbafaa59ab75744e.webp
简单来说,就是把应用打包成镜像,然后再将多个应用集成出容器,然后容器可以直接跑服务这么个东西,哈不多说了

环境需要

在部署之前,我们需要配置好docker以及docker-compose
在这里使用的系统是ubuntu18

sudo apt install docker
sudo apt install docker-compose

docker服务会自动启动,不过因为网络的原因,最好还是把镜像源修改一下。
先找到daemon.json文件

sudo vim /etc/docker/daemon.json

添加如下内容:

{
"registry-mirrors":["https://zap5bzuu.mirror.aliyuncs.com"]
}

接下来就pull镜像速度就快很多

Docker-Compose

Docker-Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。复制的别人的,自己懒得说了..

Mysql

YAML编写

这里直接上成品吧

version: '3.1'
services: 
  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      TZ: Asia/Shanghai
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - "/data/database/mysql:/var/lib/mysql"

这里基本都可以看懂了,什么container_name啊,restart啥的,就不解释了,image拉取dockerhub上的mysql:5.7版本,ports将容器端口映射到宿主机端口,environment是配置详情,具体可以加哪些参数可以去mysql镜像官网看文档。这里的参数大家应该都看懂了。
command设定字符集,volumes将数据挂载到本地磁盘上,防止重启后数据丢失。

Mysql启动

在这个文件目录下启动,如果文件名是docker-compose.yml,执行

docker-compose up -d

如果随便起的文件名***.yml,执行

docker-compose -f ***.yml up -d

up是启动,-d在后台,测试启动可以不加-d。
停止的话直接执行

docker-compose down

看一下正在运行的容器,执行

docker ps

如果显示如下,即运行成功

mysql:5.7    "docker-entrypoint.s…"   15 hours ago   Up 15 hours    0.0.0.0:3306->3306/tcp, 33060/tcp

Mongo

YAML编写

同上,直接上成品

version: '3.1'
services: 
  mongo:
    image: mongo:4.0.4
    container_name: mongo
    restart: always
    ports:
      - 27017:27017
    #    environment:
    #      MONGO_INITDB_ROOT_USERNAME: root
    #      MONGO_INITDB_ROOT_PASSWORD: root
    #      MONGO_INITDB_DATABASE_NAME: test
    command: ["mongod","--bind_ip","0.0.0.0"]
    volumes:
      - "/data/database/mongo:/data/db"

不多解释了,注释的地方是配置啊,命令里面是外部访问啊balabala

Mongo启动

Mysql启动

Redis

YAML编写 同上balabala

version: "3.1"
services:
  redis:
    image: redis:alpine
    container_name: redis
    restart: always
    ports:
      - "6379:6379"
    #    command: ["redis-server","--bind","0.0.0.0","--appendonly","yes","--requirepass","密码"]
    command: ["redis-server","--bind","0.0.0.0","--appendonly","yes"]
    volumes:
      - "/data/database/redis:/data"

command里面外部访问啊密码啊balabala

Redis启动

Mysql启动

Streamsets

这个东西是做数据平台的,挺好用的有兴趣可以了解一下

YAML编写

balabala....

version: '3.1'
services: 
  streamsets: 
    image: streamsets/datacollector
    restart: always
    ports:
      - "18630:18630"
    environment:
      HOST_IP: 0.0.0.0
    volumes:
      #- /data/database/localtime:/etc/localtime
      - streamsets:/opt/steramsets
volumes: 
  streamsets:

volumes那里创建盘挂载balabala.....

Streamsets启动

Mysql启动,此应用看一下效果吧
访问http://127.0.0.1:18630
如下Screenshotfrom20191127102305.png

账号密码admin,登录后效果如下
Screenshotfrom20191127102514.png

拖拖拽拽的处理方式,理解的人就知道用着是多么爽了哈哈。。

Kafka集群

这里我们要做集群,所以命令稍微有点不同,yaml稍微改变点,影响不大,就不过多解释了

YAML编写

因为kafka需要zookeeper做协同,所以这里把zookeeper也加进来,为了监控kafka,还另外加了kafka-manager

version: '3.1'
services: 
  zookeeper:
    image: wurstmeister/zookeeper
    restart: always
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    restart: always
    ports:
      - "9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 宿主机hostname
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  kafka-manager:
    image: sheepkiller/kafka-manager:latest
    restart: always
    ports:
      - "9000:9000"
    links:
      - zookeeper
      - kafka
    environment:
      ZK_HOSTS: zookeeper:2181
      APPLICATION_SECRET: letmein
      KM_ARGS: -Djava.net.preferIPv4Stack=true

Kafka启动

对比Mysql启动指令稍微有些不同,因为要做集群。此yaml文件没有把本机端口映射给kafka,要不就冲突喽。这里执行

docker-compose up -d --scale kafka=3

此指令创建三个kafka集群,端口随机映射,看一下kafka-manager的效果
Screenshotfrom20191127102631.png

这里我已经添加了集群了,所以manager可以看到。集群启动成功

Flink集群

YAML编写

同上balabala

version: "3.1"
services:
  jobmanager:
    image: flink
    restart: always
    ports:
      - "8081:8081"
    expose:
      - "6123"
    command: jobmanager
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager
  taskmanager:
    image: flink
    restart: always
    expose:
      - "6121"
      - "6122"
    depends_on:
      - jobmanager
    command: taskmanager
    links:
      - "jobmanager:jobmanager"
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager

就不多说了。。。

Flink集群启动

因为和Kafka启动差不多,以下是指令

docker-compose up -d --scale taskmanager=3

哈哈,直接看效果吧。。
Screenshotfrom20191127103217.png
没毛病吧老铁。。OK了

整合

直接把多个服务弄到一个services里就完事了老铁们。。以后再讲服务应用

------------------------- 走在路上的symoon