docker服务容器化

打印 上一主题 下一主题

主题 825|帖子 825|积分 2475

1 引言

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

​ 在docker中可以创建网络,作为容器间网络联通前言,网络联通有下面两种方式,首先必要创建网络:
  1. # 创建网络名为flink-network的网络
  2. docker network create flink-network
  3. # 查看网络内的容器信息:
  4. docker network inspect flink-network
复制代码
2.1 单独创建关联

​ 容器已经创建,但是没有关联网络,必要单独创建关联时
  1. # 这里假设已经创建容器starrocks,关联上已创建的网络flink-network
  2. docker network connect flink-network starrocks
复制代码
2.2 创建时关联

​ 假如网络已经创建,容器未创建,则可以在创建容器时直接关联网络,如已创建上面的网络flink-network,下面打算创建starrocks容器时
  1. # 已创建上面的网络flink-network,下面打算创建starrocks容器时
  2. docker run -p 19030:9030 -p 18030:8030 -p 18040:8040 \
  3. -itd --name starrocks \
  4. --network flink-network \
  5. starrocks/allin1-ubuntu:3.1.10
  6. # 在运行命令中添加已存在网络flink-network --network flink-network
复制代码
​ 可以查看网络内的容器信息
  1. # 查看网络内的容器信息:
  2. docker network inspect flink-network
复制代码

3 服务搭建

3.1 镜像清单

​ 我们这里搭建kafka-flink-starrocks的项目服务,以starrocks作为数仓,mysql和redis为业务库,flink和kafka进行CDC和ETL。
repositorytagsizstarrocks/allin1-ubuntu3.1.104.37GBflink1.13.5625MBzookeeper3.4.13150MBwurstmeister/kafka2.13-2.8.1468MBmysql8.0.19546MBredis6.0.8104MB 3.2 容器创建

1)首先,创建starrocks容器,外部挂载磁盘位置E:\tmp\docker_volumes\starrocks\data
  1. # 挂载容器外部磁盘/文件夹「启动」,
  2. docker run -itd --name starrocks \
  3. --network flink-network \
  4. -v E:\tmp\docker_volumes\starrocks\data:/home/zzz/data
  5. -p 19030:9030 -p 18030:8030 -p 18040:8040
  6. starrocks/allin1-ubuntu:3.1.10
  7. # 启动SQL client(Connect to StarRocks with a SQL client)
  8. docker exec -it starrocks \
  9. mysql -P 9030 -h 127.0.0.1 -u root -p 123456 --prompt="StarRocks > "
  10. # 在容器内部,查看fe、be状态
  11. show proc '/frontends' \G
  12. show proc '/backends' \G
复制代码
2)然后,创建flink容器,JobManager和TaskManager都有创建
  1. # 创建 JobManager
  2. docker run \
  3.   -itd \
  4.   --name=jobmanager \
  5.   --publish 8081:8081 \
  6.   --network flink-network \
  7.   --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \
  8.   flink:1.13.5 jobmanager
  9. # 创建 TaskManager
  10. docker run \
  11.   -itd \
  12.   --name=taskmanager \
  13.   --network flink-network \
  14.   --env FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager" \
  15.   flink:1.13.5 taskmanager
  16.   
  17. # 从https://mvnrepository.com/检索下面jar包 添加jar到flink/lib/目录
  18. # 在宿主机保存jar包路径下运行下面命令
  19. docker cp flink-sql-connector-mysql-cdc-2.0.2.jar jobmanager:/opt/flink/lib/
  20. docker cp flink-sql-connector-mysql-cdc-2.0.2.jar taskmanager:/opt/flink/lib/
  21. docker cp flink-connector-starrocks-1.1.14_flink-1.13_2.11.jar jobmanager:/opt/flink/lib/
  22. docker cp flink-connector-starrocks-1.1.14_flink-1.13_2.11.jar taskmanager:/opt/flink/lib/
  23. docker cp flink-connector-jdbc_2.11-1.13.5.jar jobmanager:/opt/flink/lib/
  24. docker cp flink-connector-jdbc_2.11-1.13.5.jar taskmanager:/opt/flink/lib/
  25. docker cp flink-sql-connector-kafka_2.11-1.13.5.jar jobmanager:/opt/flink/lib/
  26. docker cp flink-sql-connector-kafka_2.11-1.13.5.jar taskmanager:/opt/flink/lib/
复制代码
3)创建zookeeper和kafka容器
  1. # 安装zk
  2. docker run -d --restart=always \
  3. -e ALLOW_ANONYMOUS_LOGIN=yes  \
  4. --log-driver json-file  \
  5. --log-opt max-size=100m  \
  6. --log-opt max-file=2   \
  7. --name zookeeper  \
  8. --network flink-network \
  9. -p 2181:2181  \
  10. -v E:\tmp\docker_volumes\zookeeper\localtime:/etc/localtime zookeeper:3.4.13
  11. # 安装kafka 需要注意的时 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:宿主机ip:9092
  12. docker run -d --name kafka \
  13. --network flink-network \
  14. --log-driver json-file  \
  15. --log-opt max-size=100m  \
  16. --log-opt max-file=2  \
  17. -p 9092:9092  \
  18. --link zookeeper:zookeeper \
  19. -e KAFKA_BROKER_ID=0  \
  20. -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181/kafka  \
  21. -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://宿主机ip:9092 \
  22. -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092  \
  23. wurstmeister/kafka:2.13-2.8.1
  24. # 运行kafka交换命令行
  25. docker exec -it kafka /bin/bash
复制代码

  • 创建容器mysql和redis,(本人虽然创建了,但是使用的本地的客户端)

4 连合实战

