Dockerfile 构建镜像 VS Docker Compose 拉官方镜像:MySQL 服务配置对比
MySQL 服务在 Docker 中的两种部署方式:1)通过 Dockerfile 构建自定义镜像,适合生产环境和团队标准化部署,具有高度可控性和可复用性;2)通过 Docker Compose 直接拉取官方镜像,适合本地开发和测试,具有快速启动和灵活配置的特点。两种方式各有优势,可根据实际场景选择使用,甚至结合使用:生产环境用自定义镜像,开发环境用 Compose 快速启动官方镜像。
·
在实际开发和部署中,启动 MySQL 服务常见有两种方式:
- 基于官方 MySQL 镜像,自定义 Dockerfile 构建镜像
- 直接在 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
特点:
-
高度可控
可以修改基础镜像环境,包括时区、依赖、配置文件和初始化脚本。 -
可复用性高
构建好的镜像可在不同环境直接拉取使用,无需再次配置。 -
缺点
每次修改配置都需要重新构建镜像,适合团队内部统一镜像或生产环境部署。
✅ 适用场景:生产环境、团队标准化部署、对镜像环境有定制需求时。
二、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
特点:
-
快速启动
直接拉官方镜像,无需自己构建,可通过environment、volumes、command做轻量配置。 -
灵活性高
适合开发环境或调试环境,快速修改配置或挂载本地初始化脚本。 -
缺点
配置分散在 Compose 文件和挂载目录,跨环境复用性不如自定义镜像。
✅ 适用场景:本地开发、测试或临时实验环境。
三、两种方式对比
| 维度 | Dockerfile 构建镜像 | Docker Compose 拉官方镜像 |
|---|---|---|
| 灵活性 | 高,可修改底层环境 | 中,修改受限于挂载和 command |
| 构建与复用 | 可跨环境复用 | 容器启动快速,但依赖本地挂载 |
| 配置集中性 | 镜像内部统一管理 | 配置分散在 Compose + 挂载目录 |
| 适用场景 | 生产部署、团队标准化 | 本地开发、调试、快速测试 |
四、核心理解
- Dockerfile 构建镜像:定制化、可复用、标准化,适合生产或团队共享镜像。
- Docker Compose 拉官方镜像:快速、灵活、临时可用,适合本地开发或调试。
两者可以结合使用:在生产环境使用自定义镜像,在开发环境用 Compose 快速启动官方镜像;甚至 Compose 也可以使用自定义镜像。
更多推荐
所有评论(0)