docker容器环境安装记录(MAC M1)(完善中)

背景

在MAC M1中搭建商城项目环境时,采用docker统一管理开发工具,期间碰到了许多环境安装问题,做个总结。

0、准备工作

更新mac os到14.0以上(当前macOS Sonoma 14.5)

更新docker.app应用到最新版(当前4.30.0)

配置国内镜像源
在docker-engine设置中修改参数,增加国内源链接即可:

"registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"	
  ]

参考:配置国内镜像源

1、安装redis

  • 在宿主机新建redis.conf文件
  • 运行创建容器命令,进行容器创建、端口映射、文件挂载、以指定配置文件启动:
docker run -d \
  --name my-redis \
  -v /Users/chenzhouyuan/Public/work/environment/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf \
  -v /Users/chenzhouyuan/Public/work/environment/docker/redis/data:/data \
  -p 6379:6379 \
  redis redis-server /usr/local/etc/redis/redis.conf

未解决的问题:运行命令后,redis-server未正常启动,需要在docker容器中手动输入命令“redis redis-server /usr/local/etc/redis/redis.conf”,检查后发现网络、配置文件、文件权限均无问题,暂不知原因。(可能是mac M1平台的bug?)

2、安装xxl-job

错误描述
docker容器中xxl-job无法连接宿主机的mysql。原因是访问宿主机mysql,需要使用局域网,且mysql需要赋予此ip访问权限‘
错误提示在这里插入图片描述
解决方式
需要在mysql中执行sql命令,添加指定ip地址账号的访问权限,输入:

CREATE USER 'root'@'192.168.6.182' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.6.182' WITH GRANT OPTION;
FLUSH PRIVILEGES;

连接通过,xxl-job的web页面访问正常
在这里插入图片描述
其他
M1 mac对xxl-job容器同样有兼容性问题,需要参考安装rocketmq容器时的源代码编译方式。

3、安装rocketmq

问题描述
需要安装rocketmq-namesrv、rocketmq-broker、rocketmq-console。运行docker容器时,rocket-console的web页面无法显示,docker日志为空。原因是amd64镜像的兼容性问题,需要更换成arm64镜像,因此需要下载源代码进行本地编译和镜像打包。

解决方式
1、从apche的账号中git clone下来源代码:包含rocketmq和dashboard(新版本console已经重命名为dashboard)

git clone https://github.com/apache/rocketmq-docker.git
git clone https://github.com/apache/rocketmq-dashboard.git

2、先用rocketmq-docker搭建namesrv和broker,因为官方源代码自带生成docker镜像的相关脚本,直接使用即可。

进入刚才下载的源码根目录,找到image-build:

cd image-build

生成镜像:

sh build-image.sh 4.8.0 centos

生成容器并运行:

docker run ...

