基于docker官方镜像创建MySQL容器

环境准备

  1. 确认 Docker 已安装
    确保系统中已安装 Docker。运行以下命令检查:
   docker --version

如果未安装,参考官方文档安装:https://docs.docker.com/get-docker/

  1. 拉取官方 MySQL 镜像
    使用 Docker Hub 上的官方 MySQL 镜像(默认使用最新版本,例如 mysql:latest)。可指定版本(如 mysql:8.0):
   docker pull mysql:8.0

验证镜像已拉取:

   docker images

创建 MySQL 容器

  1. 运行容器
    使用以下命令创建并启动 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 镜像。
  1. 验证容器运行
    检查容器是否正常运行:
   docker ps

查看容器日志,确认无错误:

   docker logs mysql_container
  1. 测试数据库连接
  • 本地连接:使用 MySQL 客户端(如 MySQL Workbench)或命令行连接:
    bash docker exec -it mysql_container mysql -u root -p
    输入 rootpassword 登录,验证是否能访问数据库。
  • 远程连接:通过宿主机的 localhost:3306 使用 MySQL 客户端连接:
    • 用户:rootuser
    • 密码:rootpasswordpassword
    • 数据库:mydb
  1. 检查数据卷
    确认数据持久化卷是否存在:
   docker volume ls

数据存储在 mysql_data 卷中,即使容器删除,数据也不会丢失。

配置文件(可选)

若需自定义 MySQL 配置(如字符集、性能参数),可挂载自定义配置文件:

  1. 创建配置文件(例如 my.cnf):
   [mysqld]
   character-set-server=utf8mb4
   collation-server=utf8mb4_unicode_ci
   max_connections=200
  1. 修改 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:

  1. 创建 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:
  1. 启动容器:
   docker-compose up -d
  1. 停止和删除:
   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 镜像的容器即可成功运行并支持应用连接!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注