[참고 사이트]
- 도커로 MySQL 설치하고 접속하기, MySQLWorkBench로 관리
- 도커로 MySQL 실행 - DockerCompose 파일 뜯어보기
1. 도커 컴포즈 파일 작성하기
유저 폴더 아래 docker라는 폴더를 생성하고, MYSQL은 아래와 같은 설정으로 docker-compose.yml 파일을 작성할 수 있다.
services:
db:
image: mysql:8.0
restart: always
container_name: mysql8
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: common
MYSQL_USER: admin
MYSQL_PASSWORD: 1234
TZ: Asia/Seoul
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./db/mysql/data:/var/lib/mysql
- ./db/mysql/config:/etc/mysql/conf.d
- ./db/mysql/init:/docker-entrypoint-initdb.d
디렉터리: C:\Users\islove8587\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2024-05-11 오후 2:25 573 docker-compose.yml
(1) 버전과 서비스 정의하기
자세한 사항은 '[Docker] docker-compose.yml 파일 구성 알아보기' 포스트 참조
services:
db:
image: mysql:8.0
restart: always
container_name: mysql8
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: common
MYSQL_USER: admin
MYSQL_PASSWORD: 1234
TZ: Asia/Seoul
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
가장 첫 번째 줄에 보면 version : "3"은 사용하는 Docker Compose 파일의 버전을 명시한다.
docker-compose v2.25.0 이상 버전부터는 해당 내용을 삭제해야 오류가 발생하지 않는다.
- hostname : 서비스 컨테이너에 사용할 사용자 정의 호스트 이름을 선언
- image : 이후에는 서비스를 명시해 주고 있다. 우리가 이전에 진행하였을 때는 MYSQL을 실행시키는 것이 목적이었기에 서비스에는 오직 db: 하나만 존재하고 있다. image의 경우에는 MYSQL을 가져올 것이며 뒤에 가져올 이미지의 버전을 명시해두었다.
- platform : platform 서비스가 실행되는 컨테이너가 대상 플랫폼을 정의. Compose는 이 속성을 사용하여 가져올 이미지 버전 및/또는 서비스 빌드가 수행되는 플랫폼을 결정. 맥북 사용자는 도커 컴포즈 파일의 image 옵션 밑에 platform: linux/x86_64를 추가하자.
- restart : 오류 발생시 재시작 여부 또는 첫 부팅시 자동 실행 여부. Docker 시작될 시에 컨테이너가 자동으로 시작되게 하고 싶으면(컴퓨터를 켜고 docker를 실행만 하면 MYSQL을 쓰게 하고 싶으면 always를 넣자)
- container_name : 기본적으로 생성되는 이름이 아닌 사용자 지정 컨테이너 이름을 지정
- ports : 접속할 포트(인바운드) 설정. 호스트의 3306 포트를 컨테이너의 3306 포트로 매핑
- enviroment : 컨테이너에서 사용할 환경 변수를 설정하면 된다.
- MYSQL_ROOT_PASSWORD : 루트 계정에 대해 설정되는 비밀번호
- MYSQL_ROOT_HOST : 다른 호스트의 루트 연결을 허용하려면 이 환경 변수를 설정
- MYSQL_DATABASE : 생성할 DB 이름
- MYSQL_USER : 접속할 아이디
- MYSQL_PASSWORD : 접속할 비밀번호
- TZ : 도커 컨테이너 타임존 설정
- command : 컨테이너가 실행될 때 수행할 명령어를 설정한다.
- --character-set-server=utf8mb4 : DB 기본 캐릭터셋 utf8mb4로 설정
- --collation-server=utf8mb4_unicode_ci : DB 기본 데이터정렬 utf8mb4_unicode_ci로 설정
(2) MYSQL의 볼륨 정의
자세한 사항은 '[Docker] 도커 볼륨 다루기' 포스트 참조
- ./db/mysql/data:/var/lib/mysql
- ./db/mysql/config:/etc/mysql/conf.d
- ./db/mysql/init:/docker-entrypoint-initdb.d
- volumes : 볼륨 설정(외부나 특정 장소에 mount 하는 명령어)
- 위치 1 : 위치 2
형식으로 보이는데 위치 2를 위치 1에 할당해 주는 작업이라고 생각하면 된다.
정리하자면 db에 데이터를 입력하거나 설정을 입력하거나 사전 정보가 주어주는데 이를 로컬이나 사용자가 접근하기 쉬운 위치로 세팅을 해두어서 백업이나 초기화 등을 용이하게 하려고 하는 것은 물론이고, 가장 주된 요인은 도커 내 서버에 저장될 DB를 로컬로 가져와서 깃허브에 올려서 공동작업자와 공유하거나 접근하기 쉽게(도커 서버로 접근하기 위해서는 별도의 ssh 설정이나 터미널이 필요하다) 하기 위함이다.
가장 중요한 이유는 혹시나 모르는 컨테이너 리부팅 상황 등에 있어서 컨테이너 내부 내용이 다 사라지는 경우가 있기에 DB의 정보를 지키기 위해서는 외부에 이와 같이 마운트 하여 저장하는 것이 좋다.

① - ./db/mysql/data:/var/lib/mysql
본론부터 말하자면 DB 데이터 파일들이 저장되는 저장 경로이다.
그럼 우린 이것을 백업을 하고 싶으면 따로 복사하여 저장하고 혹시나 많은 쿼리와 스키마를 작성했는데 빠른 삭제, 초기화가 하고 싶으면 이 폴더를 날리고 도커를 재시작하면 초기 세팅을 가져올 수 있다.

