개발/강의

인프런 : Docker Volume 2

EJ EJ 2025. 4. 11. 15:26

Docker Volume(도커 볼륨)이란?

도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법이다. 볼륨(Volume)은 컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용하는 형태이다.

 

*도터 볼륨을 사용하는 이유)

컨테이너가 가진 문제점 : 기존 컨테이너를 새로운 컨테이너로 교체하면, 기존 컨테이너 내부에 있던 데이터도 같이 삭제된다. 만약 이 컨테이너가 MySQL을 실행시키는 컨테이너였다면 MySQL에 저장된 데이터도 같이 삭제 돼버린다.

 

볼륨(Volume)을 사용하는 명령어

docker run -v [호스트의 디렉토리 절대경로]:[컨테이너의 디렉토리 절대경로] [이미지명]:[태그명]

 

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

<1>  볼륨(Volume)을 활용하지 않고 MySQL 컨테이너 띄우기

 

1.MySQL 이미지를 바탕으로 컨테이너 실행시키기

docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql
  • docker pull 과정은 생략해도 상관없다. 왜냐하면 docker run mysql로 실행시켰을 때, 로컬에 이미지가 없으면 Dockerhub으로부터 MySQL 이미지를 알아서 다운받아서 실행시키기 때문이다.
  • -e MYSQL_ROOT_PASSWORD=password123 : -e 옵션은 컨테이너의 환경 변수를 설정하는 옵션이다. (본인 패스워드 작성)
  • Dockerhub의 MySQL 공식 문서를 보면 환경 변수로 MYSQL_ROOT_PASSWORD를 정해주어야만 정상적으로 컨테이너가 실행된다고 적혀져있다.

2.MySQL 컨테이너에 접속

docker exec -it [MySQL 컨테이너 ID] bash

 

3.컨테이너에서 MySQL에 접근하기

mysql -u root -p

 

4.MySQL 접근에 성공했다면 데이터베이스 조회해보기

mysql> show databases;

 

5.데이터베이스 만들기

mysql> create database mydb;
mysql> show databases;

 

6.컨테이너 종료 후 다시 생성해보기

# 컨테이너 종료
docker stop [MySQL 컨테이너 ID]
docker rm [MySQL 컨테이너 ID]

# 컨테이너 생성
docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql
docker exec -it [MySQL 컨테이너 ID] bash

mysql -u root -p
mysql> show databases; # 아까 생성한 데이터베이스가 없어진 걸 확인할 수 있다. 

 

<2>  볼륨(Volume)을 활용해 MySQL 컨테이너 띄우기

 

1.MySQL 컨테이너 띄우기

cd /Users/jaeseong/Documents/Develop
mkdir docker-mysql # MySQL 데이터를 저장하고 싶은 폴더 만들기

# docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v {호스트의 절대경로}/mysql_data:/var/lib/mysql -d mysql

$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /Users/jaeseong/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql

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

 

2.MySQL 컨테이너에 접속해서 데이터베이스 만들기

docker exec -it [MySQL 컨테이너 ID] bash

mysql -u root -p

mysql> show databases;
mysql> create database mydb;
mysql> show databases;

 

3.컨테이너 종료 후 다시 생성해보기

# 컨테이너 종료
docker stop [MySQL 컨테이너 ID]
docker rm [MySQL 컨테이너 ID]

# 컨테이너 생성
docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /Users/jaeseong/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql

docker exec -it [MySQL 컨테이너 ID] bash
mysql -u root -p
mysql> show databases; # 아까 생성한 데이터베이스가 그대로 존재하는 걸 확인할 수 있다.

 

*참고) 최초 볼륨 생성 시 설정한 패스워드 정보를 입력해야 MySQL에 재접속이 된다. 패스워드를 변경해서 접속 시도를 하면(최초 볼륨과 다른 패스워드는) 작동이 안된다. 새로운 패스워드로 접속을 하려면, 기존 로컬 데이터베이스를 저장한 폴더를 아예 삭제하고 들어가야 한다.