当前位置: 首页 > news >正文

docker服务容器化

docker服务容器化

      • 1 引言
      • 2 多个容器间网络联通
        • 2.1 单独创建关联
        • 2.2 创建时关联
      • 3 服务搭建
        • 3.1 镜像清单
        • 3.2 容器创建
      • 4 联合实战
        • 4.2 flink_sql之kafka到starrocks
        • 4.2 flink_sql之mysql到starrocks
      • 5 文献借鉴

1 引言

​ 利用docker可以很效率地搭建服务,本文在win10下安装docker-desktop,从镜像的拉取,到容器的创建,最后容器间联合使用,该过程有很多细节,记录和分享在这里,共勉。

2 多个容器间网络联通

​ 在docker中可以创建网络,作为容器间网络联通媒介,网络联通有下面两种方式,首先需要创建网络:

# 创建网络名为flink-network的网络
docker network create flink-network# 查看网络内的容器信息:
docker network inspect flink-network
2.1 单独创建关联

​ 容器已经创建,但是没有关联网络,需要单独创建关联时

# 这里假设已经创建容器starrocks,关联上已创建的网络flink-network
docker network connect flink-network starrocks
2.2 创建时关联

​ 如果网络已经创建,容器未创建,则可以在创建容器时直接关联网络,如已创建上面的网络flink-network,下面打算创建starrocks容器时

# 已创建上面的网络flink-network,下面打算创建starrocks容器时
docker run -p 19030:9030 -p 18030:8030 -p 18040:8040 \
-itd --name starrocks \
--network flink-network \
starrocks/allin1-ubuntu:3.1.10
# 在运行命令中添加已存在网络flink-network --network flink-network

​ 可以查看网络内的容器信息

# 查看网络内的容器信息:
docker network inspect flink-network

在这里插入图片描述

3 服务搭建

3.1 镜像清单

​ 我们这里搭建kafka-flink-starrocks的项目服务,以starrocks作为数仓,mysql和redis为业务库,flink和kafka进行CDC和ETL。

repositorytagsiz
starrocks/allin1-ubuntu3.1.104.37GB
flink1.13.5625MB
zookeeper3.4.13150MB
wurstmeister/kafka2.13-2.8.1468MB
mysql8.0.19546MB
redis6.0.8104MB
3.2 容器创建

1)首先,创建starrocks容器,外部挂载磁盘位置E:\tmp\docker_volumes\starrocks\data

# 挂载容器外部磁盘/文件夹「启动」,
docker run -itd --name starrocks \
--network flink-network \
-v E:\tmp\docker_volumes\starrocks\data:/home/zzz/data 
-p 19030:9030 -p 18030:8030 -p 18040:8040 
starrocks/allin1-ubuntu:3.1.10
# 启动SQL client(Connect to StarRocks with a SQL client)
docker exec -it starrocks \
mysql -P 9030 -h 127.0.0.1 -u root -p 123456 --prompt="StarRocks > "
# 在容器内部,查看fe、be状态
show proc '/frontends' \G
show proc '/backends' \G

2)然后,创建flink容器,JobManager和TaskManager都有创建

# 创建 JobManager docker run \-itd \--name=jobmanager \--publish 8081:8081 \--network flink-network \--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \flink:1.13.5 jobmanager # 创建 TaskManager docker run \-itd \--name=taskmanager \--network flink-network \--env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \flink:1.13.5 taskmanager # 从https://mvnrepository.com/检索下面jar包 添加jar到flink/lib/目录
# 在宿主机保存jar包路径下运行下面命令
docker cp flink-sql-connector-mysql-cdc-2.0.2.jar jobmanager:/opt/flink/lib/
docker cp flink-sql-connector-mysql-cdc-2.0.2.jar taskmanager:/opt/flink/lib/docker cp flink-connector-starrocks-1.1.14_flink-1.13_2.11.jar jobmanager:/opt/flink/lib/
docker cp flink-connector-starrocks-1.1.14_flink-1.13_2.11.jar taskmanager:/opt/flink/lib/docker cp flink-connector-jdbc_2.11-1.13.5.jar jobmanager:/opt/flink/lib/
docker cp flink-connector-jdbc_2.11-1.13.5.jar taskmanager:/opt/flink/lib/docker cp flink-sql-connector-kafka_2.11-1.13.5.jar jobmanager:/opt/flink/lib/
docker cp flink-sql-connector-kafka_2.11-1.13.5.jar taskmanager:/opt/flink/lib/

