[Docker] run의 v옵션인 volume

최동혁·2023년 4월 18일
0

docker

목록 보기
2/5

volume

  • run 옵션에 쓰일 수 있는 -v 옵션

  • db도 서버이기 때문에 컨테이너에 올리고 싶은데, 메모리를 읽어오는 형식이여서 휘발성이다.

  • 그래서 db를 아무리 쓰고 저장해도 컨테이너가 꺼지면 저장 정보가 날아간다.

  • host pc의 특정 디렉토리를 컨테이너의 특정 디렉토리에 연결해준다. 약간 마운트 같은 느낌.

  • 그래서 저장이 되면 host pc에 저장이 되고, 컨테이너를 날려도 host pc는 그대로이기 때문에 정보는 남아있음.

  • 실무에서는 날라가면 안되는 데이터를 처리할 때, 디렉토리에 안하고, NAAS, SAAS, 아니면 특정 디스크를 추가해서 해당 디렉토리에 마운트 시켜서 한다.

실습

  • mysql db는 /var/lib/mysql 에 데이터를 저장한다.
  • host pc에 새로운 데이터 저장 디렉토리를 만들어준다.
    • 위치와 이름은 상관없다.
  • docker run --name my-mysql -v /root/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=qwer1234 -p 3306:3306 -d mysql:8.0.32-debian
    • 여기서 -v 옵션으로 mysql의 데이터를 어디에 저장할지 주는건데 앞에께 host pc의 디렉토리이고, : 뒤에가 컨테이너 환경의 디렉토리이다.
    • 이렇게 하면 -d 옵션으로 백엔드로 돌아가고, 3306 포트를 열어서 포트포워딩을 해주고, 이름은 my-mysql이라는 이름으로 이미지를 생성 후 실행시키는것이다.
    • 그러면 컨테이너가 꺼지더라도 host pc의 /root/data 폴더에 db 정보들이 담겨져 있기 때문에 데이터들이 사라지지 않는다.

  • host pc의 /root/data 폴더에 db 정보들이 담겨있는 것을 확인할 수 있다.
CREATE DATABASE web;
USE web;
CREATE TABLE student (sname VARCHAR(10), sage INT);

INSERT INTO student VALUES('kim',10);
INSERT INTO student VALUES('lee',20);
INSERT INTO student VALUES('park',30);
INSERT INTO student VALUES('sim',40);
  • 위의 코드로 데이터들을 생성해준다.
  • 그리고 컨테이너를 docker stop을 이용해 종료한 후, 다시 실행시킨다.

  • 컨테이너에서 저장한 데이터들이 껏다 켜도 생성한 web 스키마가 사라지지 않는 것을 볼 수 있다.
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글