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에 재접속이 된다. 패스워드를 변경해서 접속 시도를 하면(최초 볼륨과 다른 패스워드는) 작동이 안된다. 새로운 패스워드로 접속을 하려면, 기존 로컬 데이터베이스를 저장한 폴더를 아예 삭제하고 들어가야 한다.
'개발 > 강의' 카테고리의 다른 글
인프런 : Docker Copmose 4 (0) | 2025.04.12 |
---|---|
인프런 : Dockerfile 3 (0) | 2025.04.11 |
인프런 : Docker 1 (0) | 2025.04.10 |