能否将MariaDB与Adminer镜像合并为自定义Docker镜像?
可以合并,但不推荐这么做
核心原因(违背Docker最佳实践)
- 违反「一个容器一个进程」的设计原则:MariaDB(数据库进程)和Adminer(Web应用进程)放在同一容器中,会导致进程监控、日志收集、单独重启服务等运维操作变得复杂。
- 镜像体积冗余:合并后会包含两个应用的所有依赖,镜像体积比分开部署更大,拉取、存储成本更高。
- 扩展性受限:后续无法单独对数据库或Adminer进行水平扩容,灵活性大幅降低。
如果一定要合并(满足团队一致性需求)的实现方式
基于MariaDB官方镜像构建,在Dockerfile中安装Adminer依赖并配置多进程启动脚本:
- 编写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"]
- 启动脚本
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
相关产品推荐
相关产品推荐

