내맘대로 개발 일기/DevOps

[인프라 구축] Docker로 MySQL 초기 설정 자동화하기 (루트 접속 없이 DB·계정까지)

bu119 2025. 8. 1. 19:30
728x90
반응형
루트 접속 없이 DB와 계정까지 자동 생성하는 방법

 

🐌 기존 방식: 루트 계정으로 수동 설정

Docker로 MySQL 컨테이너를 생성한 뒤,
다음과 같이 루트 계정으로 직접 접속해서 수동으로 설정했습니다:

# MySQL 컨테이너 실행
docker run --name my-mysql \
  -e MYSQL_ROOT_PASSWORD=root1234 \
  -p 3306:3306 \
  -d mysql:8.4

컨테이너가 실행되면 루트 계정으로 접속합니다:

docker exec -it my-mysql mysql -u root -p Enter password: root1234

 

접속 후에는 직접 SQL 명령어를 입력해야 했습니다:

-- 1. example_db 라는 이름의 데이터베이스 생성
CREATE DATABASE example_db;

-- 2. example_user 계정 생성, 비밀번호는 example1234
--    @'%'는 어디서든 접속 허용(IP 제한 없음)을 의미
CREATE USER 'example_user'@'%' IDENTIFIED BY 'example1234';

-- 3. 권한 부여: example_user에게 example_db 전체 권한 부여
--    (읽기, 쓰기, 삭제 등 모든 작업 가능)
GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'%';

 

❌ 단점

  • 루트 계정으로 접속해야 하므로 보안상 위험
  • 명령어를 매번 기억하거나 복사해야 함
  • 반복 작업 시 비효율적이고 실수 가능성 높음

🚀 새 방식: 명령어 한 줄로 자동 설정

Docker는 환경변수 설정만으로 DB와 사용자 계정을 자동 생성할 수 있습니다.
아래와 같이 단 한 줄로 모든 초기 설정을 마칠 수 있습니다:

docker run --name my-mysql \
  -e MYSQL_ROOT_PASSWORD=root1234 \
  -e MYSQL_DATABASE=example_db \
  -e MYSQL_USER=example_user \
  -e MYSQL_PASSWORD=example1234 \
  -p 3306:3306 \
  -d mysql:8.4

 

명령어 설명

항목 설명
MYSQL_ROOT_PASSWORD root1234 루트 비밀번호 설정
MYSQL_DATABASE example_db 자동 생성할 DB 이름
MYSQL_USER example_user 새로 만들 사용자 계정
MYSQL_PASSWORD example1234 해당 계정의 비밀번호

위 명령을 실행하면 다음이 자동으로 이루어집니다:

  • example_db 데이터베이스 생성
  • example_user 사용자 생성
  • example_user에게 example_db에 대한 모든 권한 부여

🔄 기존 방식 vs 자동 설정 방식 비교

항목 기존 방식 (수동) 새 방식 (자동)
루트 접속 필요 불필요 ✅
DB 생성 SQL 명령 입력 환경변수로 자동
사용자 생성 SQL 명령 입력 환경변수로 자동
권한 부여 수동 입력 자동 처리
보안 측면 루트 사용 위험 일반 계정으로 안전 ✅
실수 가능성 있음 거의 없음 ✅
반복 작업 비효율적 재사용 가능 ✅

MySQL 초기 설정은 꼭 루트 계정으로 들어가야만 가능한 작업이 아니었습니다.
Docker의 환경변수 옵션을 잘 활용하면,
보안은 높이고 실수는 줄이며 반복 작업까지 간편하게 해결할 수 있습니다.

728x90
반응형