一:准备好docker运行环境,安装指南参考:

win:https://docker_practice.gitee.io/install/windows.html

Mac:https://docker_practice.gitee.io/install/mac.html

Centos:https://docker_practice.gitee.io/install/centos.html

二:本机需要安装docker-compose

win和mac的安装包里已经包含了docker-compose,无需单独安装,Linux环境需进行安装,详情参考:

https://docs.docker.com/compose/install/

三:镜像介绍

1、percona(mysql)数据库

官方使用帮助:https://hub.docker.com/_/percona/

2、grafana

官方使用帮助:http://docs.grafana.org/installation/docker/

3、rocketmq

官方使用帮助:https://github.com/apache/rocketmq-externals/tree/master/rocketmq-docker

4、flink

官方使用帮助:https://hub.docker.com/_/flink

5、canal

官方使用帮助:https://github.com/alibaba/canal/wiki

四:docker-compose

已经配置好的docker-compose及必备配置文件已打包

只要docker-compose.yml内容的话在此

version: '2'

services: 
  grafana:
    container_name: grafana
    image: grafana/grafana
    ports:
      - 3000:3000
    user: "472"
    depends_on:
      - target-mysql
  jobmanager:
    image: flink:1.7
    container_name: flink_jobmanager
    expose:
      - "6123"
    ports:
      - "8081:8081"
    command: jobmanager
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager
    depends_on:
      - broker
  taskmanager:
    image: flink:1.7
    container_name: flink_taskmanager
    expose:
      - "6121"
      - "6122"
    depends_on:
      - jobmanager
    command: taskmanager
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager
    depends_on:
      - jobmanager
  rmq-console:
    image: styletang/rocketmq-console-ng
    container_name: rmqconsole
    ports:
      - 8088:8080
    environment:
      JAVA_OPTS: -Drocketmq.config.namesrvAddr=namesrv:9876
    volumes:
      - ./rocketmq/console/logs:/root/logs
      - ./rocketmq/console/store:/root/store
    depends_on:
      - namesrv
  namesrv:
    image: rocketmqinc/rocketmq:4.3.2
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    volumes:
      - ./rocketmq/namesrv/logs:/root/logs
      - ./rocketmq/namesrv/store:/root/store
    command: sh mqnamesrv
    depends_on:
      - canal-server
  broker:
    image: rocketmqinc/rocketmq:4.3.2
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
    volumes:
      - ./rocketmq/broker/logs:/root/logs
      - ./rocketmq/broker/store:/root/store
      - ./rocketmq/broker/broker.conf:/opt/rocketmq-4.3.2/conf/broker.conf
    command: sh mqbroker -n namesrv:9876 -c /opt/rocketmq-4.3.2/conf/broker.conf
    depends_on:
      - namesrv
  canal-server: 
    image: canal/canal-server:v1.1.2
    container_name: canal-server
    ports: 
      - 11111:11111
    depends_on: 
      - mysql
    environment: 
      - canal.instance.master.address=mysql:3306
      - canal.instance.dbUsername=canal
      - canal.instance.dbPassword=canal
      - canal.mq.topic=test
      - canal.instance.filter.regex=artemis.out_order,artemis.out_order_details,artemis.out_order_cancel,wms.t_base_customer,wms.t_pick_order,wms.t_pick_order_detail,wms.t_pick_order_detail_sub,wms.t_pick_wave_detail,wms.t_pick_list,wms.t_pick_task,wms.t_workstation_user_detail,wms.t_workstation
    volumes: 
      - ./canal-server/canal.properties:/home/admin/canal-server/conf/canal.properties
      - ./canal-server/logs:/home/admin/canal-server/logs
  mysql: 
    image: mysql:5.7
    container_name: mysql
    environment: 
      MYSQL_ROOT_PASSWORD: root
    ports: 
      - 3306:3306
    volumes:    
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/logs:/logs/
  target-mysql:
    image: mysql:5.7
    container_name: target-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3307:3306
    volumes:
      - ./target-mysql/mysql:/var/lib/mysql
      - ./target-mysql/logs:/logs/

1.使用说明:

  • 新建一个空目录,下载附件到目录中,并解压
  • 确保本机没有占用容器定义的相关端口(3000,3306,3307,8081,8088,9876,10909,10911,11111),如果有请修改docker-compose.yml配置的端口或在主机上释放相应端口
  • 在解压的目录下运行命令进行环境的启动:docker-compose  up -d
  • 由于mq的运行机制不同,默认返回的容器内的brokerIP1地址。所以当需要从外部访问mq时(宿主机或其他外部机器),需将brokerIP1修改为当前宿主机的ip

 

2.各参数及配置项说明

1.docker-compose模板文件说明,详细可查询https://docker_practice.gitee.io/compose/compose_file.html ,下列为我们使用到的一些关键字

  • image:镜像源,表示获取哪个镜像,并可指定版本
  • container_name:容器别名,给你docker环境下的镜像进行别名,同网段下其他容器可根据别名直接访问对应容器
  • ports:暴露端口信息,并且容器的端口和宿主机上的端口映射
  • expose:暴露端口,但是不和宿主机映射
  • command:覆盖容器启动后默认执行的命令,这里只有mq和flink使用了这个关键字,因为它们都是源自一个镜像,需要使用不同的命令来启动对应的服务
  • environment:设置环境变量,需注意的是,只有容器上有对应的变量才能进行设置,否则无效(比如canal的canal.properties)
  • volumes:数据卷所挂载路径设置。一般的,我们会将容器的data目录映射到宿主机,以防容器删除后数据丢失
  • depends_on:用于处理容器的启动依赖顺序问题

2.canal.properties配置文件主要是处理2点问题

参数canal.serverMode需指定为RocketMQ模式

参数canal.mq.servers需配置对应的rocketmq的namesrv的地址和端口

其余前缀为canal.mq的参数说明可参见https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart

3.my.cnf配置文件主要是申明mysql数据库为行模式,并且开启了binlog

4.broker.conf配置文件为mq的borker配置,主要是修改brokerIP1为宿主机的ip。以提供给外部访问

五、启动检查

1.在附件解压的目录运行命令docker-compose  up -d 启动,如最终出现下面画面,则容器创建成功

 

2.容器创建成功后,我们需要检查各个容器是否启动成功

数据库:按照配置项提供的端口号和默认密码,进行连接测试

mq:访问控制台http://localhost:8088/#/进行检查

fink:访问控制台http://localhost:8081/#/overview进行检查

grafana:访问页面http://localhost:3000/login进行检查

六:  示例运行

直接在 IDEA 中运行 main, 任务并没有提交到 本机 flink jobmanager 上

docker cp D:\workspace\odsetl\rocketmq-flink\target\rocketmq-flink-0.0.3-SNAPSHOT.jar 3595de91751
4:/opt/flink/

docker exec -it 3595de917514 flink run -c org.apache.rocketmq.flink.demo.OdsETLJob rocketmq-flink-
0.0.3-SNAPSHOT.jar

其中 3595de917514  表示 flink_jobmanager 的 containerId

七:  问题解决

win10  docker-compose 出错:ERROR: for mysql  Cannot create container for service mysql: b'Drive has not been shared'

解决方法:  Docker->Settings->Shared-Drives 勾选一个盘