3)创建zookeeper和kafka容器

# 安装zk
docker run -d --restart=always \
-e ALLOW_ANONYMOUS_LOGIN=yes  \
--log-driver json-file  \
--log-opt max-size=100m  \
--log-opt max-file=2   \
--name zookeeper  \
--network flink-network \
-p 2181:2181  \
-v E:\tmp\docker_volumes\zookeeper\localtime:/etc/localtime zookeeper:3.4.13# 安装kafka 需要注意的时 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:宿主机ip:9092
docker run -d --name kafka \
--network flink-network \
--log-driver json-file  \
--log-opt max-size=100m  \
--log-opt max-file=2  \
-p 9092:9092  \
--link zookeeper:zookeeper \
-e KAFKA_BROKER_ID=0  \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181/kafka  \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://宿主机ip:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092  \
wurstmeister/kafka:2.13-2.8.1# 运行kafka交换命令行
docker exec -it kafka /bin/bash
  1. 创建容器mysql和redis,(本人虽然创建了,但是使用的本地的客户端)在这里插入图片描述

4 联合实战

4.2 flink_sql之kafka到starrocks

1)kafka数据准备

# 进入kafka交互命令行
docker exec -it kafka /bin/bash# 在容器内,创建主题user  这里容器主机ip是zk容器的ip
./kafka-topics.sh --zookeeper 容器主机ip:2181/kafka --create --replication-factor 1 --partitions 1 --topic user# 创建生产者 容器主机ip是kafka容器的ip
./kafka-console-producer.sh --broker-list  容器主机ip:9092  --topic user# 创建消费者 容器主机ip是kafka容器的ip
./kafka-console-consumer.sh --topic user --from-beginning --bootstrap-server 容器主机ip:9092

2)starrocks数据准备

# 使用dbeaver客户端,或者进入starrocks容器
# 启动SQL client(Connect to StarRocks with a SQL client)
docker exec -it starrocks \
mysql -P 9030 -h 127.0.0.1 -u root -p 123456 --prompt="StarRocks > "# 创建主键模型表 s_user
CREATE TABLE IF NOT EXISTS `s_user` (`id` int(10) NOT NULL COMMENT "",`name` varchar(20) NOT NULL COMMENT "",`p_id` INT(2) NULL COMMENT ""
)
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES (
"replication_num" = "1"
);
  1. flink_sql准备
# 进入flink容器交互命令行
docker exec -it jobmanager /bin/bash# 在容器内容运行,进入bin路径
cd opt/flink/bin
# 在bin路径下运行flink_sql客户端
sql-client.sh# 可以查看是否有表
show tables;# 创建source源表 source_Kafka_user
CREATE TABLE source_Kafka_user(id INT,name STRING,p_id INT
) WITH ('connector' = 'kafka','topic' = 'user','properties.bootstrap.servers' = 'kafka容器ip:9092','properties.group.id' = 'source_user','scan.startup.mode' = 'earliest-offset','format' = 'csv'
);# 创建Sink目标表,sink_starrocks_suser
CREATE TABLE sink_starrocks_suser (id INT,name STRING,p_id INT,PRIMARY KEY (id) NOT ENFORCED
)WITH ('connector' = 'starrocks','jdbc-url'='jdbc:mysql://starrocks容器ip:9030','load-url'='starrocks容器ip:8040','database-name' = 'my_test_db','table-name' = 's_user','username' = 'root','password' = '123456','sink.buffer-flush.interval-ms' = '5000','sink.properties.column_separator' = '\x01','sink.properties.row_delimiter' = '\x02'
);# 在flink_sql创建ETL命令,实时运行
insert into sink_starrocks_suser select id,name,p_id from source_Kafka_user;

在这里插入图片描述

