Docker之安装Mysql

本文详细介绍了如何在Docker中查找、拉取mysql镜像,配置文件挂载,包括为何选择挂载方式、配置文件位置查找、数据文件位置、宿主机路径创建及挂载、启动容器并处理SELinux权限问题。

一、查找镜像

查找Docker Hub上的mysql镜像

docker search mysql

image-20230822134856314

二、拉取镜像

默认拉取最新版的mysql 8.0的:sudo docker pull mysql

image-20230822134942748

三、查看镜像

拉取完成后 看下镜像是否成功拉取

sudo docker images [镜像名]

image-20230822135226362

四、配置文件

这里我们讲讲为什么我要采取挂载的方式以及我怎么知道配置文件在哪?

好的,接下来我们一一解答

  • 为什么我要采取挂载的方式?
  1. 有状态服务是指: 需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql、redis、kafka、zookeeper等)

  2. Docker容器原则上是短暂的,如果容器被删除或损坏,任何数据或配置都将丢失

  • 怎么知道配置文件在哪?
  1. 大家部署的 MySQL,大概文件路径不一致。我们可以先创建个测试的 MySQL 容器,然后再根据查找出的文件具体路径位置,重新创建我们符合我们需求的 MySQL 容器,命令如下:

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql

image-20230822135810553

  1. 查找数据文件位置 进入Docker容器内

输入sudo docker exec -it mysql bash进入Docker容器内,然后数据mysql --help|grep 'my.cnf'查找Docker容器内,Mysql配置文件my.cf的位置

image-20230822140731392

`order of preference, my.cnf, $MYSQL_TCP_PORT,` 路径按优先排序,/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

​ 配置文件的路径不一定都一样,有些位置是在/etc/my.cnf。而我ubuntu系统上,实际存在位置是在/etc/my.cnf

​ 查找数据文件位置 用于在容器上运行docker inspect命令的JSON输出具有一个 Mount密钥,其值提供了有关数据目录卷的信息:

image-20230822141305376

image-20230822141335597

输出显示源文件夹:/var/lib/docker/volumes,表示已安装在 /var/lib/mysql容器内的服务器数据目录中

这样就可以把相关路径了解清楚

五、挂载配置文件

接下来,我们需要在宿主机上,创建一个数据和配置文件的挂载路径

sudo mkdir -p /usr/local/src/mysql/conf && sudo mkdir -p /usr/local/src/mysql/data

image-20230822141826704

创建好宿主机的挂载数据路径后,我们将测试容器里 MySQL 的配置文件复制到该路径。后面要是修改配置直接修改宿主机的配置文件即可。

sudo docker cp mysql:/etc/my.cnf /usr/local/src/mysql/conf

image-20230822142238039

六、启动容器

启动前需要将之前的安装测试的删除掉

sudo docker rm -f mysql

启动命令

sudo docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v /usr/local/src/mysql/conf/my.cnf:/etc/my.cnf -v /usr/local/src/mysql/data:/var/lib/mysql -v /usr/local/src/mysql/log:/var/log/mysql --restart=on-failure:3 -d mysql

image-20230822145411948
实现服务自启动 启动命令

sudo docker run --restart=always --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v /usr/local/src/mysql/conf/my.cnf:/etc/my.cnf -v /usr/local/src/mysql/data:/var/lib/mysql -v /usr/local/src/mysql/log:/var/log/mysql --restart=on-failure:3 -d mysql

image-20230822150745336

image-20230822150830441

注:异常情况

如果如下图所示,运行容器时报错,因为Ubuntu安全Selinux禁止了一些安全权限,导致mysql和mariadb在进行挂载/var/lib/mysql的时候会提示如下信息

image-20230822133510563

解决办法:在docker run中加入 --privileged=true 给容器加上特定权限

sudo docker run --privileged=true --name mysql
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=root
-v /usr/local/src/mysql/conf/my.cnf:/etc/my.cnf
-v /usr/local/src/mysql/data:/var/lib/mysql
-v /usr/local/src/mysql/log:/var/log/mysql
–restart=on-failure:3
-d mysql

查看是否启动成功

sudo docker ps

查看启动日志

sudo docker logs -f mysql

到此为止,Docker中安装Mysql总结已写完,喜欢的粉丝点个关注吧,我会持续更新软件开发相关的技术。

在Mac系统上使用Docker安装MySQL可参考以下两种方式: ### 默认配置安装 依据官方docker安装说明(https://hub.docker.com/_/mysql ),可使用如下配置进行默认配置安装。 首先,创建一个`docker-compose.yml`文件,内容如下: ```yaml version: '3' services: mysql: image: mysql:8.0.18 container_name: mysql-8.0 restart: always # 映射宿主机端口33060 ports: - 33060:3306 - 33062:33062 environment: - MYSQL_ROOT_PASSWORD=123456 # mysql数据映射宿主机路径/data/docker-mysql volumes: - /data/docker-mysql:/var/lib/mysql ``` 然后在该文件所在目录下,执行命令`docker-compose up -d`启动容器。这样就完成了MySQL的默认配置安装 [^1]。 ### 自定义配置安装 使用`docker run`命令进行自定义配置安装,命令如下: ```bash docker run -p 3306:3306 --name mysql8 \ -v /Volumes/data/develop/mysql/8/logs:/var/log/mysql \ -v /Volumes/data/develop/mysql/8/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=password \ -e TZ='Asia/Shanghai' \ --restart=always \ -d mysql:8 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_general_ci ``` 此命令会创建一个名为`mysql8`的容器,将宿主机的3306端口映射到容器的3306端口,设置MySQL的root密码为`password`,并指定了日志和数据的挂载路径,同时设置了字符集和时区等参数 [^2]。 ### 简易安装 也可以使用以下简易命令进行安装: ```bash docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql ``` 该命令会创建一个名为`mysql-test`的容器,将宿主机的3306端口映射到容器的3306端口,并设置root密码为`123456` [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

双木林L

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

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

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

打赏作者

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

抵扣说明:

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

余额充值