도커 볼륨

Regular Kim·2025년 11월 10일

기타

목록 보기
20/22

#docker

컨테이너 재배포에도 안전한 데이터 관리를 위한 Docker 볼륨 활용 가이드

컨테이너가 가진 문제점

Docker를 활용하면 특정 프로그램을 컨테이너로 띄울 수 있다. 이 프로그램에 기능이 추가되면 새로운 이미지를 만들어서 컨테이너를 실행시켜야 한다. 이 때, Docker는 기존 컨테이너에서 변경된 부분을 수정하지 않고, 새로운 컨테이너를 만들어서 통째로 갈아끼우는 방식으로 교체를 한다.

이런 특징으로 기존 컨테이너를 새로운 컨테이너로 교체하면, 기존 컨테이너 내부에 있던 데이터도 같이 삭제된다. 만약 이 컨테이너가 DB를 실행시키는 컨테이너였다면 DB에 저장된 데이터도 같이 삭제 된다.

도커 볼륨

도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법

볼륨은 컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용하는 형태이다.

명령어

docker run -v [호스트의 디렉토리 절대경로]:[컨테이너의 디렉토리 절대경로] [이미지명]:[태그명]
  1. [호스트의 디렉토리 절대경로]에 디렉토리가 이미 존재할 경우 : 호스트의 디렉터리가 컨테이너의 디렉터리를 덮어씌운다.
  2. [호스트의 디렉토리 절대경로]에 디렉토리가 존재하지 않을 경우 : 호스트의 디렉터리 절대 경로에 디렉터리를 새로 만들고 컨테이너의 디렉터리에 있는 파일들을 호스트의 디렉터리로 복사해온다.

Docker로 MySQL 실행시키기

MySQL 이미지로 컨테이너 실행시키기

docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql
  • docker run : 컨테이너를 생성하고 실행 (이미지가 없다면 자동으로 풀링)
  • -e MYSQL_ROOT_PASSWORD=password123 : 컨테이너 내부 MySQL 환경 변수 설정
  • -p 3306:3306 : 포트 매핑 설정, [호스트 포트]:[컨테이너 포트] 순서로 매핑하여 로컬에서 컨테이너 접속
  • -d : detached 모드 실행, 컨테이너 로그를 터미널에 출력하지 않고 백그라운드에서 실행
  • mysql : 실행할 docker 이미지 이름

MySQL 컨테이너 접속

docker exec -it [MySQL 컨테이너 id] bash
  • docker exec : 실행 중이면서 선택된 컨테이너 내부에서 명령 실행
  • -it : -i (interactive), -t (TTY), 터미널 입력을 활성화, 쉘 형태로 상호작용
  • bash : 컨테이너 내부에서 실행할 명령, bash 셸을 실행해 컨테이너 내부로 접속

컨테이너에서 MySQL 접근

mysql -u root -p

MySQL 데이터베이스 만들기

create database mydb;
show databases;

컨테이너 종료

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 
show databases;

명령어 결과로 이전에 생성한 mydb 데이터베이스가 출력되지 않음을 확인할 수 있다.

볼륨을 활용해 MySQL 컨테이너 띄우기

mkdir [MySQL 데이터를 저장하고 싶은 폴더를 원하는 경로에 만들기] # mysql_data 라고 가정
# docker run -v [호스트의 디렉토리 절대경로]:[컨테이너의 디렉토리 절대경로] [이미지명]:[태그명]
docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v [호스트의 절대 경로]/mysql_data:/var/lib/mysql -d mysql

이제 호스트에 컨테이너의 데이터가 저장된다!

/var/lib/mysql 이 경로는 어디서 알아낸거임?

해당 위치 설정은 도커 허브의 MySQL 공식 문서 Where to Store Data 부분에서 확인할 수 있다.

postgresql 혹은 mongoDB 를 사용할 때도 공식 문서에서 해당 값을 확인할 수 있다.

profile
What doesn't kill you, makes you stronger

0개의 댓글