반응형
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 데이터 저장하기
- 새파일
Dockerfile
만들기
$ mkdir -p data02\vd
$ cd data02\vd
$ code
// VS 열리면 `Dockerfile` 만들어주기
Dockerfile
FROM busybox
VOLUME /var/lib/mysql
CMD ["bin/true"]
- FROM
- busybox
- 받아올 이미지
- 샘플 이미지, 보통 테스트를 위해 사용
- busybox
- VOLUME
- 볼륨 마운트 사용 위해 쓰는 인스트럭션
/var/lib/mysql
폴더를 볼륨 마운트로 사용하겠다는 의미- 컨테이너 폴더를 지정하는 것
- 이미지 빌드하기
$ docker build -t example/mysql-data:latest .
- 컨테이너 생성하기
$ docker run -d --name mysql-data example/mysql-data:latest
--name mysql-data
- 컨테이너 이름 부여
- 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
컨테이너에 마운트
MySQL 접속하기
mysql
컨테이너 실행하기
$ docker exec -it mysql mysql -uroot -p volume_test password: 그냥 엔터치기 (-e "MYSQL_ALLOW_EMPTY_PASSWORKD=yes" 옵션을 줬기 때문에 가능) mysql>
- 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
- 테스트
$ docker stop <`mysql` 컨테이너 ID>
mysql
컨테이너를 중단시키고 재실행시켜도 MySQL 접속해보면 삭제안되고 데이터 남아있음
반응형
LIST
'Docker' 카테고리의 다른 글
[Docker] MongoDB 설치하기 (0) | 2020.03.27 |
---|---|
[Docker] docker-compose 란? (compose 실행 및 종료) (1) | 2020.03.26 |
[Docker] 이미지 빌드와 컨테이너 실행 (0) | 2020.03.24 |
[Docker] About Dockerfile (0) | 2020.03.23 |
[Docker] 도커란? (What is Docker) (0) | 2020.03.23 |