카테고리 없음

docker-compose mysql

사리생성 2025. 9. 7. 12:48

 

Linux (Ubuntu/Debian)

방법 1: Docker Desktop과 함께 설치 (권장)

 
 
bash
# Docker Desktop 설치 (Docker Compose 포함)
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release

# Docker GPG 키 추가
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Docker 저장소 추가
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

방법 2: 독립 설치

 
 
bash
# 최신 버전 다운로드
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose

macOS

Homebrew 사용:

 
 
bash
brew install docker-compose

Docker Desktop 설치: Docker Desktop for Mac을 설치하면 Docker Compose가 자동으로 포함됩니다.

Windows

Docker Desktop for Windows를 설치하면 Docker Compose가 자동으로 포함됩니다.

WSL2에서 Linux 방식으로 설치도 가능합니다.

설치 확인

설치 완료 후 다음 명령어로 확인:

 
 
bash
docker-compose --version
# 또는 최신 버전의 경우
docker compose version

사용자 그룹 추가 (Linux)

sudo 없이 사용하려면:

 
 
bash
sudo usermod -aG docker $USER

이후 로그아웃/로그인 또는 newgrp docker 실행

어떤 운영체제를 사용하고 계신지 알려주시면 더 구체적인 도움을 드릴 수 있습니다!

 
 
 
 
재시도
 

Claude는 아직 생성한 코드를 실행할 수 없습니다.

K

docker-compose mysql 설치

편집

Docker Compose를 사용해서 MySQL을 설치하는 방법을 안내해드리겠습니다.

기본 MySQL 설정

docker-compose.yml 파일 생성:

docker-compose.yml - MySQL 기본 설정
코드 
version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql_server
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: your_database_name
      MYSQL_USER: your_username
      MYSQL_PASSWORD: your_password
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - mysql_network

volumes:
  mysql_data:

networks:
  mysql_network:
    driver: bridge
 

실행 방법

 
 
bash
# MySQL 컨테이너 시작
docker-compose up -d

# 로그 확인
docker-compose logs mysql

# MySQL 접속
docker-compose exec mysql mysql -u root -p

고급 설정 (추가 옵션 포함)

docker-compose.yml - MySQL 고급 설정
코드 
version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql_server
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
      MYSQL_DATABASE: ${MYSQL_DATABASE:-myapp}
      MYSQL_USER: ${MYSQL_USER:-appuser}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-password123}
      # 시간대 설정
      TZ: Asia/Seoul
    ports:
      - "${MYSQL_PORT:-3306}:3306"
    volumes:
      # 데이터 영구 저장
      - mysql_data:/var/lib/mysql
      # 초기화 스크립트
      - ./init:/docker-entrypoint-initdb.d
      # 커스텀 설정
      - ./mysql.conf:/etc/mysql/conf.d/custom.cnf:ro
    command: --default-authentication-plugin=mysql_native_password
    networks:
      - mysql_network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 20s
      retries: 10

  # phpMyAdmin (선택사항)
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    restart: always
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    ports:
      - "8080:80"
    depends_on:
      - mysql
    networks:
      - mysql_network

volumes:
  mysql_data:
    driver: local

networks:
  mysql_network:
    driver: bridge

환경변수 설정 (.env 파일)

.env - 환경변수 설정
코드 
# MySQL 설정
MYSQL_ROOT_PASSWORD=your_secure_root_password
MYSQL_DATABASE=myapp_db
MYSQL_USER=appuser
MYSQL_PASSWORD=your_secure_password
MYSQL_PORT=3306

# phpMyAdmin 포트
PHPMYADMIN_PORT=8080

MySQL 커스텀 설정 파일 (선택사항)

mysql.conf - MySQL 커스텀 설정
코드 
[mysqld]
# 기본 문자셋
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 연결 관련
max_connections=200
wait_timeout=300

# 메모리 설정
innodb_buffer_pool_size=256M
key_buffer_size=32M

# 로그 설정
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=2

# 바이너리 로그
log-bin=mysql-bin
binlog-format=ROW
expire_logs_days=7

[mysql]
default-character-set=utf8mb4

[client]
default-character-set=utf8mb4

주요 명령어

 
 
bash
# 컨테이너 시작
docker-compose up -d

# 컨테이너 중지
docker-compose down

# 볼륨까지 삭제 (데이터 완전 삭제)
docker-compose down -v

# MySQL 접속
docker-compose exec mysql mysql -u root -p

# 데이터베이스 백업
docker-compose exec mysql mysqldump -u root -p your_database > backup.sql

# 백업 복원
docker-compose exec -T mysql mysql -u root -p your_database < backup.sql

# 로그 확인
docker-compose logs -f mysql

초기화 스크립트 예시

init/ 폴더에 .sql 파일을 넣으면 컨테이너 생성 시 자동 실행됩니다:

init/01-init.sql - 초기화 스크립트
코드 
-- 데이터베이스 생성 (이미 환경변수로 생성되므로 생략 가능)
-- CREATE DATABASE IF NOT EXISTS myapp_db;

-- 사용할 데이터베이스 선택
USE myapp_db;

-- 테이블 생성 예시
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 초기 데이터 삽입
INSERT INTO users (username, email, password) VALUES 
('admin', 'admin@example.com', 'hashed_password'),
('user1', 'user1@example.com', 'hashed_password');

-- 권한 설정 (필요한 경우)
-- GRANT ALL PRIVILEGES ON myapp_db.* TO 'appuser'@'%';
-- FLUSH PRIVILEGES;

폴더 구조

 
 
your_project/
├── docker-compose.yml
├── .env
├── mysql.conf (선택사항)
└── init/ (선택사항)
    └── 01-init.sql

접속 정보

  • MySQL 서버: localhost:3306
  • phpMyAdmin: http://localhost:8080 (포함된 경우)
  • 사용자명: 환경변수에서 설정한 값
  • 비밀번호: 환경변수에서 설정한 값