Docker中部署与配置MySQL 5.7的详细指南

 更新时间:2025年08月03日 09:32:10   作者:万山y  
使用 Docker 来管理数据库非常方便,它可以将数据库环境与你的主机系统完全隔离,本文将带大家完成Docker部署配置MySQL 5.7的所有必要步骤,,需要的朋友可以参考下

使用 Docker 来管理数据库非常方便,它可以将数据库环境与你的主机系统完全隔离,实现快速部署、轻松迁移和清理。本教程将带你完成所有必要步骤。

第一步:拉取 MySQL 5.7 镜像

首先,我们需要从 Docker Hub 上获取官方的 MySQL 5.7 镜像。打开你的终端或命令行工具,输入以下命令:

docker pull mysql:5.7

第二步:运行 MySQL 容器并设置密码 (docker run 方式)

这是最关键的一步。在运行容器时,我们必须通过环境变量来设置 root 用户的初始密码

docker run --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_strong_password -d mysql:5.7
  • --name my-mysql: 给你的容器起一个好记的名字。
  • -p 3306:3306: 将主机的 3306 端口映射到容器的 3306 端口。
  • -e MYSQL_ROOT_PASSWORD=...: 设置 root 用户的密码。请务必将 your_strong_password 替换为你自己的强密码!
  • -d: 在后台运行容器。

第三步:连接到你的 MySQL 数据库

你可以通过主机上的 MySQL 客户端(如 Navicat, DataGrip)或进入容器内部进行连接。

  • 主机/IP: 127.0.0.1
  • 端口: 3306
  • 用户: root
  • 密码: 你设置的密码

要进入容器内部,请使用 docker exec -it my-mysql bash,然后运行 mysql -u root -p

第四步:数据持久化(非常重要!)

为了防止容器删除后数据丢失,我们需要将数据目录挂载到主机上。如果你已通过第二步启动了容器,请先用 docker stop my-mysqldocker rm my-mysql 将其停止并删除。

然后使用 -v 参数重新启动:

docker run --name my-mysql \
-p 3306:3306 \
-v /my/custom/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=your_strong_password \
-d mysql:5.7

-v /my/custom/mysql/data:/var/lib/mysql: 将主机上的 /my/custom/mysql/data 目录(你可以自定义)挂载到容器内的 /var/lib/mysql 目录。

第五步:基本数据库操作

连接成功后,你可以执行标准的 SQL 命令,如 CREATE DATABASE my_app_db; 等。

第六步:使用 Docker Compose 管理 MySQL (推荐)

当你的应用变得复杂(例如,一个网站后端 + 一个数据库),使用 docker run 命令来管理多个容器会非常繁琐。Docker Compose 允许你使用一个 YAML 文件来定义和运行一个多容器的 Docker 应用。

1. 创建docker-compose.yml文件

在你的项目目录下,创建一个名为 docker-compose.yml 的文件,并填入以下内容:

# 指定 docker-compose 文件版本
version: '3.7'

# 定义服务
services:
  # 服务名称,可以自定义,这里叫 db
  db:
    # 使用的镜像
    image: mysql:5.7
    # 容器名称
    container_name: my-mysql-compose
    # 设置容器在退出时总是重新启动,以保证服务高可用
    restart: always
    # 环境变量,等同于 docker run 的 -e 参数
    environment:
      MYSQL_ROOT_PASSWORD: your_strong_password # 在这里设置你的密码
      # 你也可以在这里设置其他环境变量,例如:
      # MYSQL_DATABASE: my_app_db
      # MYSQL_USER: app_user
      # MYSQL_PASSWORD: user_password
    # 端口映射,等同于 docker run 的 -p 参数
    ports:
      - "3306:3306"
    # 数据卷挂载,等同于 docker run 的 -v 参数
    volumes:
      - ./mysql-data:/var/lib/mysql

# 你也可以在这里定义一个顶层 volumes,更规范
# volumes:
#   mysql_data:
# 然后在上面的 services.db.volumes 中使用 - mysql_data:/var/lib/mysql

文件解析:

  • version: 定义了 docker-compose.yml 文件的语法版本。
  • services: 定义了应用包含的所有服务(容器)。
  • db: 我们为 MySQL 服务起的名字。
  • image, container_name, ports, environment: 这些都与 docker run 命令中的参数一一对应。
  • restart: always: 这是一个非常有用的配置,它能确保在 Docker 重启或容器因故退出后,自动重新启动该容器。
  • volumes: 定义数据卷挂载。这里的 ./mysql-data:/var/lib/mysql 表示将当前目录下的 mysql-data 文件夹挂载到容器的 /var/lib/mysql。Compose 会自动为你创建这个文件夹。

