【Docker-Dev】Mac M2 搭建docker mysql

Mac M2 搭建Mysql

1、前言

本文主要针对M2下,相应进行开发环境搭建,然后做一个文档记录,希望对相关人有帮助。如果只想要Docker-Compose文件,请转到第四节。

2、前置说明-Docker的代理访问

由于docker是海外,所以需要翻墙,为了下载镜像OK,所以在M2 Docker中设置代理,否则,Docker登录会异常。Docker Destop的安装教程这里则不重复累赘,在官网比较容易。

为了使得代理生效,由于Docker Destop使用CLI的方式的Docker生效,需要将代理软件设置全局代理。每个代理软件设置的方式不同。最后需要在Command输入如下命令使得生效。

bash 复制代码
export all_proxy=http://127.0.0.1:8001

如果想取消,则输入下面命令,

bash 复制代码
unset all_proxy

每个人的代理软件不同,所以代理地址也会不一样,所以需要看好自己的代理地址,目前举例子的情况下,我以自己的代理软件的代理地址为例,代理地址设置的是8001。

3、前置说明-Mysql的镜像访问

点击 MYSQL官方镜像说明,注意如何Docker命令的官方信息。

官方地址需要VPN才能访问

3.1、提取信息

本节是针对文档的一些关键性提取,官方文档主要是介绍如何Docker CLI的方式启动Mysql。

3.1.1、开启Mysql的实例

bash 复制代码
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
  1. some-mysql是容器名
  2. MYSQL_ROOT_PASSWORD是root用户的数据库密码
  3. tag是指定版本

3.1.2、Dokcer连接Mysql

通过mysql的命令行客户端连接mysql

bash 复制代码
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,具体步骤请看后文第四章。

bash 复制代码
# 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_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

然后运行

bash 复制代码
docker stack deploy -c stack.yml mysql

或者

bash 复制代码
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内部?

bash 复制代码
docker exec -it some-mysql bash

some-mysql就是你起的容器id名字。

如果想知道自己启动的容器名,则用

bash 复制代码
docker ps

然后看列表输出,后面会介绍。

3.1.5、自定义my.cnf文件

MySQL的默认配置可以在/etc/mysql/my.cnf中找到,可以通过外部指定容器配置目录的方式,把自定义的/my/custom/config-file.cnf的配置文件作为docker启动mysql容器时的默认设置。

bash 复制代码
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),只需运行以下命令:

bash 复制代码
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

如何想知道其他自定义配置项:

bash 复制代码
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。

bash 复制代码
docker pull --platform linux/amd64 mysql:5.7.42

然后在自己的机器随意找一个目录,做宿主机和Docker的文件关联,例如,我在docker-dev目录下,创建mysql,以及相关的目录和文件。

bash 复制代码
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,内容如下所示:

bash 复制代码
[client]
default_character_set=utf8
[mysqld]
default_character_set=utf8

最后在/Users/tanqiwei/docker-dev/mysql下编辑docker-compose.yml文件。

bash 复制代码
# 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: always
    ports: 
      - 3306:3306
    environment: 
        MYSQL_ROOT_PASSWORD: root
    volumes: 
      # 将宿主机的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-files


  adminer:
    image: adminer
    restart: always
    ports:
      - 8101:8080
    environment:
      ADMINER_DEFAULT_SERVER: mysql-dev
    depends_on:
      - mysql-dev

volumes: 
  app_db:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /Users/tanqiwei/docker-dev/mysql/env-volumn/data

networks: 
  nt_mysql-dev:
    driver: bridge      

最后使用Docker Compose命令启动

接下来进入mysql中命令,先输入docker ps得到运行列表(从log也可以看出mysql启动实例名字)。

bash 复制代码
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,然后执行下面命令

bash 复制代码
docker exec -it mysql-mysql-dev-1 bash

接着创建数据库test,命令简单不展示了。

然后打开浏览器,http://localhost:8101.

这里是由于我登录过,所以左侧保留有信息

于是mysql的开发环境就搭建好了。

如果想关闭,则新建terminal,在/Users/tanqiwei/docker-dev/mysql的目录下,即原来docker-compose.yml文件所在的目录,执行如下命令关闭即可:

bash 复制代码
docker compose stop

5、总结

这篇文章主要是我安装mysql的一些笔记,希望对其他人有帮助

相关推荐
sleP4o2 分钟前
Python操作MySQL
开发语言·python·mysql
晓星航8 分钟前
Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互
人工智能·docker·机器人
大熊程序猿28 分钟前
python 读取excel数据存储到mysql
数据库·python·mysql
知识分享小能手1 小时前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
lamb张1 小时前
MySQL锁
数据库·mysql
躺平的花卷2 小时前
Python爬虫案例六:抓取某个地区某月份天气数据并保存到mysql数据库中
数据库·爬虫·python·mysql
神秘的土鸡3 小时前
Linux中使用Docker容器构建Tomcat容器完整教程
linux·运维·服务器·docker·容器·tomcat
玖石书3 小时前
docker 数据管理
docker·容器
飞翔的佩奇4 小时前
xxl-job适配sqlite本地数据库及mysql数据库。可根据配置指定使用哪种数据库。
数据库·spring boot·mysql·sqlite·xxl-job·任务调度
如意机反光镜裸5 小时前
CentOS7安装MySQL教程
数据库·mysql