Docker和 Docker Compose安装MySQL:快速搭建数据库环境
在现代软件开发中,MySQL是最流行的关系型数据库之一,而Docker和 Docker Compose则是容器化技术的代表工具。将两者结合,可以快速、便捷地搭建一个隔离的MySQL数据库环境,非常适合开发、测试和学习。本文将详细介绍如何使用 Docker和Docker Compose安装和运行 MySQL。
1 Docker和 Docker Compose安装MySQL的原因
- 快速部署:无需手动安装和配置MySQL,只需一条命令即可启动
- 环境隔离:MySQL运行在独立的容器中,不会影响主机环境
- 版本管理:可以轻松切换不同版本的MySQL
- 便携性:Docker镜像可以在任何支持Docker的平台上运行
- 易于清理:测试完成后,可以轻松删除容器,不留痕迹
- 多容器管理:使用Docker Compose可以轻松管理多个容器(如 MySQL + PHP + Nginx)
2 安装Docker和Docker Compose
2.1 Docker安装
请参考:Docker入门指南:1分钟搞定安装 + 常用命令,轻松入门容器化!-CSDN博客
2.2 Docker Compose安装
请参考:【docker compose入门指南】安装与常用命令参数全解析,助你入门compose!-CSDN博客
3 拉取MySQL镜像
[root@node3 ~]# docker pull mysql:5.7.43
5.7.43: Pulling from library/mysql
9ad776bc3934: Downloading 5.933MB
9ad776bc3934: Downloading 12.93MB
9ad776bc3934: Downloading 20.5MB
9ad776bc3934: Downloading 33.98MB
9ad776bc3934: Downloading 43.19MB
9ad776bc3934: Pull complete
9e4eda42c982: Pull complete
df6d882cf587: Pull complete
6c804e92b324: Pull complete
fd54ada0c48d: Pull complete
4ed8fb20ac8d: Pull complete
eec2b1bc5454: Pull complete
41c3423057b7: Pull complete
122b2c7b16c0: Extracting 45.68MB
122b2c7b16c0: Pull complete
0d30e03d70e3: Pull complete
71c43898e898: Pull complete
Digest: sha256:4f9bfb0f7dd97739ceedb546b381534bb11e9b4abf013d6ad9ae6473fed66099
Status: Downloaded newer image for mysql:5.7.43
docker.io/library/mysql:5.7.43
[root@node3 ~]#
4 Docker Compose安装MySQL
4.1 创建目录以及自定义文件
[root@node3 mysql]# mkdir -p /project/mysql/config
[root@node3 mysql]# mkdir -p /project/mysql/data
[root@node3 mysql]# touch /project/mysql/config/my.cnf
[root@node3 mysql]# touch /project/mysql/docker-compose.yml
[root@node3 mysql]# tree /project/mysql
/project/mysql
├── config
│ └── my.cnf
├── data
└── docker-compose.yml
2 directories, 2 files
[root@node3 mysql]#
说明:
config/my.cnf:自定义MySQL配置文件
data/:用于持久化MySQL数据目录
4.2 配置自定义MySQL文件
vim /project/mysql/config/my.cnf
# 编辑MySQL自定义配置文件,并添加如下简单内容
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 1000
innodb_buffer_pool_size = 1G
[client]
default-character-set = utf8mb4
4.3 配置docker-compose.yml文件
vim /project/mysql/docker-compose.yml
# 编辑docker-compose.yml并添加如下内容
version: '2.33'
services:
mysql:
image: mysql:5.7.43
container_name: mysql5.7.43
environment:
MYSQL_ROOT_PASSWORD: lahmy1c@
MYSQL_DATABASE: mydb
MYSQL_USER: mydbuser
MYSQL_PASSWORD: lahmy1c@
ports:
- "13306:3306"
volumes:
- ./data:/var/lib/mysql
- ./config/my.cnf:/etc/mysql/conf.d/my.cnf
restart: always
参数说明:
- image:使用的MySQL镜像(5.7.43)
- container_name:容器名称
- environment:设置MySQL的环境变量,包括root密码、数据库名称、用户和密码
- ports:将主机的13306端口映射到容器的3306端口
- volumes:
1)./data:/var/lib/mysql:将MySQL数据目录挂载到主机上的data目录,以实现数据持久化2)./config/my.cnf:/etc/mysql/conf.d/my.cnf:将自定义配置文件挂载到容器中
- restart:设置容器总是重启(即使主机重启)
4.4 启动MySQL容器
[root@node3 mysql]# docker-compose up -d
WARN[0000] /project/mysql/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 2/2
✔ Network mysql_default Created 1.4s
✔ Container mysql5.7.43 Started 1.9s
[root@node3 mysql]#
参数说明:
-d:表示后台运行容器
4.5 验证MySQL是否运行
[root@node3 mysql]# docker-compose ps
WARN[0000] /project/mysql/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mysql5.7.43 mysql:5.7.43 "docker-entrypoint.s…" mysql About a minute ago Up About a minute 33060/tcp, 0.0.0.0:13306->3306/tcp, [::]:13306->3306/tcp
[root@node3 mysql]#
5 连接使用MySQL
5.1 安装MySQL客户端
yum install mysql -y
5.2 命令行连接MySQL
mysql -h 127.0.0.1 -P13306 -u root -p
[root@node3 mysql]# mysql -h 127.0.0.1 -P13306 -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.43 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
MySQL [(none)]>
5.3 容器内连接使用MySQL
docker exec -it mysql5.7.43 mysql -u root -p
[root@node3 mysql]# docker exec -it mysql5.7.43 mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.43 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
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>
5.4 验证自定义配置是否生效
# 执行如下命令简单验证和4.2章节自定义配置是否一致
mysql> SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'max_connections';+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| character_set_server | utf8mb4 |
+----------------------+---------+
1 row in set (0.01 sec)
mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set (0.01 sec)
mysql>
6 常用操作
6.1 查看日志
docker-compose logs mysql
6.2 停止容器
docker-compose down
6.3 启动容器
docker-compose up -d
6.4 删除容器和数据卷
docker-compose down -v
7 总结
通过Docker和Docker Compose安装MySQL,并支持自定义配置文件(my.cnf),可以极大地简化数据库环境的搭建和管理。无论是测试还是学习,Docker Compose都能为你提供一个干净、隔离的环境,并支持个性化配置。希望能对你快速上手 Docker Compose和MySQL的结合使用有所帮助!