在实际开发和部署中,启动 MySQL 服务常见有两种方式:

  1. 基于官方 MySQL 镜像,自定义 Dockerfile 构建镜像
  2. 直接在 Docker Compose 中拉取官方镜像并配置容器

虽然两种方式最终都能运行 MySQL,但适用场景和灵活性存在明显差别。


一、Dockerfile 构建自定义镜像

FROM mysql:5.7.44
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN yum -y remove openssl
COPY utf8mb4.cnf /etc/mysql/conf.d/
COPY my.cnf /etc/
ENV WORK_PATH /usr/local/work
ENV MYSQL_ROOT_PASSWORD=DaqR8D@Q^XfWMVz8
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
EXPOSE 3306

特点:

  1. 高度可控
    可以修改基础镜像环境,包括时区、依赖、配置文件和初始化脚本。

  2. 可复用性高
    构建好的镜像可在不同环境直接拉取使用,无需再次配置。

  3. 缺点
    每次修改配置都需要重新构建镜像,适合团队内部统一镜像或生产环境部署。

✅ 适用场景:生产环境、团队标准化部署、对镜像环境有定制需求时。


二、Docker Compose 拉取官方镜像

heyun_mysql:
  image: mysql:5.7
  container_name: heyun_mysql
  ports:
    - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: apwd@center
  volumes:
    - ./data/mysql:/var/lib/mysql
    - ./data:/docker-entrypoint-initdb.d
  command: --sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
  networks:
    - heyun_net

特点:

  1. 快速启动
    直接拉官方镜像,无需自己构建,可通过 environmentvolumescommand 做轻量配置。

  2. 灵活性高
    适合开发环境或调试环境,快速修改配置或挂载本地初始化脚本。

  3. 缺点
    配置分散在 Compose 文件和挂载目录,跨环境复用性不如自定义镜像。

✅ 适用场景:本地开发、测试或临时实验环境。


三、两种方式对比

维度 Dockerfile 构建镜像 Docker Compose 拉官方镜像
灵活性 高,可修改底层环境 中,修改受限于挂载和 command
构建与复用 可跨环境复用 容器启动快速,但依赖本地挂载
配置集中性 镜像内部统一管理 配置分散在 Compose + 挂载目录
适用场景 生产部署、团队标准化 本地开发、调试、快速测试

四、核心理解

  • Dockerfile 构建镜像:定制化、可复用、标准化,适合生产或团队共享镜像。
  • Docker Compose 拉官方镜像:快速、灵活、临时可用,适合本地开发或调试。

两者可以结合使用:在生产环境使用自定义镜像,在开发环境用 Compose 快速启动官方镜像;甚至 Compose 也可以使用自定义镜像。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