You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将MariaDB与Adminer镜像合并为自定义Docker镜像?

可以合并,但不推荐这么做

核心原因(违背Docker最佳实践)

  • 违反「一个容器一个进程」的设计原则:MariaDB(数据库进程)和Adminer(Web应用进程)放在同一容器中,会导致进程监控、日志收集、单独重启服务等运维操作变得复杂。
  • 镜像体积冗余:合并后会包含两个应用的所有依赖,镜像体积比分开部署更大,拉取、存储成本更高。
  • 扩展性受限:后续无法单独对数据库或Adminer进行水平扩容,灵活性大幅降低。

如果一定要合并(满足团队一致性需求)的实现方式

基于MariaDB官方镜像构建,在Dockerfile中安装Adminer依赖并配置多进程启动脚本:

  1. 编写Dockerfile:
# 基于官方MariaDB镜像
FROM mariadb:latest

# 安装Adminer所需的PHP、Nginx依赖,下载Adminer
RUN apt-get update && apt-get install -y php-fpm nginx wget \
    && wget -O /var/www/html/adminer.php https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php \
    && rm -rf /var/lib/apt/lists/*

# 复制Nginx配置文件(需提前编写反向代理到PHP-FPM的配置)
COPY nginx.conf /etc/nginx/nginx.conf

# 复制多进程启动脚本
COPY start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh

CMD ["start.sh"]
  1. 启动脚本start.sh示例:
#!/bin/bash
# 后台启动MariaDB
/usr/bin/mysqld_safe &
# 启动PHP-FPM和前台运行Nginx
service php-fpm start
nginx -g "daemon off;"

更合理的替代方案(兼顾一致性与最佳实践)

无需合并镜像,用Docker Compose编排两个官方镜像,同时在团队内部约定该Compose栈对应company/database服务集合:

version: '3.8'
services:
  db:
    image: mariadb:latest
    environment:
      MYSQL_ROOT_PASSWORD: your_db_password
    volumes:
      - db_data:/var/lib/mysql
  adminer:
    image: adminer:latest
    ports:
      - "8080:8080"
volumes:
  db_data:

内容的提问来源于stack exchange,提问作者Big boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:11:01