【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的一些笔记,希望对其他人有帮助

相关推荐
C吴新科2 小时前
MySQL入门操作详解
mysql
Ai 编码助手4 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
南猿北者5 小时前
docker容器
docker·容器
白云如幻5 小时前
MySQL排序查询
数据库·mysql
苹果醋35 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰5 小时前
[linux]docker基础
linux·运维·docker
time never ceases5 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle
stars_User6 小时前
MySQL数据库面试题(下)
数据库·mysql
Yaml46 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
yanwushu6 小时前
Xserver v1.4.2发布,支持自动重载 nginx 配置
mysql·nginx·php·个人开发·composer