​ 可以在flinkUI:http://localhost:8081/查看任务运行详情
在这里插入图片描述

4.2 flink_sql之mysql到starrocks
  1. mysql数据准备
CREATE TABLE `s_user` (`id` INT(11) NOT NULL,`name` VARCHAR(32) DEFAULT NULL,`p_id` INT(2) DEFAULT NULL,PRIMARY KEY (`id`)
);insert into s_user values(10086,'lm',61),(10010, 'ls',11), (10000,'ll',61);

2)starrocks数据准备: 和上面一样

  1. flink_sql准备
# 创建source源表 source_mysql_suser
CREATE TABLE source_mysql_suser (id INT,name STRING,p_id INT,PRIMARY KEY (id) NOT ENFORCED
)WITH ('connector' = 'jdbc','driver'='com.mysql.jdbc.Driver','url' = 'jdbc:mysql:/宿主机ip:3306/flink_pro','table-name' = 's_user','username' = 'root','password' = '123456'
);# 创建Sink目标表,sink_starrocks_suser
CREATE TABLE sink_starrocks_suser (id INT,name STRING,p_id INT,PRIMARY KEY (id) NOT ENFORCED
)WITH ('connector' = 'starrocks','jdbc-url'='jdbc:mysql://starrocks容器ip:9030','load-url'='starrocks容器ip:8040','database-name' = 'my_test_db','table-name' = 's_user','username' = 'root','password' = '123456','sink.buffer-flush.interval-ms' = '5000','sink.properties.column_separator' = '\x01','sink.properties.row_delimiter' = '\x02'
);# 在flink_sql创建ETL命令,实时运行
insert into sink_starrocks_suser select id,name,p_id from source_mysql_suser;

在这里插入图片描述

5 文献借鉴

StarRocks数据导入–Flink Connector与CDC秒级数据同步

相关文章:

docker服务容器化

docker服务容器化 1 引言2 多个容器间网络联通2.1 单独创建关联2.2 创建时关联 3 服务搭建3.1 镜像清单3.2 容器创建 4 联合实战4.2 flink_sql之kafka到starrocks4.2 flink_sql之mysql到starrocks 5 文献借鉴 1 引言 ​ 利用docker可以很效率地搭建服务,本文在win1…...

【QT】控件8

1.QDial 通过调节旋钮位置来控制窗口的不透明度&#xff1a; void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示&#xff1a; 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…...

漫谈推理谬误——错误因果

相关文章 漫谈推理谬误——错误假设-CSDN博客文章浏览阅读736次&#xff0c;点赞22次&#xff0c;收藏3次。在日常生活中&#xff0c;我们会面临各种逻辑推理&#xff0c;有些看起来一目了然&#xff0c;有些非常的科学严谨&#xff0c;但也有很多似是而非&#xff0c;隐藏了陷…...

【数据结构】队列实现剖析:掌握队列的底层实现

在计算机科学中&#xff0c;**队列&#xff08;Queue&#xff09;**是一种常见的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。队列的应用非常广泛&#xff0c;例如任务调度、资源管理、进程通信等。本篇文章旨在为计…...

【C++】IO库(二):文件输入输出

8.2 文件输入输出 头文件 fstream 定义了三个类型来之支持文件IO&#xff0c;分别是&#xff1a; ifstream&#xff1a;从一个给定文件读取数据&#xff1b;ofstream&#xff1a;向一个给定文件写入数据&#xff1b;fstream&#xff1a;读写给定文件。 在 C 当中&#xff0c…...

105.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…...

力扣637. 二叉树的层平均值

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 提示&#xff1a; 树中节点数量在 [1, 104] 范围内-231 < Node.val < 231 - 1 代码&#xff1a; /*** Definition for a binary tree node.* stru…...

【前端】Next.js 服务器端渲染(SSR)与客户端渲染(CSR)的最佳实践

关于Next.js 服务器端渲染&#xff08;SSR&#xff09;与客户端渲染&#xff08;CSR&#xff09;的实践内容方面&#xff0c;我们按下面几点进行阐述。 1. 原理 服务器端渲染 (SSR): 在服务器上生成完整的HTML页面&#xff0c;然后发送给客户端。这使得用户在首次访问时能够…...

