학습주제
학습내용
컨테이너가 중단되면 데이터는?
중단이 되면 데이터가 모두 유실됨.
버그나, 여러 이유로 중단될 수 있음. 데이터들이 유지되길 원할 때 volume
특정 소프트웨어가 계속해서 동작을 원할 때
mysql이 데이터 베이스로써 컨테이너에서 계속 동작할 때
Data Persistance
서로 매핑 디스크에선 마운팅
호스트(우분투) 도커 컨테이너 실행
logs - logs로 매핑
호스트 패스가 도커 패스로 마운팅됨.
호스트 패스로 영구적으로 데이터가 남게 됨.
에어플로우를 실행할 때 많이 사용하는 매핑.
대표적으로 dags, logs
컨테이너가 중단, 재실행되어도 데이터의 유실이 없음.
컨테이너와 호스트 시스템이 특정 폴더를 공유
호스트 시스템은 도커 아래 실행되는 운영체제
리눅스라면 특정 파일시스템을 컨테이너 내에 특정 폴더로 마운팅
도커는 가상 파일시스템임
디스크와 같은 물리적인 장치를 특정폴더에 연결
USB를 꽂으면 :D, :E 같은 폴더가 생김.
호스트 쪽에서 바꾸면 컨테이너쪽에서도 보임.
속성을 잡기 나름임. 컨테이너로 마운트 하는 폴더를 읽기전용으로만 할 수 있음. 그럼 컨테이너는 읽기만 할 수 있음 -> 하나의 폴더를 다수의 컨테이너가 공유할 수 있음.
docker run -v 호스트폴더:컨테이너폴더
2,3은 도커 컨테이너에게 알아서 만들어라. 어떻게든 데이터 persist 유지해라. 내가 호스트에서 들어갈일은 없다.
보면 콜론이 없고 패스 하나만 지정되어 있음. 도커 컨테이너에게 너의 컨테이너의 패스를 consist하게 만들어라. 호스트 시스템마다 알아서 특정 폴더를 랜덤한이름을 만들어서 컨테이너 폴더에 마운트 해줌. 이건 잘 안씀. 랜덤하게 폴더를 만들어 컨테이너 특정 패스로 마운트.
컨테이너도 이름을 지정하면 기억하기 쉽고, 후속작업 하기 쉬움. 볼륨에게 이름을 부여할수 있음.
named는 위의 개선판임. 제일 많이 씀.
속성을 세팅할땐 named기준으로 뒤에 :ro 붙임.
기본은 읽기/쓰기
VOLUME anonymous만 가능함. ID를 알아야 관리하기 쉬울텐데, 어려움. 맹점들이 있음.
docker-compose를 쓰는게 일반적.
-> 애플리케이션. 컨테이너 5개 예시로
에어플로우 7개 컨테이너 어떻게 실행하는지
엔진엑스: 경량화된 웹 서버. 로드밸런서로 쓰임. 웹서버 트래픽 몰리면 다수의 웹서버를 하나의 클러스터로 만들때 앞단에 엔진엑스를 둠. 엔진엑스는 별다른걸 안하고 트래픽을 받아서 뒤에 있는 서버들에게 나눠줌. 어느 웹서버가 살았고 죽었는지 판단. 죽은거는 빼는 형태로 감. 이걸 로드밸런서라고 함. 일을 다수의 서버에 나눠준다 정도.
워낙 많이 사용되는 이미지이기에 오피셜 이미지가 있음.
이걸 받아서
docker run -d --name=nginx -p 8081:80 nginx
로컬호스트 브라우저 방문. 웹페이지가 뜰 것임.
이컨테이너 안네 루트로 쉘스크립트 실행한뒤
웰컴x를 띄워주는 index.html을 편집해본다.
-> 볼륨이 지정이 안되어 있기 때문에, 컨테이너를 삭제했을 경우 바꿨던 내용이 다 날아가게 됨.
호스트 폴더를 아까의 컨테이너 폴더에 마운트 시켜본다.
docker-compose.yml
볼륨을 세개를 유지를 함.
호스트 볼륨을 많이 쓰고. 명확하게 쓰고싶어함 유저는
콜론을 사이에 두고 왼쪽엔 호스트 파일시스템 폴더, 오른쪽은 컨테이너 파일시스템 폴더
보통 yml 위치한 폴더가 환경변수로 주어짐. 오른쪽에 콜론 ro를 하면 읽기전용.
${AIRFLOW_PROJ_DIR:-.}
저 뒤에 :-.을 왜 썼는지는 잘 모르겠음.
voluems: 보면 -로 리스트 원소형으로 다양한 볼륨을 세팅한다.
에어플로우를 도커 컨테이너로 실행한다, yml을 airflow-setup 폴더 안에 두고 실행했다면
이 폴더 아래 dags등의 폴더가 컨테이너 폴더를 마운팅함.
볼륨 뭐가 있으면 ls
삭제하고 싶으면 rm
모두 날리면 prune
깊게 보고 싶으면 inspect