본문 바로가기
강의 실습/비전공자도 이해할 수 있는 Docker 입문 실전

[실습] Docker로 MySQL 실행시켜보기 - 3

by jint 2026. 5. 9.

1. 볼륨(Volume)을 활용해 MySQL 컨테이너 실행
1) MySQL 컨테이너 띄우기
- Windows PowerShell

PS C:\Users\admin> mkdir docker-mysql # MySQL 데이터를 저장하고 싶은 폴더 만들기


    디렉터리: C:\Users\admin


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-05-09  오전 12:30                docker-mysql


PS C:\Users\admin> cd docker-mysql
PS C:\Users\admin\docker-mysql> pwd

Path
----
C:\Users\admin\docker-mysql


# docker run -e MYSQL_ROOT_PASSWORD=pwd123 -p 3306:3306 -v 호스트 절대경로/mysql_data:/var/lib/mysql -d mysql
PS C:\Users\admin\docker-mysql> docker run -e MYSQL_ROOT_PASSWORD=pwd123 -p 3306:3306 -v C:/Users/admin/docker-mysql:/var/lib/mysql -d mysql
1f0b6e504f87f5a3b8e4a96d57d6a6a49f359cc8a6d6e9c640daf83ca9b6bbe1
PS C:\Users\admin\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                         NAMES
1f0b6e504f87   mysql     "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp   elastic_banzai


pwd 명령어로 볼륨으로 사용하고자 하는 경로를 확인한 뒤, 경로를 입력한다.
윈도우의 경우 C드라이브의 사용자 경로에 저장하고 싶은 폴더를 지정할 수 있다.

- Windows PowerShell

# 예시
$ docker run -e MYSQL_ROOT_PASSWORD=pwd123 -p 3306:3306 -v C:/Users/jaeseong/js-mysql:/var/lib/mysql -d mysql


* [보충 자료] 윈도우(Windows)에서 볼륨이 생성되지 않는 경우
윈도우 볼륨 생성 안되는 문제 : https://inf.run/7d8pW

 

윈도우 볼륨 생성 안되는 문제 - 인프런 | 커뮤니티 질문&답변

누구나 함께하는 인프런 커뮤니티. 모르면 묻고, 해답을 찾아보세요.

www.inflearn.com


DB 관련 데이터가 저장되는 곳이 컨테이너의 /var/lib/mysql 경로인 것은 Docker Hub 공식 문서에서 확인할 수 있다.
Docker Hub - mysql : https://hub.docker.com/_/mysql

 

mysql - Official Image | Docker Hub

⁠Quick reference ⁠Supported tags and respective Dockerfile links 9.7.0, 9.7, 9, lts, latest, 9.7.0-oraclelinux9, 9.7-oraclelinux9, 9-oraclelinux9, lts-oraclelinux9, oraclelinux9, 9.7.0-oracle, 9.7-oracle, 9-oracle, lts-oracle, oracle⁠ 8.4.9, 8.4, 8,

hub.docker.com

 

Docker Hub - mysql


* 주의
mysql_data 폴더를 미리 만들면 안된다. 그래야 처음 이미지를 실행시킬 때, mysql 내부에 있는 /var/lib/mysql 파일들을 호스트 컴퓨터로 공유받을 수 있다.
mysql_data 폴더를 미리 만들 경우, 기존 컨테이너의 /var/lib/mysql 파일들을 전부 삭제한 뒤에 호스트의 mysql_data 로 덮어씌운다.

2) MySQL 컨테이너에 접속해서 데이터베이스 생성
- Windows PowerShell

PS C:\Users\admin\docker-mysql> docker exec -it 1f0b bash
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.7.0 MySQL Community Server - GPL

Copyright (c) 2000, 2026, 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           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.003 sec)

mysql> create database mydb;
Query OK, 1 row affected (0.016 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.001 sec)

mysql> exit
Bye
bash-5.1# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 1f0b
    Learn more at https://docs.docker.com/go/debug-cli/


3) 컨테이너 종료 후 다시 생성
- Windows PowerShell

# 컨테이너 종료
PS C:\Users\admin\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                         NAMES
1f0b6e504f87   mysql     "docker-entrypoint.s…"   9 minutes ago   Up 9 minutes   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp   elastic_banzai
PS C:\Users\admin\docker-mysql> docker stop 1f0b
1f0b
PS C:\Users\admin\docker-mysql> docker rm 1f0b
1f0b