3、接下来编译dashboard,需要手动编译项目。

  • 修改项目中的Dockerfile,将依赖的jdk改成支持arm64芯片的openjdk8
    在这里插入图片描述
  • 构建后发现部分依赖包缺失,于是从中央仓库(例如:https://mvnrepository.com/artifact/io.grpc/grpc-api/1.50.0)下载无法识别的依赖包:grpc-api、grpc-core,将jar包加载到项目中;
  • 运行mvn package打包项目为jar包(跳过测试),并生成镜像:
mvn clean package -Dmaven.test.skip=true docker:build
  • 新建broker.conf文件,按需修改docker-compose.yml文件:
    在这里插入图片描述
    在这里插入图片描述

4、运行docker-compose生成容器

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

参考文献
文献1
文献2

4、安装kafka

在Mac M1上使用Docker安装Kafka和Kafka-Manager并确保容器兼容M1芯片,可以按照以下步骤进行:

一、设置kafka网络

确保zookeeper和kafka之间的网络通信,并且使得在配置相关参数时可以直接使用容器名代替ip地址。

docker network create kafka_net

二、安装zookeeper

拉取ZooKeeper镜像 首先,从Docker Hub上拉取一个兼容ARM64(M1芯片)的ZooKeeper镜像。这里拉取的是bitnami/zookeeper:

docker pull bitnami/zookeeper:latest

启动ZooKeeper容器 使用以下命令启动ZooKeeper容器,并设置端口映射:

docker run -d --name zookeeper \  
--network kafka_net \
-p 2181:2181 \  
-e ALLOW_ANONYMOUS_LOGIN=yes \  
bitnami/zookeeper:latest

这里-p 2181:2181将ZooKeeper的默认客户端端口映射到宿主机的2181端口。-e ALLOW_ANONYMOUS_LOGIN=yes允许匿名登录(仅用于测试环境,不建议在生产环境中使用)。

三、安装Kafka

拉取Kafka镜像 您可以选择从Docker Hub上拉取兼容ARM64(即M1芯片)的Kafka镜像。例如,可以使用以下命令拉取wurstmeister/kafka或bitnami/kafka镜像:

docker pull wurstmeister/kafka  
# 或
docker pull bitnami/kafka:latest

请注意,某些镜像可能默认不是为ARM64架构构建的,因此确保检查镜像是否支持ARM64。
启动Kafka容器 使用以下命令启动Kafka容器,并设置相关参数,如端口映射、ZooKeeper连接等:

docker run -d --name kafka \  
-p 9092:9092 \
--network  kafka_net \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \  
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 \  
-e KAFKA_ADVERTISED_HOST_NAME=localhost \  
-e KAFKA_CREATE_TOPICS="test_topic:1:1" \  
wurstmeister/kafka

这里假设您已经有一个ZooKeeper容器在运行,并且监听在2181端口上。

四、安装Kafka-Manager

拉取Kafka-Manager镜像(暂未找到兼容AMD64的镜像)。由于Kafka-Manager通常不是官方Docker镜像提供的,需要查找第三方提供的ARM64版本或自己构建。

docker pull sheepkiller/kafka-manager:arm64

上述命令中的someuser/kafka-manager:arm64是一个假设的镜像名称和标签,需要替换为实际的镜像信息。
启动Kafka-Manager容器,使用以下的命令启动Kafka-Manager容器,并设置相关参数,如端口映射、Kafka和ZooKeeper连接等:

docker run -d --name kafka-manager --network kafka_net -p 9000:9000 \ 
-e KAFKA_MANAGER_ZKHOSTS="zookeeper:2181" -e APPLICATION_SECRET=letmein \
sheepkiller/kafka-manager:arm64

这里APPLICATION_SECRET是一个用于Kafka-Manager的安全设置,您可以根据需要更改它。同样,确保ZooKeeper容器已经启动并监听在2181端口上。
四、注意事项

端口映射:确保您选择的端口在主机上没有被其他服务占用,并且可以根据需要进行调整。
环境变量:根据Kafka和Kafka-Manager的需求设置适当的环境变量。上述示例中的环境变量仅作为参考,您可能需要调整它们以满足您的实际需求。
容器间的网络通信:由于Docker容器默认使用桥接网络,您可能需要配置网络设置以确保Kafka和Kafka-Manager容器能够相互通信。
配置文件:对于Kafka和Kafka-Manager,您可能需要创建或修改配置文件以满足特定的需求。这些配置文件可以挂载到容器中或从容器中获取进行修改。
遵循以上步骤,您应该能够在Mac M1上使用Docker成功安装并运行Kafka和Kafka-Manager,并确保容器兼容M1芯片。

5、安装mysql

运行命令:

docker run -p 3307:3306 --restart always --name  mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

未解决的问题:mac宿主机的navicat无法连接容器中的mysql,即使已经做了端口映射,暂时使用宿主机本地的mysql8.0搭建。

6、安装nacos

未解决的问题:同样有arm64和amd64兼容性的问题,暂未更换镜像
在这里插入图片描述

99、其他:安装skywalking、seata-server、sentinel(可选)

暂无异常

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值