Adminer Docker 설치 가이드: 단일 파일로 다중 DB 관리




개요

Adminer는 단일 PHP 파일로 구성된 경량 데이터베이스 관리 도구입니다. phpMyAdmin의 대안으로 개발되었으며, MySQL뿐만 아니라 PostgreSQL, SQLite, MS SQL, Oracle, MongoDB 등 다양한 데이터베이스를 지원합니다. 파일 하나로 모든 것이 해결되는 심플함이 가장 큰 장점입니다.

항목내용
GitHubhttps://github.com/vrana/adminer
공식 사이트https://www.adminer.org
Docker Hubhttps://hub.docker.com/_/adminer
라이선스Apache-2.0 / GPL-2.0
개발 언어PHP
파일 크기~500KB (단일 파일)

Adminer란?

Adminer(구 phpMinAdmin)는 2007년 Jakub Vrána가 phpMyAdmin의 대안으로 개발한 데이터베이스 관리 도구입니다. 핵심 철학은 “하나의 파일로 모든 것을 해결”하는 것입니다. 복잡한 설치 과정 없이 PHP 파일 하나만 서버에 올리면 바로 사용할 수 있습니다.

핵심 철학

"단일 파일, 다중 데이터베이스"
- 설치가 필요 없음 (파일 하나)
- 다양한 DB 지원
- 보안 우선 설계
- 성능 최적화

개발 우선순위

  1. 보안 – 최우선 고려사항
  2. 사용자 경험 – 직관적인 UI
  3. 성능 – 빠른 응답
  4. 기능 – 필요한 기능만

주요 기능

지원 데이터베이스

데이터베이스기본 지원플러그인
MySQL
MariaDB
PostgreSQL
SQLite
MS SQL
Oracle
CockroachDB
MongoDB
Elasticsearch
Firebird
ClickHouse
SimpleDB

데이터베이스 관리

기능설명
DB 생성/삭제데이터베이스 관리
테이블 관리생성, 수정, 삭제, 복사
컬럼 편집필드 추가/수정/삭제
인덱스인덱스 관리
외래키관계 설정
트리거트리거 관리
뷰 생성/편집
프로시저저장 프로시저

데이터 조작

기능설명
데이터 조회페이지네이션 지원
인라인 편집직접 수정
검색조건 검색
정렬컬럼별 정렬
SQL 실행직접 쿼리 실행

가져오기/내보내기

기능설명
내보내기SQL, CSV, TSV, XML
가져오기SQL, CSV, TSV
압축gzip, bzip2 지원

phpMyAdmin vs Adminer

기능AdminerphpMyAdmin
파일 수1개수백 개
파일 크기~500KB~13MB
지원 DB다중 (7+)MySQL만
보안 등급높음중간
로딩 속도빠름중간
기능 수핵심 기능매우 풍부
커스터마이징플러그인/테마매우 풍부
비밀번호 없는 연결차단허용
브루트포스 방지기본 탑재없음

선택 가이드

상황추천
다중 DB 타입 사용Adminer
가벼운 도구 필요Adminer
보안 중시Adminer
MySQL 전용 풍부한 기능phpMyAdmin
호스팅 환경 (기본 제공)phpMyAdmin

시스템 요구 사항

최소 사양

항목최소권장
CPU1 Core1 Core
RAM64MB128MB
저장소10MB50MB
PHP5.6+8.0+

Adminer는 매우 가볍습니다. Raspberry Pi에서도 원활하게 실행됩니다.


Docker 설치

방법 1: 기본 설치

# docker-compose.yml
services:
  adminer:
    image: adminer:latest
    container_name: adminer
    restart: unless-stopped
    ports:
      - "8080:8080"

방법 2: MySQL과 함께

# docker-compose.yml
services:
  db:
    image: mysql:8
    container_name: mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=rootpassword
      - MYSQL_DATABASE=myapp
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - db_network

  adminer:
    image: adminer:latest
    container_name: adminer
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - ADMINER_DEFAULT_SERVER=db
    depends_on:
      - db
    networks:
      - db_network

volumes:
  mysql_data:

networks:
  db_network:

방법 3: PostgreSQL과 함께

# docker-compose.yml
services:
  db:
    image: postgres:16-alpine
    container_name: postgres
    restart: unless-stopped
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=adminpassword
      - POSTGRES_DB=myapp
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - db_network

  adminer:
    image: adminer:latest
    container_name: adminer
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - ADMINER_DEFAULT_SERVER=db
    depends_on:
      - db
    networks:
      - db_network

volumes:
  postgres_data:

networks:
  db_network:

방법 4: 다중 데이터베이스 환경

# docker-compose.yml
services:
  mysql:
    image: mysql:8
    container_name: mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=mysqlpass
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - db_network

  postgres:
    image: postgres:16-alpine
    container_name: postgres
    restart: unless-stopped
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=postgrespass
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - db_network

  mongo:
    image: mongo:7
    container_name: mongo
    restart: unless-stopped
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=mongopass
    volumes:
      - mongo_data:/data/db
    networks:
      - db_network

  adminer:
    image: adminer:latest
    container_name: adminer
    restart: unless-stopped
    ports:
      - "8080:8080"
    networks:
      - db_network

volumes:
  mysql_data:
  postgres_data:
  mongo_data:

networks:
  db_network:

방법 5: 테마 적용

# docker-compose.yml
services:
  adminer:
    image: adminer:latest
    container_name: adminer
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - ADMINER_DESIGN=dracula
      # 사용 가능한 테마: dracula, galkaev, hydra, nette, pappu687, pepa-linha, rmsoft 등

방법 6: Traefik 연동