2. 启动和停止服务

现在,你只需要在 docker-compose.yml 文件所在的目录下,使用简单的命令就可以管理你的 MySQL 服务了。

启动服务(后台运行):

docker-compose up -d

查看服务状态和日志:

docker-compose ps
docker-compose logs -f db

停止并移除容器、网络:

docker-compose down

使用 docker-compose down 命令会停止并删除容器,但通过 volumes 挂载的数据(即 mysql-data 文件夹)会保留下来,这正是我们想要的。

附录:数据卷挂载 (Volume) vs. 文件拷贝 (COPY)

这是一个非常重要的概念,理解它们的区别有助于你正确地管理 Docker 数据。

特性数据卷挂载 (Volume / Mount)文件拷贝 (COPY / docker cp)
核心机制实时映射/链接一次性复制
数据流向双向同步。主机和容器的更改会立即互相反映。单向。从主机复制到容器(或反向),之后两者独立。
生命周期数据独立于容器存在。删除容器后,主机上的数据依然保留。数据成为容器/镜像的一部分。删除容器,复制进去的数据也会随之删除。
性能通常性能更高,特别是对于大量读写操作(如数据库)。每次复制都需要 I/O 操作,不适合频繁更改的数据。
使用场景1. 数据库文件
2. 日志文件
3. 需要在主机上直接编辑的配置文件
1. 构建镜像时 (COPY指令),将应用代码、静态资源打包进镜像。
2. 运行时 (docker cp),从容器里取出一个日志快照,或向容器里传入一个临时文件。
命令示例docker run -v ...
volumes: (in docker-compose)
COPY . /app (in Dockerfile)
docker cp file.txt my-container:/tmp

简单类比:

  • 数据卷挂载就像在你电脑上为某个文件夹创建了一个快捷方式。你通过快捷方式修改文件,实际上修改的是原始文件。删除快捷方式,原始文件不受影响。
  • 文件拷贝就像你把一个文件复制粘贴到另一个地方。之后你有了两个独立的文件副本,修改其中一个不会影响另一个。

对于数据库这种需要持久化且数据会频繁变动的应用,永远应该使用数据卷挂载

到此这篇关于Docker中部署与配置MySQL 5.7的详细指南的文章就介绍到这了,更多相关Docker部署与配置MySQL 5.7内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何修改docker官方镜像内部内容并重新build镜像

    如何修改docker官方镜像内部内容并重新build镜像

    这篇文章主要介绍了如何修改docker官方镜像内部内容并重新build镜像问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Springboot打包docker的多种方法实现

    Springboot打包docker的多种方法实现

    本文介绍了SpringBoot项目打包为Docker镜像的多种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • Dockerfile指令与基本结构的讲解

    Dockerfile指令与基本结构的讲解

    今天小编就为大家分享一篇关于Dockerfile指令与基本结构的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Docker 创建centos容器集群并实现远程登录功能

    Docker 创建centos容器集群并实现远程登录功能

    这篇文章主要介绍了Docker 创建centos容器集群并实现远程登录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • docker搭建canal的实现步骤

    docker搭建canal的实现步骤

    canal是监听主mysql的binlog日志,本文主要介绍了docker搭建canal的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • docker启动报错问题OCI runtime create failed: container_linux.go:380: starting container process

    docker启动报错问题OCI runtime create failed: c

    这篇文章主要介绍了docker启动报错问题OCI runtime create failed: container_linux.go:380: starting container process,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 基于docker的 nacos安装部署过程

    基于docker的 nacos安装部署过程

    这篇文章主要介绍了基于docker的 nacos安装部署,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-08-08
  • Docker Compose健康检查实现零停机部署

    Docker Compose健康检查实现零停机部署

    本文主要介绍了Docker Compose健康检查实现零停机部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • Docker cp命令详解之如何在Docker容器和主机之间复制文件/文件夹

    Docker cp命令详解之如何在Docker容器和主机之间复制文件/文件夹

    要从Docker容器中复制文件,可以使用docker cp命令,下面这篇文章主要给大家介绍了关于Docker cp命令详解之如何在Docker容器和主机之间复制文件/文件夹的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • 宿主机无法访问docker容器中nginx服务的问题解决

    宿主机无法访问docker容器中nginx服务的问题解决

    在虚拟机中部署Docker并安装Nginx后,宿主机无法访问容器内的Nginx服务,通过检查端口映射、防火墙状态、进入容器内部启动Nginx以及检查/修改内核的IP转发设置,解决了该问题,感兴趣的可以了解一下
    2024-11-11

最新评论