二、mac使用Docker搭建MySQL服务

使用Docker搭建MySQL服务 - sablier - 博客园

一、安装镜像

二、建立镜像

2.1 拉取官方镜像

(我们这里选择5.7,如果不写后面的版本号则会自动拉取最新版)

docker pull mysql:5.7   # 拉取 mysql 5.7
docker pull mysql       # 拉取最新版mysql镜像

问题处理:

我执行docker pull mysql:5.7,报错

no matching manifest for linux/arm64/v8 in the manifest list entries

原因:

Mac m1的芯片,想用docker拉取mysql5.7的镜像,会报这个错误

Mac电脑Docker拉取Mysql报错?no matching manifest for linux/arm64/v8 in the manifest list entries_会写代码的花城的博客-CSDN博客

解决办法:

docker pull --platform linux/x86_64 mysql:5.7

2.2 查看是否拉取成功

sudo docker images

2.3 通过刚刚拉取的image来启动容器

模板:

sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • –name:容器名,此处命名为mysql
  • -e:配置信息,此处配置mysql的root用户的登陆密码
  • -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -d:后台运行容器,保证在退出终端后容器继续运行

实际操作:

1、我要启动两个2个docker容器,所以--name 容器名称,一个为mysql1,一个为mysql2

2、本地3306端口,已经被我本地的mysql占用了,不能再映射到我本地的3306地步端口,所以一个映射到3307 和3308

启动mysql1 容器:

sudo docker run -p 3307:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

报错:

 此时有2个报错:

a、WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

b、Bind for 0.0.0.0:3307 failed: port is already allocated.

a问题是因为cpu的问题,可以忽略

b问题是因为我本地3307端口被占用了

杀死占用3307程序的端口(3307被我docker一个容器占用了)

查看当前正在运行的容器

docker ps

找到端口3307的容器,CONTAINER ID

关掉这个容器

docker stop 7f568f7868ce

再次检查 当前运行的容器

docker ps

再次运行

sudo docker run -p 3307:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

报错:

docker: Error response from daemon: Conflict. The container name "/mysql1" is already in use by container "78dc9c67150d428c1a397f3561b32ca664d8268f4ec9c0386397c5abc66d4184". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'

原因,我们第一次执行运行容器命令时,虽然运行失败了,但是依然生成了容器名为为mysql1的容器。当我们再次运行时,容器名称mysql1就重复了。

解决办法:

删掉历史的容器mysql1

查看所有的容器(正在运行的+历史的)

 docker ps -a

删除掉名为mysql1的容器(CONTAINER ID: 78dc9c67150d)

docker rm 78dc9c67150d

再次启动mysql1的容器

sudo docker run -p 3307:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

启动成功

查看当前运行的容器

docker ps

然后我们启动名为mysql2的容器,端口号为3308

sudo docker run -p 3308:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

查看当前正在运行的容器

docker ps
  • 可以看到容器ID,容器的源镜像,启动命令,创建时间,状态,端口映射信息,容器名字

三、mysql数据持久化

为什么要做数据持久化:

因为我们在mysql容器内修改数据是不会被保存的,我们将数据库容器的目录映射到本机,将数据保存到本机上,这样在容器里做的数据修改,就会被保存了。

如果不做数据持久化,则每次启动mysql 里面的数据都是初始数据。

如果不需要做数据持久化,这个操作可以省略。

命令模版:

duso docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
  • -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录

我的命令:

docker run --name mysql3 -d -p 3309:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

解析:

--name mysql3                                     #  对容器的命名
-d                                                       #后台运行
-p 3309:3306                                     #对外暴露端口号3310
-v /home/mysql/conf:/etc/mysql/conf.d     #配置文件挂载到当前宿主机的/home/mysql/conf
-v /home/mysql/data:/var/lib/mysql            #数据挂载到当前宿主机的 /home/mysql/data
-e MYSQL_ROOT_PASSWORD=123456    #设置mysql的root用户的密码是:123456

执行我的命令后报错:

docker: Error response from daemon: Mounts denied:
The path /home/mysql/data is not shared from the host and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> Resources -> File Sharing.
See https://docs.docker.com/desktop/mac for more info.

翻译:

docker:来自daemon的错误响应:mount被拒绝:

路径/home/mysql/data不是由主机共享的,Docker也不知道。

你可以配置共享路径从Docker ->首选项…—>资源—>文件共享。

更多信息请参见https://docs.docker.com/desktop/mac。

原因:

我映射到的本级目录应该没有设置共享权限

解决办法:

 Preferences... -> Resources -> File Sharing.

 我添加了/home

然后Apply&Restart

再次启动容器就好了。

docker run --name mysql4 -d -p 3309:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

查看当前运行的docker

 docker ps

四、连接mysql

4.1进入docker本地连接mysql客户端

1、进入名为mysql4的docker容器

sudo docker exec -it mysql4 bash

注意:这里的mysql4是容器的名字,不是数据库的名字

2、连接mysql

mysql -uroot -p123456

这里的mysql是数据库mysql的名字,不是容器的名字

这就链接成功了

五、校验是否数据持久化成功

在mysql内创建一个库

create database hello;

关掉 容器mysql4

docker stop mysql4

查看容器mysql4的容器id  containerId

docker ps -a

再次启动容器mysql4

docker start $containerId

docker start 99d4aff8d5a3

查看容器mysql4启动成功

docker ps

进入容器

sudo docker exec -it mysql4 bash

链接数据库

mysql -uroot -p123456

查看数据库里所有的库,hello库是否存在

show databases;

hello库存在,证明数据持久化成功

六、客户端操作&介绍

上面都是命令行的操作,这里介绍一下客户端操作

docker操作界面,入口

Dashboard

 1是我们的容器列表,这里可以执行删除、启动、暂停容器等操作

2 就是image的列表,具体可以看我上一章关于image的介绍

​​​​​​一、mac 安装及使用docker_喵酱-CSDN博客

3好像是数据挂载、做持久化之类的(我也不是很清楚)

设置界面、入口

Preferences

 这里可以设置国内镜像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做测试的喵酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值