Docker Volume(도커 볼룸)

Kooks·2025년 11월 4일

Docker

목록 보기
3/5
post-thumbnail

컨테이너가 가진 문제점

Docker를 활용하면 특정 프로그램을 컨테이너로 뛰울 수 있다.

프로그램에 기능이 추가되면 새로운 이미지를 만들어 컨테이너를 실행시켜야 한다.

이때 Docker는 기존 컨테이너에서 변경된 부분을 수정하지 않고 새로운 컨테이너를 만들어서 통째로 갈아 끼우는 방식으로 교체한다.

이런 특징 때문에 기존 컨테이너를 새로운 컨테이너로 교체하면 기존 컨테이너 내부에 있던 데이터도 같이 삭제된다.

만약 이컨테이너가 데이터베이스를 실행시키는 컨테이너였다면 저장된 데이터도 같이 삭제 된다.

따라서 컨테이너 내부에 저장된 데이터가 삭제되면 안되는 경우에는 볼룸(Volume) 이라는 개념을 사용한다.

Docker Volume(도커 볼룸)

도커의 볼룸(Volume)이란 도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법이다.

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

볼룸(Volumne)을 사용하는 명령어

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

Dokcer로 MySQL 실행시키기

  1. MySQL 이미지를 바탕으로 컨테이너 실행시키기
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql
$ echo $MYSQL_ROOT_PASSWORD
또는
$ exprot
  • -e : 해당 옵셩은 컨테이너의 환경 변수를 설정하는 옵션
  • Dockerhub의 MySQL 공신 문서를 보면 환경 변수로 MYSQL_ROOT_PASSWORD를 정해야만 정상적으로 컨테이너가 실행된다고 적혀있다.
  • 아래의 명령어로 컨테이너로 들어가서 환경 변수를 직접 확인할 수 있다.
$ docker exec -it [MySQL 컨테이너 ID] bash
  1. 컨에티너가 잘 실행되고 있는지 체크
  2. 컨테이너 실행시킬 때 에러 없이 잘 실행되는지 로그 체크
  3. DBeaver에도 연결 시켜 체크

볼룸(Volumne)을 활용해서 MySQL 컨테이너 뛰우기

  1. MySQL 컨테이너 뛰우기
$ cd /User/test $ mkdir docekr-mysql
# docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v {호스트의 절대경로}/mysql-sql:/var/lib/mysql -d mysql
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /User/test/docker-mysql:/var/lib/mysql -d mysql`
  1. MySQL 컨테이너에 접속해서 데이터베이스 만들기
$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p
mysql> show database;
mysql> create databases mydb;
mysql> show datavbases;
  1. 컨테이너 종료 후 다시 생성해보기
# 컨테이너 종료 후 삭제하고 다시 생성

$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /User/test/docker-mysql:/var/lib/mysql -d mysql

$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p

mysql> show database;
mysql> show datavbases;
  • 결과를 보면 삭제 전에 만들었던 데이터베이스 mydb의 정보가 남아 있는걸 확인할 수 있다.
profile
I'm kooks

0개의 댓글