# 컨테이너 생성
PS C:\Users\admin\docker-mysql> docker run -e MYSQL_ROOT_PASSWORD=pwd123 -p 3306:3306 -v C:/Users/admin/docker-mysql:/var/lib/mysql -d mysql
751a3caf6d03ac7b7d130fdb955550fcfcac3a99b5c22f08ee2022b86bb0f0ff

# 컨테이너 접속
PS C:\Users\admin\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                         NAMES
751a3caf6d03   mysql     "docker-entrypoint.s…"   20 seconds ago   Up 19 seconds   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp   dreamy_shaw
PS C:\Users\admin\docker-mysql> docker exec -it 751a bash
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.7.0 MySQL Community Server - GPL

Copyright (c) 2000, 2026, 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           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.002 sec)

mysql> exit
Bye
bash-5.1# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 751a
    Learn more at https://docs.docker.com/go/debug-cli/


이전에 생성했던 데이터베이스가 존재하는 것을 확인할 수 있다.

 

그림으로 이해하기


4) MySQL 컨테이너 삭제하고 다시 띄우기
- Windows PowerShell

# 컨테이너 종료
PS C:\Users\admin\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                         NAMES
751a3caf6d03   mysql     "docker-entrypoint.s…"   5 minutes ago   Up 5 minutes   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp   dreamy_shaw
PS C:\Users\admin\docker-mysql> docker stop 751a
751a
PS C:\Users\admin\docker-mysql> docker rm 751a
751a
PS C:\Users\admin\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
PS C:\Users\admin\docker-mysql> ls


    디렉터리: C:\Users\admin\docker-mysql


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-05-09   오전 1:02                #innodb_redo
d-----      2026-05-09   오전 1:08                #innodb_temp
d-----      2026-05-09  오전 12:59                mydb
d-----      2026-05-09  오전 12:52                mysql
d-----      2026-05-09  오전 12:52                performance_schema
d-----      2026-05-09  오전 12:52                sys
-a----      2026-05-09   오전 1:04        4194304 #ib_16384_0.dblwr
-a----      2026-05-09  오전 12:52       12582912 #ib_16384_1.dblwr
-a----      2026-05-09  오전 12:52             56 auto.cnf
-a----      2026-05-09  오전 12:52        2997943 binlog.000001
-a----      2026-05-09   오전 1:01            406 binlog.000002
-a----      2026-05-09   오전 1:08            221 binlog.000003
-a----      2026-05-09   오전 1:02             48 binlog.index
-a----      2026-05-09  오전 12:52           1705 ca-key.pem
-a----      2026-05-09  오전 12:52           1108 ca.pem
-a----      2026-05-09  오전 12:52           1108 client-cert.pem
-a----      2026-05-09  오전 12:52           1705 client-key.pem
-a----      2026-05-09   오전 1:08       12582912 ibdata1
-a----      2026-05-09   오전 1:08           3556 ib_buffer_pool
-a----      2026-05-09   오전 1:03       32505856 mysql.ibd
-a---l      2026-05-09   오전 1:02              0 mysql.sock
-a----      2026-05-09  오전 12:52            124 mysql_upgrade_history
-a----      2026-05-09  오전 12:52           1705 private_key.pem
-a----      2026-05-09  오전 12:52            452 public_key.pem
-a----      2026-05-09  오전 12:52           1108 server-cert.pem
-a----      2026-05-09  오전 12:52           1705 server-key.pem
-a----      2026-05-09   오전 1:04       16777216 undo_001
-a----      2026-05-09   오전 1:04       16777216 undo_002


# 비밀번호 바꿔서 컨테이너 생성
PS C:\Users\admin\docker-mysql> docker run -e MYSQL_ROOT_PASSWORD=pwd1234 -p 3306:3306 -v C:/Users/admin/docker-mysql:/var/lib/mysql -d mysql
36beceb2c27c0023988c0919393e0777df66b647c19af31513d67c0cf2fab8da
PS C:\Users\admin\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                         NAMES
36beceb2c27c   mysql     "docker-entrypoint.s…"   4 seconds ago   Up 3 seconds   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp   amazing_johnson
PS C:\Users\admin\docker-mysql> docker exec -it 36be bash
bash-5.1# mysql -u root -p # 접속이 안 됨...
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
bash-5.1# mysql -u root -p # 이전 비밀번호를 치면 접속됨
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 9.7.0 MySQL Community Server - GPL

Copyright (c) 2000, 2026, 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> exit
Bye
bash-5.1# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 36be
    Learn more at https://docs.docker.com/go/debug-cli/