4.2 flink_sql之kafka到starrocks

1)kafka数据准备
  1. # 进入kafka交互命令行
  2. docker exec -it kafka /bin/bash
  3. # 在容器内,创建主题user  这里容器主机ip是zk容器的ip
  4. ./kafka-topics.sh --zookeeper 容器主机ip:2181/kafka --create --replication-factor 1 --partitions 1 --topic user
  5. # 创建生产者 容器主机ip是kafka容器的ip
  6. ./kafka-console-producer.sh --broker-list  容器主机ip:9092  --topic user
  7. # 创建消费者 容器主机ip是kafka容器的ip
  8. ./kafka-console-consumer.sh --topic user --from-beginning --bootstrap-server 容器主机ip:9092
复制代码
2)starrocks数据准备
  1. # 使用dbeaver客户端,或者进入starrocks容器
  2. # 启动SQL client(Connect to StarRocks with a SQL client)
  3. docker exec -it starrocks \
  4. mysql -P 9030 -h 127.0.0.1 -u root -p 123456 --prompt="StarRocks > "
  5. # 创建主键模型表 s_user
  6. CREATE TABLE IF NOT EXISTS `s_user` (
  7.    `id` int(10) NOT NULL COMMENT "",
  8.    `name` varchar(20) NOT NULL COMMENT "",
  9.    `p_id` INT(2) NULL COMMENT ""
  10. )
  11. PRIMARY KEY(`id`)
  12. DISTRIBUTED BY HASH(`id`) BUCKETS 1
  13. PROPERTIES (
  14. "replication_num" = "1"
  15. );
复制代码

  • flink_sql准备
  1. # 进入flink容器交互命令行
  2. docker exec -it jobmanager /bin/bash
  3. # 在容器内容运行,进入bin路径
  4. cd opt/flink/bin
  5. # 在bin路径下运行flink_sql客户端
  6. sql-client.sh
  7. # 可以查看是否有表
  8. show tables;
  9. # 创建source源表 source_Kafka_user
  10. CREATE TABLE source_Kafka_user(
  11.    id INT,
  12.    name STRING,
  13.    p_id INT
  14. ) WITH (
  15.   'connector' = 'kafka',
  16.   'topic' = 'user',
  17.   'properties.bootstrap.servers' = 'kafka容器ip:9092',
  18.   'properties.group.id' = 'source_user',
  19.   'scan.startup.mode' = 'earliest-offset',
  20.   'format' = 'csv'
  21. );
  22. # 创建Sink目标表,sink_starrocks_suser
  23. CREATE TABLE sink_starrocks_suser (
  24.    id INT,
  25.    name STRING,
  26.    p_id INT,
  27.    PRIMARY KEY (id) NOT ENFORCED
  28. )WITH (
  29.    'connector' = 'starrocks',
  30.    'jdbc-url'='jdbc:mysql://starrocks容器ip:9030',
  31.    'load-url'='starrocks容器ip:8040',
  32.    'database-name' = 'my_test_db',
  33.    'table-name' = 's_user',
  34.    'username' = 'root',
  35.    'password' = '123456',
  36.    'sink.buffer-flush.interval-ms' = '5000',
  37.    'sink.properties.column_separator' = '\x01',
  38.    'sink.properties.row_delimiter' = '\x02'
  39. );
  40. # 在flink_sql创建ETL命令,实时运行
  41. insert into sink_starrocks_suser select id,name,p_id from source_Kafka_user;
复制代码

​ 可以在flinkUI:http://localhost:8081/查看任务运行详情

4.2 flink_sql之mysql到starrocks


  • mysql数据准备
  1. CREATE TABLE `s_user` (
  2.    `id` INT(11) NOT NULL,
  3.    `name` VARCHAR(32) DEFAULT NULL,
  4.    `p_id` INT(2) DEFAULT NULL,
  5.    PRIMARY KEY (`id`)
  6. );
  7. insert into s_user values(10086,'lm',61),(10010, 'ls',11), (10000,'ll',61);
复制代码
2)starrocks数据准备: 和上面一样

  • flink_sql准备
  1. # 创建source源表 source_mysql_suser
  2. CREATE TABLE source_mysql_suser (
  3.    id INT,
  4.    name STRING,
  5.    p_id INT,
  6.    PRIMARY KEY (id) NOT ENFORCED
  7. )WITH (
  8.    'connector' = 'jdbc',
  9.    'driver'='com.mysql.jdbc.Driver',
  10.    'url' = 'jdbc:mysql:/宿主机ip:3306/flink_pro',
  11.    'table-name' = 's_user',
  12.    'username' = 'root',
  13.    'password' = '123456'
  14. );
  15. # 创建Sink目标表,sink_starrocks_suser
  16. CREATE TABLE sink_starrocks_suser (
  17.    id INT,
  18.    name STRING,
  19.    p_id INT,
  20.    PRIMARY KEY (id) NOT ENFORCED
  21. )WITH (
  22.    'connector' = 'starrocks',
  23.    'jdbc-url'='jdbc:mysql://starrocks容器ip:9030',
  24.    'load-url'='starrocks容器ip:8040',
  25.    'database-name' = 'my_test_db',
  26.    'table-name' = 's_user',
  27.    'username' = 'root',
  28.    'password' = '123456',
  29.    'sink.buffer-flush.interval-ms' = '5000',
  30.    'sink.properties.column_separator' = '\x01',
  31.    'sink.properties.row_delimiter' = '\x02'
  32. );
  33. # 在flink_sql创建ETL命令,实时运行
  34. insert into sink_starrocks_suser select id,name,p_id from source_mysql_suser;
复制代码

5 文献鉴戒

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表