Database를 운영하다 보면 터미널 명령어만으로 데이터를 관리하기 불편한 경우가 많습니다.
특히 MySQL, PostgreSQL 같은 Database는 다음 작업이 자주 필요합니다.
- Table 확인
- 데이터 조회
- SQL 실행
- User 관리
- Database 구조 확인
이때 사용하는 것이 Database 관리 도구입니다.
대표적인 도구:
- Adminer
- phpMyAdmin
- DBeaver
- pgAdmin
Adminer는 가볍고 설치가 쉬운 Web 기반 Database 관리 도구입니다.
구조:
사용자
↓
Web Browser
↓
Adminer Container
↓
Database Container
Docker Compose를 사용하면 Adminer도 하나의 Service로 쉽게 추가할 수 있습니다.
구성:
Docker Compose
↓
MySQL Container
↓
Adminer Container
↓
Web 관리 화면
이번 글에서는 Docker Compose Adminer 설치부터 MySQL/PostgreSQL 연결, Network 구성, 보안 설정, Production 운영 방법까지 알아보겠습니다.
Adminer란 무엇인가?
Adminer는 Database를 Web 화면에서 관리할 수 있는 오픈소스 도구입니다.
지원 Database:
- MySQL
- PostgreSQL
- SQLite
- MariaDB
- Oracle
- MongoDB 일부 환경
주요 기능:
- Database 접속
- SQL 실행
- Table 관리
- 데이터 수정
- Import/Export
기존 방식:
Terminal
↓
mysql 명령어
↓
SQL 입력
Adminer 방식:
Browser
↓
Adminer Web UI
↓
Database 관리
Docker Compose Adminer 기본 구성
MySQL과 Adminer를 함께 구성하는 예제입니다.
docker-compose.yml:
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: app
volumes:
- mysql-data:/var/lib/mysql
adminer:
image: adminer
ports:
- "8080:8080"
volumes:
mysql-data:
구조:
MySQL Container
↓
mysql-data Volume
Adminer Container
↓
8080 Web Port
실행:
docker compose up -d
확인:
docker compose ps
결과:
mysql
running
adminer
running
Docker Compose Adminer 접속 방법
Browser 접속:
http://서버주소:8080
Adminer 로그인 화면:
입력:
System:
MySQL
Server:
mysql
Username:
root
Password:
password
Database:
app
중요:
Server 항목은:
잘못된 설정:
localhost
올바른 설정:
mysql
이유:
Adminer와 MySQL은 서로 다른 Container이기 때문입니다.
Docker Compose Adminer Network 연결
Adminer가 Database에 접근하려면 같은 Network에 있어야 합니다.
예:
services:
mysql:
image: mysql:8
networks:
- database-network
adminer:
image: adminer
networks:
- database-network
ports:
- "8080:8080"
networks:
database-network:
구조:
Adminer Container
↓
database-network
↓
MySQL Container
Docker Compose PostgreSQL Adminer 연결
Adminer는 PostgreSQL도 관리할 수 있습니다.
PostgreSQL 구성:
services:
postgres:
image: postgres:16
environment:
POSTGRES_PASSWORD: password
adminer:
image: adminer
ports:
- "8080:8080"
접속 정보:
System:
PostgreSQL
Server:
postgres
Username:
postgres
Password:
password
Docker Compose Adminer Port 변경
기본:
ports:
- "8080:8080"
다른 Port 사용:
ports:
- "9090:8080"
접속:
http://서버주소:9090
구조:
Host 9090
↓
Adminer Container 8080
Docker Compose Adminer 보안 설정
Adminer는 Database 관리 화면이기 때문에 외부 공개 시 주의가 필요합니다.
위험한 구조:
Internet
↓
Adminer
↓
Database
문제:
- 관리자 화면 노출
- 비밀번호 공격 위험
- Database 접근 위험
Production 권장:
사용자
↓
VPN 또는 내부망
↓
Adminer
↓
Database
Docker Compose Adminer Reverse Proxy 구성
실제 운영에서는 Nginx 뒤에 배치하는 경우가 많습니다.
구조:
Internet
↓
Nginx
↓
Adminer
↓
Database
장점:
- HTTPS 적용
- 접근 제한
- 인증 추가 가능
예:
admin.example.com
↓
Nginx
↓
Adminer Container
Docker Compose Adminer 사용 시 Database Port 설정
Adminer 연결에서는 Database Port를 외부 공개할 필요가 없습니다.
좋은 구조:
Adminer
↓
Docker Network
↓
MySQL
불필요:
Internet
↓
3306 Port
↓
MySQL
Database는 내부 Network로만 연결하는 것이 안전합니다.
Docker Compose Adminer 업데이트 방법
Image 확인:
docker compose pull adminer
재실행:
docker compose up -d
업데이트 과정:
Backup
↓
Adminer Image 업데이트
↓
Container 재생성
↓
접속 확인
Docker Compose Adminer 장애 대응
Adminer 접속 불가
확인:
docker compose ps
확인:
- Container 실행 상태
- Port 연결
- Network
Database 연결 실패
확인:
Server 이름
Username
Password
Database Port
Port 충돌
확인:
lsof -i :8080
변경:
ports:
- "9090:8080"
Docker Compose Adminer 운영 Best Practice
추천:
- Production 외부 공개 최소화
- HTTPS 사용
- 접근 IP 제한
- Database Port 비공개
- 관리자 계정 보안 강화
운영 구조:
Nginx
↓
Adminer
↓
Private Network
↓
Database
자주 묻는 질문
Adminer와 phpMyAdmin 차이는 무엇인가요?
Adminer는 가볍고 단일 파일 기반이라 설치가 간단합니다.
phpMyAdmin은 MySQL 관리 기능이 더 다양합니다.
Adminer는 Production 서버에서 사용해도 되나요?
가능하지만 외부 공개보다는 내부 관리용으로 사용하는 것을 권장합니다.
Adminer Container가 삭제되면 Database도 삭제되나요?
아닙니다.
Database 데이터는 별도 Volume에 저장됩니다.
MySQL과 PostgreSQL 모두 관리 가능한가요?
가능합니다.
Adminer 로그인 시 Database 종류를 선택할 수 있습니다.
마무리
Docker Compose Adminer 구성은 Database를 편리하게 관리하기 위한 효율적인 방법입니다.
핵심 구조:
Adminer Container
↓
Docker Network
↓
Database Container
↓
Volume Storage
이 구조를 사용하면 MySQL, PostgreSQL 같은 Database를 Web 화면에서 쉽게 관리할 수 있습니다.
다만 Production 환경에서는 Adminer를 외부에 직접 노출하지 않고 Nginx, HTTPS, 접근 제한과 함께 운영하는 것이 안전합니다.
다음 글에서는 Docker Compose 환경에서 여러 Database와 서비스를 안정적으로 운영하기 위한 Database 운영 전략을 알아보겠습니다.