MYSQL_ROOT_PASSWORD 값을 바꿔서 새로 컨테이너를 띄웠는데 비밀번호가 바뀌지 않았다. (대부분 사람들이 여기서 해맴)
그 이유는, 볼륨(Volume)으로 설정한 폴더에 이전 비밀번호 정보가 저장되어 있기 때문이다. (볼륨의 특성)
따라서 최초로 볼륨을 설정하여 컨테이너를 실행했을 때 사용한 비밀번호를 치면 접속이 된다.

MySQL 에 연결된 상태에서 비밀번호를 바꾸는 명령어를 치거나, 호스트 절대경로 자체를 삭제해야 한다.

- Windows PowerShell

PS C:\Users\admin\docker-mysql> cd ..
PS C:\Users\admin> Remove-Item -Path "C:\Users\admin\docker-mysql" -Recurse
PS C:\Users\admin> dir


    디렉터리: C:\Users\admin


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2026-04-29  오전 12:00                .aws
d-----      2026-04-29  오전 12:00                .azure
d-----      2025-05-20  오후 10:57                .cache
d-----      2026-04-29  오전 12:05                .cagent
d-----      2026-04-29  오전 12:05                .config
d-----      2026-05-09   오전 1:04                .docker
d-----      2026-05-07  오후 11:34                .gnupg
d-----      2026-02-26  오후 11:12                .gradle
d-----      2026-01-14  오후 10:45                .m2
d-----      2023-06-13   오후 9:29                .vscode
d-----      2026-04-29  오후 10:03                .vscode-shared
d-r---      2024-12-06   오전 5:13                Contacts
d-----      2026-05-08  오전 12:23                DataGripProjects
d-r---      2026-05-04   오전 1:20                Desktop
d-r---      2026-03-01   오후 8:27                Documents
d-r---      2026-05-09   오전 1:07                Downloads
d-r---      2025-07-05   오후 8:08                Favorites
d-----      2026-04-20  오후 11:20                IdeaProjects
d-----      2026-01-04   오후 6:28                IdeaSnapshots
d-----      2022-11-15   오후 3:27                Intel
d-----      2023-01-22   오후 1:13                keel
d-r---      2024-12-06   오전 5:13                Links
d-r---      2025-02-16   오후 3:54                Music
dar--l      2022-11-17   오전 1:31                OneDrive
d-r---      2026-02-08   오후 1:58                Pictures
d-----      2026-01-11  오후 12:54                Postman
d-r---      2024-12-14   오후 8:28                Saved Games
d-r---      2024-12-06   오전 5:13                Searches
d-r---      2026-04-25   오후 6:17                Videos
-a----      2026-01-18   오후 8:58             46 .gitconfig
-a----      2024-07-23   오후 8:28              0 .node_repl_history
-a----      2024-12-26  오전 11:43             22 .npmrc
-a----      2026-02-28  오전 12:17           1059 .viminfo
-a----      2025-11-17  오후 10:54            203 skb.kc


PS C:\Users\admin> docker run -e MYSQL_ROOT_PASSWORD=pwd1234 -p 3306:3306 -v C:/Users/admin/docker-mysql/mysql_data:/var/lib/mysql -d mysql
bafa179fb4e0487a2d378d6ec59eedbf0fcf810ae48a52847ebdab33f6edd2eb
PS C:\Users\admin> docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                         NAMES
bafa179fb4e0   mysql     "docker-entrypoint.s…"   15 seconds ago   Up 15 seconds   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp   jovial_jang
PS C:\Users\admin> docker exec -it bafa bash
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 9.7.0 MySQL Community Server - GPL

Copyright (c) 2000, 2026, 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> exit
Bye
bash-5.1# exit
exit

What's next:
    Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug bafa
    Learn more at https://docs.docker.com/go/debug-cli/


호스트 절대경로 자체 삭제 후, 다시 볼륨을 설정하여 컨테이너 실행시, 비밀번호를 변경하여 실행한다.
변경한 비밀번호로 MySQL 에 접근하니 접근이 잘 된다.


참고링크 : https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-docker-%EC%9E%85%EB%AC%B8-%EC%8B%A4%EC%A0%84?cid=334085

 

비전공자도 이해할 수 있는 Docker 입문/실전| JSCODE 박재성 - 인프런 강의

현재 평점 4.9점 수강생 14,453명인 강의를 만나보세요. 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 Docker 입문/실전 강의를 만들어봤습니다! Docker 기본 개념, Spring Boot를

www.inflearn.com

댓글