安装
1、拉取镜像(这里使用5.7.22版本)
docker pull mysql:5.7.22
2、启动
# 创建了一个名为myMysql的MySQL数据库服务器容器实例
docker run --name myMysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.22
命令说明:
- -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码
其他命令
- 访问容器
docker exec -it myMysql bash
进入容器内部,我们就可以登录到mysql了
[root@iZbp1b5k5bjps0dw8owk7tZ ~]# docker exec -it myMysql bash
root@ef155a347409:/# ls
bin docker-entrypoint-initdb.d home media proc sbin tmp
boot entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
root@ef155a347409:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show badatases;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'badatases' at line 1
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql>
- 查看日志
docker logs -f myMysql
- 进入终端
docker exec -it myMysql mysql -uroot -p123456
- 使用自定义MySQL配置文件
默认情况下,MySQL的启动配置文件是/etc/mysql/my.cnf,而/etc/mysql/conf.d目录下的存在任何.cnf格式的文件时,都会使用该文件中配置项替换默认配置。
因此,如果要使用自定义配置,可以在宿主机创建一个配置文件,然后在创建容器时通过-v参数,以数据卷的方式将自定义配置挂载到mysql容器的/etc/mysql/conf.d目录下。
例:
docker run --name myMysql -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.22
以上示例会启动一个名为myMysql的MySQL服务器容器,该文件启动时会同时使用/usr/local/mysql/conf/my.cnf中的配置
注:如果使用到mysql主从配置,那么在mysql 5.7版本中不要使用挂载配置文件的方式,可以采用宿主机拷贝替换容器中的/etc/mysql/my.cnf文件,因为博主发现挂载配置文件开启log-bin没有生效,在这块遇到了坑,如果谁有更好的方法可以给博主留言
- 数据存储
-
在使用mysql镜像创建MySQL容器时,数据库数据存储可能会有以下两种方式:
-
1).数据卷容器:使用Docker默认的数据管理方式来管理数据库的数据存储,在这种方式下,数据库文件会被写入数据库的内部。这种方式对于用户非常简单,缺点是很在宿主机上找到所存储的数据。
-
2).外部数据卷:在宿主机创建一个数据目录,再将数据目录挂载到容器内部。这种方式可以很方便的在宿主机上找到并进行数据管理,但需要确保数据目录的存在。
当使用外部数据卷时,例:
docker run --name myMysql -p 3306:3306 -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.22
表示将宿主机的/usr/local/mysql/data目录挂载到容器内的/var/lib/mysql目录
- 日志存储
同理,我们也可以将日志挂载到宿主机上,例:
docker run --name myMysql -p 3306:3306 -v /usr/local/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.22
表示将宿主机的/usr/local/mysql/log目录挂载到容器内的/var/log/mysql目录
那么总结起来同时挂载配置、数据卷、日志的命令为:
docker run --name myMysql -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.22