docker volumne이란?

  1. Docker에서 볼륨(Volume)은 컨테이너와 호스트 간, 컨테이너간의 데이터를 공유할수 있음
  2. 컨테이너의 상태가 갑자기 중단되어도  volumne을 통해 데이터가 보존될 수 있다.
  3. 예를들어 호스트 시스템(우분투)에서 실행했을때, /home/legoking/logs 를 docker container의 /var/lib/logs로 마운트,
    따라서 컨테이너가 중단 돼도 , 그 기록이 로그에 남게됨. 호스트 폴더, 컨테이너 폴더의 변화는 서로에게 영향을끼침
    (영향의 정도는 속성을 어떻게 설정하는지(읽기전용, 읽기쓰기 등)에 따라 조금씩 다름)

docker volumne 선언 방식

  1. host volumes
    docker run -v 호스트:컨테이너
    예) docker run -v  /home/본인id/logs:/var/lib/airflow/logs

  2. anonymous volumes
    docker run -v 컨테이너
    예) docker run -v  /var/lib/airflow/logs
    docker file에 사용되는 방식으로,호스트쪽에 액세스되지는 않지만 재시작해도 유지됨

  3. named volumes
    docker run -v name:컨테이너
    예) docker run -v  name:/var/lib/airflow/logs
    가장 선호되는 방식. 하나의 volume을 다수의 컨테이너에 공유하는 것도 가능(docker-compose에 쓰임)

    +docker compose 란?
    다수의 container로 구성된 소프트웨어를, 도커 환경에서 자유롭게 실행하고 관리할수 있게하는 툴

    + dockerfile 에도 volume이 있지만, 3가지중  anonymous volumes만 사용가능.
    docker-compose에서는 모두 사용 가능해 보통 여기서 선언한다. 

    +volume을 읽기전용(readonly)으로 지정하고 싶다면?
    name : /var/lib/mysql/data:ro

 

docker volume이 없을때의 위험성

  1. nginx를 실행.  nginx란?
    경량화된 웹서버. 주로 로드밸런서로 쓰임
    + 로드밸런서 : 트래픽 부하를 분산함으로써 서버 과부하를 방지하고, 장애 시 특정 서버에 대한 요청을 다른 서버로 전환하여 서비스의 안정성을 보장

  2. docker run -d --name=nginx -p 8081:80 nginx
  3. 브라우저 방문: http://localhost:8081/
     이 내용을 고쳐보려함

  4. 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 이후 다시 처음부터 수행
  5. docker restart nginx

    내용 확인시 수정했던 내용이 원상복구 된것을 확인-> 따라서 볼륨이 필요하다

 

 


이번엔 바뀌지 않게 볼륨 제작해서 다시 해보자 !
연결방식 : docker run -v 호스트:컨테이너 

  1. 우선 html 폴더를 만들고, index.html, test.html 파일(내용변경 확인에 사용할 페이지들) 제작
  2. 우선 mkdir html로 html 폴더를 만들고
  3. vim index.html 로 만들고 입력  <h1>Hello from Docker Volume!!</h1> 
    +모르겠다면 vim 편집기 사용방법 검색 
  4. vim test.html 로 만들고 입력  <h1> Testing . . .</h1>
  5. 기존에 있던 컨테이너 지우고
    weare@DESKTOP-BE1I4GE:~/html$ docker stop nginx
    nginx
    weare@DESKTOP-BE1I4GE:~/html$ docker rm nginx
    nginx
  6. 현재 호스트 위치 찾아냄
    weare@DESKTOP-BE1I4GE:~/html$ pwd
    /home/weare/html
    컨테이너 위치
    /usr/share/nginx/html
  7. ls -tl /Users/jobox/Downloads/grepp/kdt/nginx/html
    (index.html, test.html 파일 있어야함)
  8. docker run -p 8081:80 -d --name nginx_demo -v
    /Users/jobox/Downloads/grepp/kdt/nginx/html:/usr/share/nginx/html
  9. 볼륨 만들고 다시 연결
    docker run -p 8081:80 --name nginx -v /home/weare/html:/usr/share/nginx/html nginx
  10. 잘 연결됐는지 접속 시도 해봄 http://localhost:8081/test.html
  11. test.html 내용 수정하고 브라우저 재방문
  12. 컨테이너 멈추고 삭제
    weare@DESKTOP-BE1I4GE:~/html$ docker stop nginx
    nginx
    weare@DESKTOP-BE1I4GE:~/html$ docker rm nginx
    nginx

  13. 다시 접속해보면 내용이 유지 돼있음

 

docker volume을 airflow에서 docker-compose.yml에서 사용한 예

+ Recent posts