본문 바로가기

data engineering/docker

[Docker] 개요

1. Docker 개요

  • 컨셉
    • 한 대의 컴퓨터(호스트) 안에서 각 앱을 격리된 환경(컨테이너)에서 실행함
  • 등장 배경
    • 내가 만든 프로그램이 다른 컴퓨터에서 돌아가게 하려면?
      • 클라우드 컴퓨팅으로 가상 서버를 더 쉽게 구축할 수 있게 되었지만, 각종 소프트웨어를 설치하고 설정하는데에 또 시간이 듦
      • 사소한 설정 하나가 운영체제와 서비스 안정성에 큰 영향을 미치기에 이를 잘 설정하는 것은 아주 중요함!
      • 이 문제를 해결하기 위해 Immutable Infrastructure 등장했으며, 이를 구현한 프로젝트가 Docker
  • 목표
    • 개발 환경, 테스트 환경, 프로덕션 환경에서 소프트웨어를 일관되게 빌드하고 실행하고 배포하는 것

 

 

2. Virtual Machine vs. Docker

  • Virtual Machine
    • 하드웨어를 추상화해 한 컴퓨터 위에 가상 컴퓨터를 올리는 것(컴퓨터 하드웨어 단에서의 추상화)
      • AWS의 EC2가 대표적
    • 보통 하나의 컴퓨터 위에 다수의 가상 머신을 실행하며, 이는 운영체제를 포함함
      • 장점 - 다수의 소프트웨어를 각 VM에서 독립적으로 실행 가능
      • 단점 - 각 VM은 자신만의 운영체제를 필요로 하며, 유료 운영체제라면 라이센스 비용이 필요. 부팅하는데 오래 걸리고, 자원을 많이 사용함(VM들끼리 자원을 나눠 사용)
  • Docker
    • 소프트웨어를 실행하기 위한 독립적이고 분리된 공간
    • 자체 파일 시스템을 가지고 있음 (Volume)
      • 장점 - 다수의 소프트웨어를 각 컨테이너에서 독립적으로 실행 가능. 자원 소비가 적음(몇십 ~ 몇백 개의 컨테이너 실행 가능). 호스트 운영체제를 사용하기 때문에, 별도의 비용이 없음
      • 단점 - 다수의 컨테이너를 관리하는 것이 쉽지 않음. 호스트 운영체제를 사용하기에, Cross-platform compatibility를 항상 지원하지 않음. GUI 소프트웨어 개발에 적합하지 않음

 

 

3. Airflow 운영상 이슈로 알아보는 Docker의 필요성

  • 관리해야하는 DAG 수가 100개를 넘어간다면 생기는 문제
    • 라이브러리/모듈 충돌
      • DAG 혹은 Task 별로 독립 공간을 만들어주는게 필요함. DAG 혹은 Task 코드를 Docker Image로 만들고 이를 독립된 공간(Docker Container) 안에서 실행
    • worker 부족
      • worker는 python으로 구성되어 있기 때문에 CPU의 수만큼 capacity가 있는 것
      • DAG가 늘어나면서 worker가 부족해짐
      • scale up / scale out - 클라우드 서비스 사용 권장 / K8s와 같은 컨테이너 기술 사용 - 필요한대로 서버 요청
    • 낮은 서버 활용도 이슈
      • Airflow 전용 서버를 할당했을 때의 이슈 
        • 아래 그림처럼 서버들이 항상 높게 활용되진 않음
        • 서비스 별로 Capacity 관리 필요
      • K8s와 같은 컨테이너 기술 도입으로 해결 가능

 

 

 

 

4. Airflow의 운영상 이슈를 Docker로 해결하려면?

  • 라이브러리/모듈 충돌 방지?
    • DAG, Task코드를 이미지로 만들어 Docker Container 형태로 실행
    • 개발 환경과 프로덕션 환경을 동일하게 유지 가능
  • worker 부족?
    • Airflow에 전용 서버를 할당하지 않고, Container Orchestration 서비스를 통해 할당해 사용하고 리턴함
    • Airflow worker를 K8s에서 필요한 대로 동적으로 할당해 사용
  • 낮은 서버 활용도 이슈?
    • Airflow Operator(Task는 operator로 구현이 됨)로 KubernetesPodOperator를 사용
    • Airflow Operator로 DockerOperator를 사용
    • Airflow Executor(Task를 관리하고 실행하는 역할)로 아래를 사용
      • KubernetesExecutor
      • CeleryKubernetesExecutor
      • LocalKubernetesExecutor

 

 

 

 

[출처] 데이터 엔지니어링 데브코스, 생활코딩

'data engineering > docker' 카테고리의 다른 글

[Docker] Image 다운로드 후 설치하기  (0) 2024.05.29
[Docker] Docker hub  (0) 2024.05.29
[Docker] 프로그램 개발 프로세스  (0) 2024.05.28
[Docker] Image  (0) 2024.05.28
[Docker] Dockerfile  (0) 2024.05.28