在安装Mysql之前,我们可以先查看一下我们的镜像,输入命令:
docker images
能发现,镜像里面只有一个Nginx,并没有Mysql
然后我们可以像上一篇安装Nginx一样,安装Mysql镜像。
输入以下命令,安装Mysql镜像:
docker pull mysql:8.0.32
最后看见:"Status: Downloaded newer image for mysql:8.0.32",就代表下载成功。
再查看一下镜像,输入命令:
docker images
能看到,因为我们是指向下载"mysql 8.0.32"版本,所以TAG标签给出的也是8.0.32
如果有的同学,使用的是 "latest"下载,那么TAG标签,也会给出 "latest"。
那么这时候,需要查看安装的镜像具体版本是多少,可以看一下这篇文章:
docker镜像latest具体是哪个版本其实docker也有提供镜像具体版本的获取方式。docker 中 image 镜像管理image 中有一个inspect显示一个或多个图像的详细信息那么组合一下,就是这样:https://blog.csdn.net/longfeng995/article/details/128828905
以上,mysql镜像就安装好了。
好的,镜像安装好后,同学们能发现,直接去启动mysql 是找不到的。
因为这只是镜像,我们还需要创建它的容器,并且启动容器才可以。
我们可以先查看一下容器,输入命令:
docker ps -a
可以看到,只有一个Nginx容器,这个Nginx,是我们之前创建的。
那么需要创建一个mysql容器
输入下面的命令:
docker run --name mysql-test -p 3306:3306 -v D:/docker/mysql/my.cnf:/etc/my.cnf -v D:/docker/mysql/mysqld.log:/var/log/mysqld.log -v D:/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d IMAGE ID
命令中,各项参数解释:
run 在新容器中运行命令
--name 为容器分配一个名称。上面我们分配的名称就叫"mysql-test"
-p 将容器的端口发布到。上面的"3306:3306",就是将我们的3306端口,映射到容器里的3306端口,第一个3306就是我们环境中的,第二个3306是docker容器中的
-v 绑定挂载卷。就拿其中第一个"D:/docker/mysql/conf.d:/etc/mysql/conf.d"说明,前者很容易看出,我的环境是Windows环境,所以是D盘,然后一直到 conf.d 配置目录,中间有一个英文冒号":"就是映射到docker容器中的"conf.d"配置目录,将两者进行绑定,这样我们在"D:/docker/mysql/conf.d"中修改配置,docker容器中的配置文件,也会相对应跟着修改。
-d 在后台运行container并打印容器ID
执行到这里,容器也就成功安装好了。我们来看一下容器的状况。
输入命令查看:
docker ps -a
这样容器就运行成功了。
我们去测试一下,打开"Navicat Premium"
连接后就是这样的了。默认情况是这样的。
但是!!!这是一切正常的情况,如果不正常呢?
在 run 容器的时候,如下图,会出现一系列错误。
这个意思,其实跟之前 Nginx 的容器是一样的,配置文件错误。
我们想要的是一个文件,但是这里却是文件夹,为什么呢?
既然我们是Windows 下面玩的,来看看"我的电脑"里,我们指定的目录是什么样的:
看到啦,我们的"my.cnf"和"mysqld.log"这两个是目录,而这两个,一个是配置文件,另一个是日志文件,是文件来的喔。
会出现这样,是因为我们上面运行docker时,检测到我们当前目录里没有对应的文件,所以自动生成,但是生成了目录。。。
所以我们需要修改成这样:
因为"my.cnf"是我们的配置文件,所以需要进行配置的哈。默认配置是下面这样:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
将上面的直接copy到"my.cnf"文件里即可。
然后我们来启动容器,命令:
docker start CONTAINER ID
查看容器:
docker ps
状态是已经运行了哈。
然后我们再去"Navicat Premium"连接一下试试呢。
连接成功。。。
撒花~