[Docker] 2. 공유폴더
Docker응용
작업내용을 변경하는 방법.
- 이미지 reBuild
- 느리고 힘든 방법
- Container에서 수정
- vi를 사용해야함 -> 불편…
- 볼륨 마운트(공유폴더)를 이용한 수정
- 1, 2번의 방식 혼합
Docker공유폴더(volume)
- 컨테이너 업데이트
- 새 버전의 이미지 다운 -> pull
- 기존 컨테이너 삭제 -> stop, rm
- 새 이미지를 이용하여 새 컨테이너 실행 -> run
- 컨테이너 유지 정보
- AWS S3
- 데이터 볼륨
$ docker run .... -v [host경로]:[Container경로] # 볼륨 마운트 (공유폴더) $ docker run ... --volumes-from [ContainerName]
경로 뿐만 아니라 컨테이너를 연결시킬 수 있음 (이 방식이 더 자주 쓰인다)
FROM ... VOLUME /var/lib/mysql ...
- 데이터 볼륨을 사용하면, 컨테이너를 삭제하더라도 데이터가 남아있게 된다.
- 공유폴더를 삭제하는건 아니니까..
Docker 공유폴더 예시
mysql 공유폴더 설정
$ docker run -d --name mysql-data example/mysql-data $ docker run -d --rm --name mysql \ -e "MYSQL_ALLOW_EMPTY_PASSWORD=YES" \ -e "MYSQL_DATABASE=volume_test"\ -e "MYSQL_USER=example" \ -e "MYSQL_PASSWORD=example" \ --volumes-from mysql-data \ mysql:5.7
mysql 컨테이너가 mysql-data의 컨테이너를 마운트
$ docker run --name mymongo mongo
- 앞선 예제에서 몽고디비만 만들거면 이렇게 해도됨
- 이미지 생성 방법
- docker 허브 사이트에서 pull하기
- 로컬에서 이미지 build하기
- 컨테이너 생성 및 실행 방법
docker create "이미지명"
,docker start "컨테이너명"
docker run "이미지명"
-
docker run -p 27017:27017 --name mymongo1 mongo
-
-d 옵션 한번 더 설명
-
docker logs 명령어 한번 더 설명
-
docker exec -it mongo1 mymongo
몽고디비 레플리카 예제
-
https://github.com/joneconsulting/cloud-computing/blob/master/02.DB/mongodb/mongodb-replication.txt
- 레플리카 세팅을 위해
rs.initiate()
필요 - 몽고디비 컨테이너 실행 및 접속(run & exec)
- rs.initiante()안됨 옵션 설정 안했기 때문
Dockerfile
에서CMD
변경CMD ["mongodb", "--replSet", "myapp"]
- Dockerfile바꾸면 다시 빌드
- rs.initiante()안됨 옵션 설정 안했기 때문
rs.initiate();
실행db.isMaster();
실행 후 확인- 각각 run 해서 컨테이너 생성 -> 아이피 확인
rs.add("IP주소:27017")