【Docker-Dev】Mac M2 搭建docker mysql
Mac M2 搭建Mysql
- 1、前言
- 2、前置说明-Docker的代理访问
- 3、前置说明-Mysql的镜像访问
- 3.1、提取信息
- 3.1.1、开启Mysql的实例
- 3.1.2、Dokcer连接Mysql
- 3.1.3、官方简易版的docker-compose
- 3.1.4、如何登录mysql bash
- 3.1.5、自定义my.cnf文件
- 3.1.6、如何知道其他自定义配置项
- 4、M2安装Mysql具体步骤
- 5、总结
1、前言
本文主要针对M2下,相应进行开发环境搭建,然后做一个文档记录,希望对相关人有帮助。如果只想要Docker-Compose文件,请转到第四节。
2、前置说明-Docker的代理访问
由于docker是海外,所以需要翻墙,为了下载镜像OK,所以在M2 Docker中设置代理,否则,Docker登录会异常。Docker Destop的安装教程这里则不重复累赘,在官网比较容易。

为了使得代理生效,由于Docker Destop使用CLI的方式的Docker生效,需要将代理软件设置全局代理。每个代理软件设置的方式不同。最后需要在Command输入如下命令使得生效。
export all_proxy=http://127.0.0.1:8001
如果想取消,则输入下面命令,
unset all_proxy
每个人的代理软件不同,所以代理地址也会不一样,所以需要看好自己的代理地址,目前举例子的情况下,我以自己的代理软件的代理地址为例,代理地址设置的是8001。
3、前置说明-Mysql的镜像访问
点击 MYSQL官方镜像说明,注意如何Docker命令的官方信息。
官方地址需要VPN才能访问
3.1、提取信息
本节是针对文档的一些关键性提取,官方文档主要是介绍如何Docker CLI的方式启动Mysql。
3.1.1、开启Mysql的实例
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
- some-mysql是容器名
- MYSQL_ROOT_PASSWORD是root用户的数据库密码
- tag是指定版本
3.1.2、Dokcer连接Mysql
通过mysql的命令行客户端连接mysql
docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p
- some-myslql是mysql的容器名
- some-network是连接docker的网络
这里的some-nework,我觉得在上一个命令没有指定的情况下,是容器启动对外暴露的localhost:随机端口,这个在docker destop中一般会展示随机接口是什么,只是我没有试过这个命令。我认为构建docker-compose指定暴露宿主机的同样端口比较好,否则暴露是随机端口,不会进行连接。
3.1.3、官方简易版的docker-compose
官方介绍了简易版的docker-compose,但是没有一些自定义设置,比如字符集设置之类,本文第三大部分则是以这个为基础,研究了一下docker-compose语法,然后写了一个docker-compose,具体步骤请看后文第四章。
# Use root/example as user/password credentials
version: '3.1'services:db:image: mysql# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password# (this is just an example, not intended to be a production configuration)command: --default-authentication-plugin=mysql_native_passwordrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: exampleadminer:image: adminerrestart: alwaysports:- 8080:8080
然后运行
docker stack deploy -c stack.yml mysql
或者
docker-compose -f stack.yml up
等待初始化完成访问 http://swarm-ip:8080, http://localhost:8080, 或者 http://host-ip:8080 访问页面的adminer。
adminer是页面管理mysql的一种工具
3.1.4、如何登录mysql bash
当容器起来后,如何登录mysql内部?
docker exec -it some-mysql bash
some-mysql就是你起的容器id名字。
如果想知道自己启动的容器名,则用
docker ps
然后看列表输出,后面会介绍。
3.1.5、自定义my.cnf文件
MySQL的默认配置可以在/etc/mysql/my.cnf中找到,可以通过外部指定容器配置目录的方式,把自定义的/my/custom/config-file.cnf的配置文件作为docker启动mysql容器时的默认设置。
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
3.1.6、如何知道其他自定义配置项
多配置选项可以作为标志传递给mysqld,然后能够自定义容器,而无需cnf文件。例如,如果想要更改所有表的默认编码和排序规则以使用UTF-8(utf8mb4),只需运行以下命令:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
如何想知道其他自定义配置项:
docker run -it --rm mysql:tag --verbose --help

