Docker

[Docker] Volume Mount(볼륨 사용하기)

nang. 2020. 3. 26. 21:13
반응형
SMALL

Volume Mount

  • 도커 컨테이너에서 작성되거나 수정된 파일
    • 컨테이너가 파기된다면?
      • 호스트에서도 함께 삭제된다.
  • 호스트 쪽 파일 시스템에 마운트한다면 컨테이너에서 삭제해도 호스트 파일 시스템에 남아있게 된다.

    이때 사용하는 것이 데이터 볼륨

    윈도우와 도커 간의 공유 기능

5.1 volume mount 준비하기

  • 도커 세팅 메뉴에서 shared Drives에서 공유할 드라이브 체크해주기

5.2 데이터 볼륨

호스트와 컨테이너 사이의 디렉터리 공유 및 재사용 기능 제공하는 메커니즘

  • 윈도우와 컨테이너 간의 공유될 폴더를 연결시키는 것
  • 호스트 쪽 경로에 저장
    • 호스트 쪽 디렉터리에 의존성 강함

5.2.1 데이터 볼륨 생성하기 (볼륨마운트 사용하기)

  • 직접 폴더 지정 방법

    • -v 명령을 직접 사용한다.
      • -v <호스트디렉터리>:<컨테이너디렉터리>
      • 호스트 디렉터리를 지정할 땐 호스트에 그 지정할 폴더가 무조건 있어야만 마운트됨
        • 즉, 다른 PC에서는 따로 만들지않는 한 사용이 힘들다는 것
$ -v /my/datadir:/var/lib/mysql
  • 컨테이너의 폴더 이미지화 방법
    • run 명령을 실행할 때 -v 옵션을 준다.
      • -v <호스트디렉터리>:<컨테이너디렉터리>
$ docker run -v /my/datadir:/var/lib/mysql -d -p 8080:8080 ninizz/sampleimage:latest

윈도우의 폴더 경로 복사 후 <호스트디렉터리>에 넣기

5.3 데이터 볼륨 컨테이너

컨테이너와 컨테이너 사이의 디렉터리 공유 및 재사용 기능 제공하는 메커니즘

  • 컨테이너 간의 공유
  • 디스크에 컨테이너가 갖는 데이터를 데이터 볼륨 처리하여 다른 컨테이너에 공유하는 컨테이너가 데이터 볼륨 컨테이너
  • 호스트의 도커가 관리하는 영역
    • /var/lib/docker/volumes/ 에 저장
  • run 명령을 실행할 때 --volume-from 옵션을 준다.
## 데이터볼륨컨테이너 <application>을 다른 컨테이너에 마운트하는 옵션
--volume-from <application>

실습

: 데이터 볼륨에 MySQL 데이터 저장하기

  1. 새파일 Dockerfile 만들기
$ mkdir -p data02\vd
$ cd data02\vd
$ code
// VS 열리면 `Dockerfile` 만들어주기
  1. Dockerfile
FROM busybox 
VOLUME /var/lib/mysql
CMD ["bin/true"]
  • FROM
    • busybox
      • 받아올 이미지
      • 샘플 이미지, 보통 테스트를 위해 사용
  • VOLUME
    • 볼륨 마운트 사용 위해 쓰는 인스트럭션
    • /var/lib/mysql 폴더를 볼륨 마운트로 사용하겠다는 의미
      • 컨테이너 폴더를 지정하는 것
  1. 이미지 빌드하기
$ docker build -t example/mysql-data:latest . 
  1. 컨테이너 생성하기
$ docker run -d --name mysql-data example/mysql-data:latest
  • --name mysql-data
    • 컨테이너 이름 부여
  1. MySQL 띄우기
$ docker image pull mysql:latest
$ docker images ## mysql 이미지 있는지 확인
$ docker run -d --rm --name mysql `  
    -e "MYSQL_ALLOW_EMPTY_PASSWORKD=yes" `
    -e "MYSQL_DATABASE=volume_test" `
    -e "MYSQL_USER=example" `
    -e "MYSQL_PASSWORKD=example" `
    --volumes-from mysql-data `
    mysql:5.7
$ docker ps
  • \나 ` 는 커맨드가 안끝났다는 뜻으로 엔터쳐서 명령 계속 이어쓸 수 있음
  • mysql 컨테이너에서 연결 옵션 걸었음
  • --volume-from
    • mysql-data 컨테이너를 mysql컨테이너에 마운트
  1. MySQL 접속하기

    • mysql 컨테이너 실행하기
    $ docker exec -it mysql mysql -uroot -p volume_test
    password: 그냥 엔터치기 (-e "MYSQL_ALLOW_EMPTY_PASSWORKD=yes" 옵션을 줬기 때문에 가능)
    mysql>
  1. MySQL 데이터 넣기
mysql > create table user(id int primary key auto_increment, name varchar(20));
mysql > insert into user(name) values('User1');
mysql > insert into user(name) values('User2');
mysql > insert into user(name) values('User3');
exit
  1. 테스트
$ docker stop <`mysql` 컨테이너 ID>
  • mysql 컨테이너를 중단시키고 재실행시켜도 MySQL 접속해보면 삭제안되고 데이터 남아있음
반응형
LIST