실제로 도커의 터미널로 해당 경로를 들어가게 되면 pem 키들부터 sock, 각종 log 파일 등을 볼 수 있다. 아마 자신이 만든 DB 이름으로의 파일도 존재할 것이다.
② - ./db/mysql/config:/etc/mysql/conf.d
외부 접속을 위한 파일들이 저장되는 저장 경로이다. 따라서 이는 로컬의 config 폴더 내에 가져와준다.
만약 해당 컨테이너를 여러 번 실행하는데 오류가 뜨면서 실행이 되지 않는다면 data와 config 폴더를 날린 후에 다시 시도하면 문제없이 초기 상태로 실행될 것이다.
③ - ./db/mysql/init:/docker-entrypoint-initdb.d
도커가 처음 실행될 당시에만 실행되는 초기 세팅 파일(데이터베이스 초기화 SQL)이다.
스키마 A, B, C가 필요한 환경을 구축하고 싶다면 해당 init 폴더 내에 여러 .sql 파일을 만들어서 각각 묘사해둔다면 나중에 DDL 등의 수정에 있어서 독립성을 가지게 되어 편하게 구축이 가능하다.
2. 도커 컨테이너 생성하기
터미널에서 위에서 생성했던 ./docker 위치로 이동하여 아래와 같은 명령어를 실행한다.
PS C:\Users\islove8587\docker> docker-compose -p db_mysql up -d
time="2024-05-11T15:08:23+09:00" level=warning msg="C:\\Users\\islove8587\\docker\\docker-compose.yml: `version` is obsolete"
docker-compose v2.25.0 이상 버전부터는 docker-compose.yml 파일의 최상단에 작성된 version : '3' 이 사용되지 않아 `version` is obsolete 오류가 발생할 수 있다. 해결 방법은 docker-compose.yml의 version 내용을 삭제해 주면 된다.
위와 같은 에러가 뜨는 이유는 윈도우 환경에서 도커 데스크톱이 실행되어 있지 않은 상태이기 때문이다. 도커를 켜주고 다시 실행하면 해결된다.
NAME STATE VERSION
* RockyLinux9 Running 2
Ubuntu_20.04.6_LTS Stopped 2
docker-desktop Stopped 2
docker-desktop-data Stopped 2
바탕화면 또는 시작 메뉴에 Docker Desktop 링크를 클릭해 Docker Desktop을 실행한다.


그럼 아래와 같이 성공적으로 도커 컨테이너가 생성되고 실행되는 것이 보인다.
NAME STATE VERSION
* RockyLinux9 Running 2
Ubuntu_20.04.6_LTS Stopped 2
docker-desktop Running 2
docker-desktop-data Running 2
PS C:\Users\islove8587\docker> docker-compose -p db_mysql up -d
[+] Running 12/12
✔ db Pulled 29.3s
✔ fcbdc4090331 Pull complete 13.1s
✔ a845363d0003 Pull complete 0.7s
✔ e8058c6f9bdd Pull complete 0.9s
✔ 2ec357e5ab0c Pull complete 2.3s
✔ 5afcf1382f34 Pull complete 1.8s
✔ 7e6fb392497b Pull complete 2.4s
✔ 0287ae8ee890 Pull complete 13.7s
✔ faa49449b97e Pull complete 3.2s
✔ ddd0836d7ff3 Pull complete 14.8s
✔ c25cb9740165 Pull complete 13.8s
✔ 8d993d969e2b Pull complete 14.4s
[+] Running 2/2
✔ Network db_mysql_default Created 0.0s
✔ Container mysql8 Started 0.5s
PS C:\Users\islove8587\docker> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6313b9cd14a mysql:8.0 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql8
Docker Desktop를 설치했다면 실행 중인 것을 확인할 수 있다.

또한 Docker Desktop에서 지원해 주는 터미널에서 DDL을 이용해 현재 DB 구성 상태를 확인할 수 있다.

① mysql -u (유저명 옵션) [ 유저명 ] -p [ 실행한 DB 이름 ] + 이후 다음행에 유저 pw을 입력해 준다.
② mysql 접속 후에 SHOW DATABASES 명령어로 존재하는 DB 목록을 뽑는다.
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.37 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| common |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql>

3. 도커 데스크탑에 설치된 MYSQL 서버 설정 파일(my.cnf) 수정
① Docker Desktop에서 해당하는 MYSQL 컨테이너에 접속

② 'Files'탭에 있는 etc 폴더 열기

③ my.cnf 파일을 찾고 우측 상단 Open file editor 버튼 클릭

④ 해당 탭에서 파일 수정후 저장 버튼 클릭

⑤ 재시작 버튼을 클릭해서 MYSQL 서버 재시작

4. MYSQL WorkBench 연결하기

- Connection Name : 원하는 이름 할당
- Method : TCP/IP 방식
- Hostname : local host IP 할당 = 127.0.0.1
- Username : docker-compose의 MYSQL_USER
- Password : docker-compose의 MYSQL_PASSWORD
- Default Schema : docker-compose의 MYSQL_DATABASE

Connection Test를 한다.

OK를 눌러 생성을 한다. 이후에 생성된 항목 탭에 들어가게 된다면

설치한 데이터베이스 시스템 타임존, 기본 캐릭터셋, 기본 데이터정렬 확인
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE `SCHEMA_NAME` = DATABASE();

'Docker' 카테고리의 다른 글
[Docker] 윈도우에 도커로 MSSQL 설치하고 접속하기 (0) | 2025.02.19 |
---|---|
[Docker] 윈도우에 도커로 REDIS 설치하고 접속하기 (0) | 2025.02.19 |
[Docker] 도커 사용법 - 명령어 (0) | 2025.02.19 |
[Docker] docker-compose.yml 파일 구성 알아보기 (0) | 2025.02.19 |
[Docker] 도커 컴포즈(Docker compose) 란? (0) | 2025.02.19 |