路径规划之启发式算法之一:A-Star(A*)算法

A*算法是一种启发式搜索算法&#xff0c;常用于解决路径规划问题。 一、A*算法的定义与原理 A*算法是一种用于在图形或网格中查找最短路径的算法。它在搜索过程中综合考虑了每个节点的实际距离&#xff08;g值&#xff09;和预估距离&#xff08;h值&#xff09;&#xff0c;以…...

Android复习代码1-4章

public class RudioButton extends AppCompatActivity {Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_rudio_button);// 找到RadioGroup和TextView的实例RadioGroup radioGrou…...

【问题】webdriver.Chrome()设置参数executable_path报不存在

场景1: 标红报错unresolved reference executable_path 场景2: 执行报错TypeError: __init__() got an unexpected keyword argument executable_path 原因&#xff1a; 上述两种场景是因为selenium4开始不再支持某些初始化参数。比如executable_path 解决&#xff1a; 方案…...

win10系统安装docker-desktop

1、开启Hyper-v ———————————————— Hyper-V 是微软提供的一种虚拟化技术&#xff0c;它允许你在同一台物理计算机上运行多个独立的操作系统实例。这种技术主要用于开发、测试、以及服务器虚拟化等领域。 —————————————————————— &#…...

小程序-基于java+SpringBoot+Vue的乡村研学旅行平台设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…...

组件A底部栏(position: fixed )事件使用$emit更新内容失败bug解决

今天遇到一个很离奇的bug&#xff0c;记录一下 问题&#xff1a;在组件内底部栏使用$emit触发按钮事件但打印出来的值是初始化的值&#xff0c;更新的值被重置导致更新失败 原因&#xff1a;组件内底部使用了 position: fixed; 固定&#xff0c; 导致组件内插槽 this 与 保存按…...

数据结构——排序第三幕(深究快排(非递归实现)、快排的优化、内省排序,排序总结)超详细!!!!

文章目录 前言一、非递归实现快排二、快排的优化版本三、内省排序四、排序算法复杂度以及稳定性的分析总结 前言 继上一篇博客基于递归的方式学习了快速排序和归并排序 今天我们来深究快速排序&#xff0c;使用栈的数据结构非递归实现快排&#xff0c;优化快排&#xff08;三路…...

C++的类功能整合

1. 类的基本概念 类是面向对象编程的核心&#xff0c;它封装了数据和操作数据的函数。 #include <iostream> using namespace std;class MyClass { public:int publicData;void publicFunction() {cout << "Public function" << endl;}private:i…...

《String类》

目录 一、定义与概述 二、创建字符串对象 2.1 直接赋值 2.2 使用构造函数 三、字符串的不可变性 四、常用方法 4.1 String对象的比较 4.1.1 比较是否引用同一个对象 4.1.2 boolean equals(Object anObject)方法&#xff1a;按照字典序比较 4.1.3 int compareTo(Strin…...

【docker】docker的起源与容器的由来、docker容器的隔离机制

Docker 的起源与容器的由来 1. 虚拟机的局限&#xff1a;容器的需求萌芽 在 Docker 出现之前&#xff0c;开发和部署软件主要依赖虚拟机&#xff08;VMs&#xff09;&#xff1a; 虚拟机通过模拟硬件运行操作系统&#xff0c;每个应用程序可以运行在自己的独立环境中。虽然虚…...

Window 安装 Nginx

参考链接 Windows 环境nginx安装使用及目录结构详解_windows 安装nginx-CSDN博客 Nginx 安装及配置教程&#xff08;Windows&#xff09;【安装】_nginx下载安装-CSDN博客 安装 1&#xff09;下载 nginx: download 2&#xff09;解压 3&#xff09;启动 3.1&#xff09;方…...

replace (regexp|substr, newSubstr|function)替换字符串中的指定部分

replace 方法用于替换字符串中的指定部分。它可以接受一个子字符串或正则表达式作为第一个参数&#xff0c;第二个参数是替换的内容。 用法示例 基本替换 let str "Hello, world!"; let newStr str.replace("world", "everyone"); console.lo…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...