注意,这里是提前下载好了docker的image
4、M2安装Mysql具体步骤
如果没有改命令的方式,下载mysql的5.7x版本,会爆 “no matching manifest for linux/arm64/v8 in the manifest list entries”,实际上mac兼容amd64架构,所以下载镜像,指定platform。
docker pull --platform linux/amd64 mysql:5.7.42
然后在自己的机器随意找一个目录,做宿主机和Docker的文件关联,例如,我在docker-dev目录下,创建mysql,以及相关的目录和文件。
mkdir /Users/tanqiwei/docker-dev/mysql
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn/conf
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn/data
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn/logs
mkdir /Users/tanqiwei/docker-dev/mysql/env-volumn/mysql-files
然后进入/Users/tanqiwei/docker-dev/mysql/env-volumn/conf,创建my.cnf,内容如下所示:
[client]
default_character_set=utf8
[mysqld]
default_character_set=utf8
最后在/Users/tanqiwei/docker-dev/mysql下编辑docker-compose.yml文件。
# Use root/example as user/password credentials
version: '3.1'services: mysql-dev:image: mysql:5.7.42# 针对M1/M2的毛病platform: linux/amd64# 当docker启动时,该容器也重新启动restart: alwaysports: - 3306:3306environment: MYSQL_ROOT_PASSWORD: rootvolumes: # 将宿主机的my.cnf文件映射到Docker容器中- /Users/tanqiwei/docker-dev/mysql/env-volumn/conf:/etc/mysql/conf.d# 将容器的/var/lib/mysql目录挂载到宿主机的/Users/tanqiwei/docker-dev/mysql/env-volumn/data目录- app_db:/var/lib/mysql# 将容器的/var/log/mysql目录挂载到宿主机的/Users/tanqiwei/docker-dev/mysql/env-volumn/logs目录- /Users/tanqiwei/docker-dev/mysql/env-volumn/logs:/var/log/mysql- /Users/tanqiwei/docker-dev/mysql/env-volumn/mysql-files:/var/lib/mysql-filesadminer:image: adminerrestart: alwaysports:- 8101:8080environment:ADMINER_DEFAULT_SERVER: mysql-devdepends_on:- mysql-devvolumes: app_db:driver: localdriver_opts:type: noneo: binddevice: /Users/tanqiwei/docker-dev/mysql/env-volumn/datanetworks: nt_mysql-dev:driver: bridge
最后使用Docker Compose命令启动

接下来进入mysql中命令,先输入docker ps得到运行列表(从log也可以看出mysql启动实例名字)。
tanqiwei@tanqiweideMacBook-Pro ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
faf7e3cd831c adminer "entrypoint.sh php -…" About an hour ago Up About an hour 0.0.0.0:8101->8080/tcp mysql-adminer-1
27cd34e2146c mysql:5.7.42 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-mysql-dev-1
429226c9d199 mariadb:10.6.4-focal "docker-entrypoint.s…" 25 hours ago Up 3 hours 3306/tcp, 33060/tcp mysql-test-db-1
这里可以看出来是mysql-mysql-dev-1,然后执行下面命令
docker exec -it mysql-mysql-dev-1 bash

接着创建数据库test,命令简单不展示了。
然后打开浏览器,http://localhost:8101.

