环境准备
- 确认 Docker 已安装
确保系统中已安装 Docker。运行以下命令检查:
docker --version
如果未安装,参考官方文档安装:https://docs.docker.com/get-docker/
- 拉取官方 MySQL 镜像
使用 Docker Hub 上的官方 MySQL 镜像(默认使用最新版本,例如mysql:latest
)。可指定版本(如mysql:8.0
):
docker pull mysql:8.0
验证镜像已拉取:
docker images
创建 MySQL 容器
- 运行容器
使用以下命令创建并启动 MySQL 容器:
docker run -d \
--name mysql_container \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=rootpassword \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=password \
-v mysql_data:/var/lib/mysql \
--restart=unless-stopped \
mysql:8.0
参数说明:
-d
: 后台运行容器。--name mysql_container
: 指定容器名称,便于管理。-p 3306:3306
: 映射宿主机 3306 端口到容器内 MySQL 默认端口 3306。-e MYSQL_ROOT_PASSWORD=rootpassword
: 设置 MySQL root 用户密码(必须)。-e MYSQL_DATABASE=mydb
: 创建默认数据库(可选)。-e MYSQL_USER=user
: 创建普通用户(可选)。-e MYSQL_PASSWORD=password
: 设置普通用户密码(可选)。-v mysql_data:/var/lib/mysql
: 将 MySQL 数据目录挂载到命名卷mysql_data
,确保数据持久化。--restart=unless-stopped
: 容器自动重启,除非手动停止。mysql:8.0
: 使用 MySQL 8.0 镜像。
- 验证容器运行
检查容器是否正常运行:
docker ps
查看容器日志,确认无错误:
docker logs mysql_container
- 测试数据库连接
- 本地连接:使用 MySQL 客户端(如 MySQL Workbench)或命令行连接:
bash docker exec -it mysql_container mysql -u root -p
输入rootpassword
登录,验证是否能访问数据库。 - 远程连接:通过宿主机的
localhost:3306
使用 MySQL 客户端连接:- 用户:
root
或user
- 密码:
rootpassword
或password
- 数据库:
mydb
- 用户:
- 检查数据卷
确认数据持久化卷是否存在:
docker volume ls
数据存储在 mysql_data
卷中,即使容器删除,数据也不会丢失。
配置文件(可选)
若需自定义 MySQL 配置(如字符集、性能参数),可挂载自定义配置文件:
- 创建配置文件(例如
my.cnf
):
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=200
- 修改
docker run
命令,挂载配置文件:
docker run -d \
--name mysql_container \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=rootpassword \
-v mysql_data:/var/lib/mysql \
-v /path/to/my.cnf:/etc/mysql/my.cnf \
--restart=unless-stopped \
mysql:8.0
替换 /path/to/my.cnf
为本地配置文件路径。
使用 Docker Compose(推荐)
为简化管理和多容器协作,可使用 Docker Compose:
- 创建
docker-compose.yml
文件:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql_container
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
mysql_data:
- 启动容器:
docker-compose up -d
- 停止和删除:
docker-compose down
管理容器
- 停止容器:
docker stop mysql_container
- 启动容器:
docker start mysql_container
- 删除容器(数据卷保留):
docker rm mysql_container
- 删除数据卷(谨慎,数据将丢失):
docker volume rm mysql_data
- 查看日志:
docker logs mysql_container
注意事项
- 密码安全:生产环境中,使用强密码并通过
.env
文件管理敏感信息。例如:
docker run -d --name mysql_container -p 3306:3306 --env-file .env mysql:8.0
.env
文件示例:
MYSQL_ROOT_PASSWORD=your_secure_password
MYSQL_USER=user
MYSQL_PASSWORD=secure_password
MYSQL_DATABASE=mydb
- 端口冲突:若宿主机 3306 端口被占用,可映射其他端口(如
-p 3307:3306
)。 - 版本选择:MySQL 8.0 默认使用
caching_sha2_password
认证插件,若客户端不支持,可在my.cnf
中设置default_authentication_plugin=mysql_native_password
。 - 性能优化:根据需求调整 MySQL 配置(如
innodb_buffer_pool_size
)并挂载配置文件。 - 备份数据:定期备份数据卷或使用
mysqldump
:
docker exec mysql_container mysqldump -u root -p mydb > backup.sql
连接到 WordPress(补充)
若用于 WordPress,可结合之前的 WordPress 配置,确保 WORDPRESS_DB_*
环境变量与 MySQL 容器匹配:
WORDPRESS_DB_HOST: mysql_container
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: mydb
完成以上步骤,基于官方 MySQL 镜像的容器即可成功运行并支持应用连接!