Docker에서 볼륨(Volume)은 컨테이너와 호스트 간, 컨테이너간의 데이터를 공유할수 있음
컨테이너의 상태가 갑자기 중단되어도 volumne을 통해 데이터가 보존될 수 있다.
예를들어 호스트 시스템(우분투)에서 실행했을때, /home/legoking/logs 를 docker container의 /var/lib/logs로 마운트, 따라서 컨테이너가 중단 돼도 , 그 기록이 로그에 남게됨. 호스트 폴더, 컨테이너 폴더의 변화는 서로에게 영향을끼침 (영향의 정도는 속성을 어떻게 설정하는지(읽기전용, 읽기쓰기 등)에 따라 조금씩 다름)
docker volumne 선언 방식
host volumes docker run -v 호스트:컨테이너 예) docker run -v /home/본인id/logs:/var/lib/airflow/logs
anonymous volumes docker run -v 컨테이너 예) docker run -v/var/lib/airflow/logs docker file에 사용되는 방식으로,호스트쪽에 액세스되지는 않지만 재시작해도 유지됨
named volumes docker run -v name:컨테이너 예) docker run -v name:/var/lib/airflow/logs 가장 선호되는 방식. 하나의 volume을 다수의 컨테이너에 공유하는 것도 가능(docker-compose에 쓰임)
+docker compose 란? 다수의 container로 구성된 소프트웨어를, 도커 환경에서 자유롭게 실행하고 관리할수 있게하는 툴
+ dockerfile 에도 volume이 있지만, 3가지중 anonymousvolumes만 사용가능. docker-compose에서는 모두 사용 가능해 보통 여기서 선언한다.
+volume을 읽기전용(readonly)으로 지정하고 싶다면? name : /var/lib/mysql/data:ro
docker volume이 없을때의 위험성
nginx를 실행. nginx란? 경량화된 웹서버. 주로 로드밸런서로 쓰임 + 로드밸런서 : 트래픽 부하를 분산함으로써 서버 과부하를 방지하고, 장애 시 특정 서버에 대한 요청을 다른 서버로 전환하여 서비스의 안정성을 보장
docker run -d --name=nginx -p 8081:80 nginx
브라우저 방문: http://localhost:8081/
이 내용을 고쳐보려함
docker exec --user=root -it nginx sh 1) apt update 2) apt install nano 3) nano /usr/share/nginx/html/index.html 편집기 접속후 내용 수정 해봄
welcome to nginx -> welcome to docker volumn 바뀐것 확인
4) 컨테이너 삭제 해보자 docker stop nginx, docker rm nginx 이후 다시 처음부터 수행
docker restart nginx
내용 확인시 수정했던 내용이 원상복구 된것을 확인-> 따라서 볼륨이 필요하다
이번엔 바뀌지 않게 볼륨 제작해서 다시 해보자 ! 연결방식 : docker run -v 호스트:컨테이너
우선 html 폴더를 만들고, index.html, test.html 파일(내용변경 확인에 사용할 페이지들) 제작
우선 mkdir html로 html 폴더를 만들고
vim index.html 로 만들고 입력 <h1>Hello from Docker Volume!!</h1> +모르겠다면 vim 편집기 사용방법 검색
vim test.html 로 만들고 입력<h1> Testing . . .</h1>
기존에 있던 컨테이너 지우고 weare@DESKTOP-BE1I4GE:~/html$ docker stop nginx nginx weare@DESKTOP-BE1I4GE:~/html$ docker rm nginx nginx
현재 호스트 위치 찾아냄 weare@DESKTOP-BE1I4GE:~/html$ pwd /home/weare/html 컨테이너 위치 /usr/share/nginx/html
ls -tl /Users/jobox/Downloads/grepp/kdt/nginx/html (index.html, test.html 파일 있어야함)
docker run -p 8081:80 -d --name nginx_demo -v /Users/jobox/Downloads/grepp/kdt/nginx/html:/usr/share/nginx/html
볼륨 만들고 다시 연결 docker run -p 8081:80 --name nginx -v /home/weare/html:/usr/share/nginx/html nginx