# docker-compose.yml
services:
  adminer:
    image: adminer:latest
    container_name: adminer
    restart: unless-stopped
    environment:
      - ADMINER_DESIGN=dracula
    networks:
      - db_network
      - traefik_network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.adminer.rule=Host(`adminer.example.com`)"
      - "traefik.http.routers.adminer.entrypoints=websecure"
      - "traefik.http.routers.adminer.tls.certresolver=letsencrypt"
      - "traefik.http.services.adminer.loadbalancer.server.port=8080"

networks:
  db_network:
  traefik_network:
    external: true

환경 변수

변수설명예시
ADMINER_DEFAULT_SERVER기본 서버 주소mysql, postgres
ADMINER_DESIGN테마 이름dracula, nette
ADMINER_PLUGINS활성화할 플러그인tables-filter tinymce
MEMORYPHP 메모리 제한512M
UPLOAD업로드 제한2048M

Docker 이미지 변형

태그설명
adminer:latestApache 기반 (권장)
adminer:fastcgiFastCGI (별도 웹서버 필요)
adminer:standalone독립 실행형

경량 이미지 (dockette)

더 작은 이미지가 필요하면 dockette 이미지를 사용합니다:

services:
  adminer:
    image: dockette/adminer:full
    # 또는 dockette/adminer:mysql (MySQL 전용)
    # 또는 dockette/adminer:pgsql (PostgreSQL 전용)
    ports:
      - "8080:80"

초기 설정

1) 접속

URL: http://localhost:8080

2) 로그인

필드설명
시스템MySQL, PostgreSQL, SQLite 등 선택
서버DB 서버 주소 (Docker: 컨테이너명)
사용자명DB 사용자
비밀번호DB 비밀번호
데이터베이스연결할 DB (선택)

예시 (MySQL):

  • 시스템: MySQL
  • 서버: mysql (또는 db)
  • 사용자명: root
  • 비밀번호: rootpassword

예시 (PostgreSQL):

  • 시스템: PostgreSQL
  • 서버: postgres
  • 사용자명: admin
  • 비밀번호: adminpassword

플러그인

Adminer는 플러그인으로 기능을 확장할 수 있습니다.

사용 가능한 플러그인

플러그인설명
tables-filter테이블 필터링
tinymceWYSIWYG 에디터
edit-calendar날짜 선택기
edit-textarea텍스트 영역 편집
enum-optionENUM 옵션
foreign-system외래키 시스템
login-password-less비밀번호 없이 로그인 (개발용)
master-slave마스터-슬레이브
slug슬러그 생성
version-noverify버전 확인 비활성화

플러그인 활성화

environment:
  - ADMINER_PLUGINS=tables-filter tinymce edit-calendar

테마

기본 제공 테마

테마스타일
default기본
dracula다크
galkaev모던
hydra블루
nette네테 프레임워크
pappu687그린
pepa-linha라이트
rmsoft프로페셔널

커스텀 테마

커스텀 테마를 사용하려면:

services:
  adminer:
    image: adminer:latest
    volumes:
      - ./adminer.css:/var/www/html/adminer.css

보안

기본 보안 기능

  1. 비밀번호 없는 연결 차단 – 빈 비밀번호 로그인 불가
  2. 브루트포스 방지 – 로그인 시도 제한
  3. CSRF 보호 – 크로스사이트 요청 위조 방지

추가 보안 조치

IP 제한 (Traefik):

labels:
  - "traefik.http.middlewares.adminer-whitelist.ipwhitelist.sourcerange=192.168.1.0/24"
  - "traefik.http.routers.adminer.middlewares=adminer-whitelist"

Basic Auth:

labels:
  - "traefik.http.middlewares.adminer-auth.basicauth.users=admin:$$apr1$$..."
  - "traefik.http.routers.adminer.middlewares=adminer-auth"

로컬 전용 접근:

ports:
  - "127.0.0.1:8080:8080"

트러블슈팅

일반적인 문제

“Login required” 오류:

Adminer는 보안상 비밀번호 없는 로그인을 차단합니다. 데이터베이스에 비밀번호가 설정되어 있는지 확인하세요.

MongoDB 연결 안 됨:

기본 Docker 이미지에서는 MongoDB 드라이버가 없습니다. MongoDB를 사용하려면:

# Dockerfile
FROM adminer:latest
RUN apk add --no-cache php-mongodb

업로드 크기 제한:

environment:
  - UPLOAD=100M
  - MEMORY=512M

로그 확인

docker logs adminer -f

업데이트

# 최신 이미지
docker compose pull adminer

# 재시작
docker compose up -d adminer

사용 사례

1. 개발 환경

  • 빠른 DB 확인/수정
  • 다중 DB 타입 프로젝트
  • 가벼운 도구 필요

2. 디버깅

  • 쿼리 테스트
  • 데이터 확인
  • 스키마 검토

3. 소규모 운영

  • 간단한 DB 관리
  • 백업/복원
  • 사용자 관리

마무리

Adminer는 “적을수록 많다”는 철학을 완벽하게 구현한 DB 관리 도구입니다. 단일 PHP 파일로 MySQL, PostgreSQL, SQLite, MongoDB 등 다양한 데이터베이스를 관리할 수 있습니다. 보안을 최우선으로 설계되어 phpMyAdmin보다 안전하고, 가볍고 빠릅니다.

핵심 장점

장점설명
초경량단일 파일 ~500KB
다중 DB7개 이상 DB 지원
보안기본 보안 기능 탑재
빠름phpMyAdmin보다 빠른 로딩
심플설치 불필요, 파일 하나

이런 분께 추천

다양한 DB 타입을 사용하는 분
가벼운 도구를 원하는 분
보안을 중시하는 분
빠른 설치/제거가 필요한 분
개발 환경 관리가 필요한 분



댓글 남기기