这里是由于我登录过,所以左侧保留有信息
于是mysql的开发环境就搭建好了。
如果想关闭,则新建terminal,在/Users/tanqiwei/docker-dev/mysql的目录下,即原来docker-compose.yml文件所在的目录,执行如下命令关闭即可:
docker compose stop
5、总结
这篇文章主要是我安装mysql的一些笔记,希望对其他人有帮助
相关文章:
【Docker-Dev】Mac M2 搭建docker mysql
Mac M2 搭建Mysql 1、前言2、前置说明-Docker的代理访问3、前置说明-Mysql的镜像访问3.1、提取信息3.1.1、开启Mysql的实例3.1.2、Dokcer连接Mysql3.1.3、官方简易版的docker-compose3.1.4、如何登录mysql bash3.1.5、自定义my.cnf文件3.1.6、如何知道其他自定义配置项 4、M2安…...
idea中终端Terminal页面输入命令git log后如何退出
1、idea中Terminal输入命令git log后如何退出? 2、解决 输入q键会自动退出git log命令...
程序员必备IDEA插件,什么是是IDE?
IDEA是一款功能强大的集成开发环境(IDE)插件,它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。 我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天就给大家介绍一款IDEA插件ÿ…...
SkyWalking UI 修改发布Nginx
文章目录 SkyWalking UI修改图标修改路由发布到Nginx添加认证修改路由模式vite.config.ts添加baseNginx配置 SkyWalking UI skywalking-booster-ui下载地址 修改图标 替换 logo.svg 修改路由 router - data - index.ts 发布到Nginx 添加认证 # 安装 yum install -y h…...
移动硬盘打不开怎么办?没有比这更好的办法了
移动硬盘打不开是常见故障,可能的原因有很多,例如硬盘驱动器故障、文件系统损坏、分区表错误等。本文将详细分析这些原因,并提供相应的解决方法,帮助您解决移动硬盘打不开的问题。 当移动硬盘打不开时,为了保留其中的文…...
[场景实现]:多选框与树形结构递归
一、场景描述 实现一个分配权限的页面,最左侧是大的权限模块的名称,左右侧是控制其是否勾选的多选框。中间部分是一级权限模块下的子权限名称及多选框。 请求此权限模块数据的接口返回的是树形结构 对象数组。 主要属性为menuName表示权限名࿰…...
从0到1浅析Redis服务器反弹Shell那些事
文章目录 前言Redis服务1.1 特点与应用1.2 安装与使用1.3 语法和配置1.4 未授权访问 反弹Shell2.1 Web服务写入Webshell2.2 Linux定时任务反弹shell2.3 /etc/profile.d->反弹shell2.4 写入ssh公钥登录服务器2.5 利用Redis主从复制RCE2.6 SSRF漏洞组合拳->RCE 总结 前言 …...
JavaScript中alert、confrim、prompt的使用及区别【精选】
Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍JavaScript中alert、confrim、prompt的区别及使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任…...
Docker Compose容器编排实战
介绍 Docker Compose 是 Docker 官方提供的一种工具,用于定义和运行多个 Docker 容器的应用。它使用简单的 YAML 文件(通常称为 docker-compose.yml)来配置应用的服务,并使用单个命令即可创建、启动和停止整个应用。 官方文档&am…...
科技创新实验室数据管理优选:高效企业网盘推荐
科技创新实验室建设是国家加强科技创新基本能力建设的重要措施,企业网盘等高效办公工具的应用是保证科技创新实验室正常运行、提高科研项目团队合作效率的重要手段。 本文将介绍企业网盘Zoho WorkDrive提供的解决方案: 行业痛点1:分散的数据…...
记录一次云服务器使用docker搭建kafka的过程
创建网络 一定要将zookeeper注册中心与kafka建在一个network中,不然在springboot 集成 kakfa的demo测试代码中进行消息发送时会超时,报错: E x c e p t i o n t h r o w n w h e n s e n d i n g a m e s s a g e w i t h k e y ‘ n u l l…...
微信小程序与vue区别
微信小程序和Vue是两个完全不同的东西,虽然它们都是前端技术,但是有以下几点区别: 技术栈不同: 微信小程序使用WXML、WXSS和JavaScript进行开发,而Vue使用HTML、CSS和JavaScript进行开发。微信小程序是一种基于微信平台…...
GIT提交、回滚等基本操作记录
1、add文件时warning: LF will be replaced by CRLF in .idea/workspace.xml. 原因:windows中的换行符为 CRLF, 而在Linux下的换行符为LF,所以在执行add . 时会出现以下提示 解决:git config core.autocrlf false 2、GIT命令&…...
Apollo自动驾驶:从概念到现实的里程碑
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo Client2. Apollo Server3. Apollo Federation4. Apollo Tracing5. Apollo Codegen6. Apollo Link7. 其他工具和框架结论 🚀…...
再看promise
第一次学的时候没学牢固 后面意识到promise的重要性之后 陆陆续续的看、查,终于在今天 感觉好像明白点了 把自己敲的理解分享给大家 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name&…...
Redis 分布式锁总结
在一个分布式系统中,由于涉及到多个实例同时对同一个资源加锁的问题,像传统的synchronized、ReentrantLock等单进程情况加锁的api就不再适用,需要使用分布式锁来保证多服务实例之间加锁的安全性。常见的分布式锁的实现方式有zookeeper和redis等。而由于redis分布式锁相对于比…...
Vue懒加载深度解析:提升性能、优化用户体验的完整指南
文章目录 🌳引言🌳Vue懒加载基础🌲什么是懒加载?🌲组件级懒加载🌲图片懒加载 🌳懒加载的原理与优势🌲组件懒加载原理🌲图片懒加载原理🌲懒加载的优势 &#x…...
“图解C语言:一维数组的声明、创建与初始化艺术“
各位少年: 标题:《C语言一维数组的探索之旅:从声明到初始化,及如何避免常见误区》 引言 在编程世界中,数组无疑是最基础且重要的数据结构之一,尤其在C语言中,它以其简洁明了的特性为各类数据处…...
Unity坦克大战开发全流程——开始场景——场景装饰
开始场景——场景装饰 step1:先创建两个场景 step2:将地板拖拽到场景上 step3:将方块拖拽到场景上,并设置其参数 step4:将坦克拖拽到场景上 step5:创建点光源 step6:旋转炮塔 将该脚本挂载到炮…...
【链表OJ—链表的回文结构】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
