安装
1、拉取镜像(这里使用5.7.22版本)
docker pull mysql:5.7.22
2、启动
# 创建了一个名为 myMysql 的 MySQL 数据库服务器容器实例
docker run --name myMysql \
-p 3306:3306 \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22
命令说明:
- -v /etc/localtime:/etc/localtime:ro:为了保证容器时区和系统时区相同,需要挂载系统时间到容器内
- -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 容器时,数据库数据存储可能会有以下两种方式:
数据卷容器:使用Docker默认的数据管理方式来管理数据库的数据存储,在这种方式下,数据库文件会被写入数据库的内部。这种方式对于用户非常简单,缺点是很在宿主机上找到所存储的数据。
外部数据卷:在宿主机创建一个数据目录,再将数据目录挂载到容器内部。这种方式可以很方便的在宿主机上找到并进行数据管理,但需要确保数据目录的存在。
当使用外部数据卷时,例:
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