본문 바로가기

Tech/[Container] Docker

Docker-Compose를 활용한 MySQL 8.0.28 구축 (Mac M1)

요약

Mac M1 환경에서 Docker Compose 를 이용하여 MySQL 8.0.28 데이터베이스 서버를 구축합니다.

 

폴더 구조 생성

프로젝트 루트 경로에 mysql/sqls 폴더를 생성합니다.

프로젝트 루트 경로에 docker-compose.yaml 파일을 생성합니다.

mysql 폴더 경로에 my.cnf, Dockerfile 파일을 생성합니다.

mysql/sqls 폴더 경로에 init.sql 파일을 생성합니다.

 

Dockerfile 파일 정의

M1 칩을 고려하여 linux/amd64 로 플랫폼을 설정합니다.

mysql 이미지를 불러오며 버전은 8.0.28를 사용합니다.

mysql 컨테이너에 로컬에 있는 my.cnf 파일을 복사하여 붙여넣습니다.

FROM --platform=linux/amd64 mysql:8.0.28

ADD ./my.cnf /etc/mysql/conf.d/my.cnf

 

my.cnf 파일 정의

UTF-8로 mysql 서버 설정을 변경하여 한글을 지원할 수 있도록 합니다.

[mysqld]
character-set-server=utf8

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8

 

docker-compose.yaml 파일 정의

version는 docker schema 버전을 명시합니다.

services는 service를 정의합니다.

mysql는 services 중 하나인 service 입니다. 이는 하나의 도커 컨테이너를 의미합니다.

build는 Docker 파일을 빌드하는 경로를 뜻합니다.

restart는 restart 옵션을 선택하는 부분입니다.
unless-stopped는 명시적으로 중지되거나, Docker 자체가 중지되는 경우 재시작한다는 옵션입니다.

container_name는 컨테이너 이름을 뜻합니다.

ports는 "로컬호스트":"도커컨테이너포트"를 의미합니다.

volumes로컬위치:컨테이너위치 형식으로 사용되고, mysql data를 로컬에 저장하며,
docker-entrypoint-initdb.dinit.sql를 복사하여 컨테이너 내부에 데이터베이스와 테이블을 생성합니다.

environment는 해당 컨테이너의 환경 변수를 의미합니다.

version: '3'
services:
  mysql:
    build: ./mysql
    restart: unless-stopped
    container_name: reminder-mysql
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/mysql_data:/var/lib/mysql
      - ./mysql/sqls:/docker-entrypoint-initdb.d/
    environment:
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: testDB

 

init.sql 파일 정의

도커 컨테이너가 실행될 때 수행할 SQL 쿼리문을 작성하는 파일입니다.

DROP DATABASE IF EXISTS testDB;

CREATE DATABASE testDB;

USE testDB;

CREATE TABLE USER (
                      userid VARCHAR(15),
                      nickname VARCHAR(10),
                      password VARCHAR(15),
                      PRIMARY KEY(userid)
);