m1的docker
- 2021年苹果发布了自研芯片M1,对于开发者而言很多软件都需要适配,不过作为开发者效率还是杠杠的,作为Java开发者很多软件很快得到了适配。今天我们来捯饬下M1下的 docker 的使用吧
安装
- 下载好了之后常规安装桌面软件即可,但是安装后我发现
docker desktop
居然是intel
版的,因为intel
的需要转义所以最终被我抛弃了。 - 好在我们
mac
上有一个万能工具brew
, 我发现brew 上也有docker , 于是就尝试安装了brew install --cask --appdir=/Applications docker
。 安装完成之后在程序中也会出现一个dcoker desktop
软件。而且是M系列的。至此我们docker就安装完成了。 - 安装后并不能正常使用,除了
docker -v
正常以外其他的docker
命令全部报错Error response from daemon: dial unix docker.raw.sock: connect:not such file or directory
。 - 百度了一下网上都说打开
docker desktop
后点击右上角小甲虫Reset to factory defaults
。
安装镜像
docker
安装完之后接下来肯定是安装镜像了,作为 Java 开发者我第一安装的就是Mysql
。docker pull mysql:5.6
- 因为从一开始自己个人项目里全部使用的是
mysql:5.6
, 所以这一次我习惯性的安装也是mysql:5.6
, 可惜报错了
- 根据报错信息我们知道
docker
在远程仓库和本地仓库都没有找到与系统匹配的镜像,也就是说没找到M
系列的Mysql:5.6
镜像。 - 那么
M
系列到底是什么版本呢?
AArch64 是 Armv8-A 架构中引入的64位状态,向后兼容 Armv7-A 和先前的32位 Arm 架构的32位状态称为AArch32。ARM64是由Apple创建的,而AARCH64 是由其他人(最著名的是GNU / GCC的)创建的。用于 aarch64 的 Apple 后端称为 arm64,而LLVM 编译器社区开发的后端称为 aarch64(因为它是64位ISA的规范名称),但是,后来将arm64 和 aarch64 两者合并,现在的后端称为aarch64。 因此,如今aarch64和 arm64 指的是同一件事。
- 由上可知对应的是
arm
架构。arm
架构包括aarch64
和arm64
所以我们需要下载aarch64/arm64
版本的镜像,那么我们去官网看看mysql
最新版本的镜像是否支持arm
。
- 说明docker已经支持
arm
版本的mysql
镜像了。那么就简单了,换成最新的版本号即可。
shell
docker pull arm64v8/mysql
- 如果你不想安装最新的也还有其他办法,我们只需要点进入在点击
arm64v8
就可以看到具体有哪些版本支持了。
shell
docker pull arm64v8/mysql:8
- 其他镜像也是一样的操作。
启动镜像
- 真的是一波三折,镜像下载好之后启动就出现了问题。
docker
的提示还是很友好的。根据提示应该是需要我们将路径设置为共享desktop
才能有权限获取到。
常规镜像安装
镜像下载
shel
docker pull arm64v8/mysql
docker pull redis
docker pull zhusaidong/nacos-server-m1
docker pull zookeeper
docker pull wurstmeister/kafka
容器启动
mysql
shell
docker run -p 3306:3306 --name mymysql --restart=always -v /opt/soft/docker/mysql/conf:/etc/mysql/conf.d -v /opt/soft/docker/mysql/logs:/logs -v /opt/soft/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d arm64v8/mysql:8 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
redis
shell
sudo docker run -p 6379:6379 --name redis -v /opt/soft/redis/redis.conf:/etc/redis/redis.conf -v /opt/soft/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
nacos
shel
docker run --network common-network --env MODE=standalone --name nacos -d -p 8848:8848 zhusaidong/nacos-server-m1:2.0.3
zookeeper
shell
docker run -d -p 2181:2181 --name zookeeper1 zookeeper
kafka
shel
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=docker.for.mac.host.internal:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://docker.for.mac.host.internal:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka