일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Django
- 파이썬 장고
- 도커 컴포즈
- 플라스크
- mlops
- docker
- 인공지능
- 도커
- 파이썬강의
- 장고
- c
- 개발자취업
- 파이썬
- 장고 기초 강의
- cpp
- 기초강의
- 웹개발
- airflow
- C언어
- ADP
- Python
- 쇼핑몰예제
- 개발언어
- flask
- c++
- 에어플로우 기초강의
- 프로그래밍
- 개발자
- 예제프로젝트
- 장고 튜토리얼
- Today
- Total
TITEDIOS 편한 코딩
[MLOps] 7강 - Docker 설치 및 docker-compose.yaml 작성 (2) (Airflow Multi-Node System 구축 가이드 및 사례) 본문
[MLOps] 7강 - Docker 설치 및 docker-compose.yaml 작성 (2) (Airflow Multi-Node System 구축 가이드 및 사례)
TitediosKW 2025. 1. 7. 19:00목차
- 전원 설정 및 virtualbox shared folder 생성
- docker compose 개요
- docker-compose.yaml 톺아보기
- 결론
안녕하세요! 이번 포스팅에서는 VirtualBox와 Docker Compose를 활용한 개발 환경 설정 방법에 대해 알아보려고 합니다.
개발자라면 한 번쯤 겪어봤을 환경 설정의 복잡함, 그리고 이를 간소화할 수 있는 도구들을 소개해 드리겠습니다.
먼저, VirtualBox를 통해 가상화 환경을 구축하고, 공유 폴더를 설정하는 방법을 설명합니다. 그다음, Docker Compose를 사용하여 컨테이너를 손쉽게 관리하는 방법을 개괄적으로 알아보고, docker-compose.yaml 파일을 통해 실제로 어떻게 구성 요소들을 정의하고 활용할 수 있는지도 살펴볼 예정입니다.
이 글이 개발 환경을 효율적으로 구성하려는 분들께 유용한 가이드가 되길 바랍니다. 😊
1. 전원 설정 및 virtualbox shared folder 생성
가장 먼저 불편한 것들을 제거하는 작업을 하겠습니다. 우선 호스트와 게스트, 즉, 실제 PC와 가상머신 간의 파일을 공유할 일이 생각보다 많이 있을 수 있습니다. 지금처럼 multi-node 환경의 작업인 경우 각각의 가상머신에 입력되는 파일들이 상이할 가능성이 낮고 그렇다면 여러분의 PC에서 파일 작업을 한 다음 가상머신에서 복사하는 것이 작업 효율성이 좋기 때문이죠. 이러한 이유로 Shared folder(공유 폴더)를 설정하는 편이 좋습니다.
아래 화면에서 처럼 가상머신의
1) settings 에서 공유 폴더를 설정합니다.
2) 공유 폴더 탭에서 추가버튼을 클릭합니다. 폴더에 + 표시가 된 아이콘이 확인되시죠?
3) 폴더 입력 창이 뜨면 적절한 곳에 생성한 shared 폴더위치를 선택하고
4) 마운트 포인트를 설정합니다. 저는 마운트 포인트를 /home/$USER/shared
로 설정하였습니다.
다음으로 전원 설정을 하겠습니다. 전원 설정은 꼭 해두시는 편이 좋습니다. 왜냐하면 우리가 검색 등 조금만 다른 작업을 하면 잠금 화면이 나와서 로그인을 다시 해줘야 하거든요. 보안에는 중요한 설정일 수 있겠으나 테스트 환경이므로 보안은 잠시 미뤄두고 우선 우리의 편의를 위해 잠금화면은 결코 나타나지 않도록 하겠습니다.
아래 화면처럼 설정화면에 진입하겠습니다.
설정창에서 왼편에 전원 설정을 클릭하시고 Screen Blank라는 항목의 설정값을 never로 바꿔주겠습니다(한글로는 뭐라고 쓰여있는지 모르겠네요 ㅠㅜ).
2. Docker Compose는 개요
Docker Compose란?
Docker Compose는 여러 Docker 컨테이너를 정의하고 동시에 실행할 수 있도록 해주는 도구입니다.
보통 복잡한 애플리케이션은 데이터베이스, 캐시 서버, 백엔드, 프론트엔드 등 다양한 서비스로 구성되는데,
이러한 서비스를 하나의 컨테이너로 관리하기 어렵습니다. Docker Compose는 이런 문제를 해결하기 위한 필수 도구입니다.
주요 특징
간편한 멀티 컨테이너 관리
Docker Compose를 사용하면 한 개 이상의 컨테이너를 단일 명령어로 실행, 중지, 재시작할 수 있습니다.
예를 들어, docker-compose up 명령어 한 번으로 웹 애플리케이션, 데이터베이스, 메시지 브로커 등을 동시에 실행 가능합니다.
YAML 파일 기반 구성
Docker Compose는 컨테이너의 구성 정보를 docker-compose.yaml 파일에 선언적으로 정의합니다.
이 파일에서 이미지, 네트워크, 볼륨, 환경 변수 등 다양한 설정을 명시할 수 있어
코드처럼 읽고 수정하기 쉽습니다.
환경 재현성 보장
Docker Compose는 애플리케이션을 실행하기 위해 필요한 모든 의존성과 설정을 한곳에 관리하므로,
로컬 개발 환경, 테스트 환경, 프로덕션 환경에서 동일한 결과를 재현할 수 있습니다.
다양한 기능 지원
- (서비스 간 네트워킹) Compose는 서비스 간 네트워크를 자동으로 생성해 컨테이너 간 통신을 쉽게 처리합니다.
- (볼륨 관리) 데이터 저장소를 컨테이너 외부에 유지해 데이터 유실을 방지합니다.
- (환경 변수 관리) .env 파일을 통해 환경 설정을 유연하게 관리할 수 있습니다.
주된 활용 사례
- (마이크로서비스 환경 구성) 여러 서비스로 구성된 애플리케이션을 효율적으로 관리할 수 있습니다.
- (로컬 개발 환경 구축) 팀원 모두가 동일한 개발 환경에서 작업할 수 있어 환경 차이에 따른 문제를 최소화합니다.
- (CI/CD 파이프라인) 테스트 및 배포 프로세스를 자동화하고 일관성을 유지할 수 있습니다.
Docker Compose의 작동 원리
Docker Compose는 기본적으로 다음 3단계로 작동합니다:
1) 정의(Define)docker-compose.yaml
파일에 애플리케이션의 서비스, 네트워크, 볼륨 등을 정의합니다.
2) 시작(Start)docker-compose up
명령어로 정의한 모든 서비스가 실행됩니다.
3) 종료(Stop)docker-compose down
명령어로 모든 컨테이너를 중지하고, 정의된 네트워크와 볼륨도 제거할 수 있습니다.
Docker Compose는 개발자의 효율적인 작업 환경 구성과 멀티 컨테이너 애플리케이션 관리에 있어
더 이상 빼놓을 수 없는 도구입니다. 😎
3. docker-compose.yaml 살펴보기
그럼 Docker compose에 대해서도 알아보았으니까 우리가 만들고자 하는 시스템의 docker-compose.yaml 파일에 대해 좀 더 자세하게 알아보겠습니다. 이전 글에서 다운로드하였지만 다시 한번 다운로드 경로를 알려드리겠습니다. 혹시 다운로드하지 않으셨다면 적절한 위치에 다운로드하여주시면 되겠습니다. 저는 /home/$USER/works/
경로에 다운로드 받았습니다.
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml'
개요
우리가 다운로드한 docker-compose.yaml 파일은 Apache Airflow를 실행하기 위한 클러스터 구성을 정의한 파일입니다. 각 주요 섹션과 요소에 대해 하나하나 살펴보겠습니다. 자세하게 하고 싶지만 여기서는 간단하게 살펴보겠습니다.
1) 공통 구성 - x-airflow-common
x-airflow-common은 Airflow 컨테이너들의 공통 설정을 재사용하기 위해 정의된 YAML 앵커입니다. YAML 앵커라는 개념은 공통적으로 사용할 설정들을 정의하고 필요한 곳에 간단하게 쓸 수 있도록 하는 개념입니다. 공통 구성 사항은 아래와 같습니다.
- 이미지 설정: apache/airflow:2.10.4 이미지를 기본으로 사용합니다.
- 환경 변수: Airflow의 핵심 설정(executor, database URL, broker URL 등)을 정의합니다.
- 볼륨: 로컬 디렉토리와 컨테이너 내부 디렉토리를 연결해 로그, DAG 파일 등을 공유합니다.
- 의존성: Redis와 Postgres 서비스가 준비되면 시작합니다.
2) 서비스 정의
이제 각각의 서비스에 대해 어떻게 정의되어 있는지 살펴보겠습니다.
postgres
- 역할: Airflow 메타데이터 저장소로 사용됩니다.
- 이미지: postgres:13 사용.
- 환경 변수: Postgres 데이터베이스 접속 정보 설정(USER, PASSWORD, DB).
- 볼륨: 데이터 영속성을 위해 볼륨 마운트.
- 헬스 체크: Postgres가 준비되었는지 pg_isready 명령어로 확인.
redis
- 역할: CeleryExecutor의 메시지 브로커로 사용됩니다.
- 이미지: redis:7.2-bookworm.
- 헬스 체크: redis-cli ping 명령어로 Redis의 상태를 확인.
airflow-webserver
- 역할: Airflow의 사용자 인터페이스(UI)를 제공합니다.
- 포트: 8080으로 외부 접근 가능.
- 헬스 체크: /health 엔드포인트를 주기적으로 확인.
airflow-scheduler
- 역할: DAG 실행과 태스크 스케줄링을 담당합니다.
- 헬스 체크: /health 엔드포인트를 통해 확인.
airflow-worker
- 역할: Celery를 사용하여 태스크를 병렬로 처리합니다.
- 추가 환경 변수: Celery 작업자 종료 신호 처리 설정.
airflow-triggerer
- 역할: Airflow의 트리거 메커니즘을 처리합니다.
airflow-init
- 역할: Airflow 클러스터 초기화 작업을 수행합니다.
- 명령어: 데이터베이스 마이그레이션 및 초기 관리자 계정 생성 등의 작업을 스크립트로 실행.
- 헬스 체크: 자원 부족이나 설정 문제를 경고하는 로직 포함.
airflow-cli
- 역할: 디버깅 및 명령줄 작업을 위한 CLI 컨테이너입니다.
flower (선택적)
- 역할: Celery 작업을 모니터링하는 대시보드 제공합니다.
- 포트: 5555.
- 프로파일: Flower는 별도로 활성화해야 합니다.
3) 볼륨 설정
- postgres-db-volume: Postgres 데이터를 유지하기 위해 사용됩니다.
4) 환경 변수와 커스터마이징
.env 파일을 사용해 변수들을 외부에서 설정 가능(AIRFLOW_IMAGE_NAME, AIRFLOW_UID 등)합니다. 커스터마이징이 필요한 경우 Dockerfile을 확장하거나 환경 변수 및 볼륨 설정을 변경하도록 권장합니다.
docker-compose.yaml 파일 요약
docker-compose.yaml 은 Airflow 클러스터를 빠르고 쉽게 실행할 수 있도록 설계되었습니다.
주요 서비스(Postgres, Redis, Airflow) 간의 의존성을 관리하며, 유연한 환경 변수 설정과 헬스 체크로 안정성을 높였습니다. 이 설정은 로컬 개발 및 테스트 용도로 적합하며, 프로덕션에서는 추가적인 보안 및 최적화가 필요합니다. 따라서, 테스트 용도로 사용해 주시고 프로덕션에 적용하기 위해서는 추가적으로 보안 등의 조치를 취해주셔야 합니다.
결론
이번 포스팅에서는 VirtualBox의 공유 폴더 설정부터 Docker Compose와 docker-compose.yaml 파일의 구조까지 다뤄보았습니다. VirtualBox를 통해 가상화 환경을 구성하면 하드웨어와 독립적인 개발 환경을 만들 수 있고, Docker Compose를 활용하면 여러 컨테이너를 손쉽게 관리하며 협업 및 배포를 더 효율적으로 할 수 있습니다.
개발 환경 설정은 첫걸음이자 가장 중요한 단계입니다. VirtualBox와 Docker Compose를 잘 활용하면 복잡한 설정 과정이 단순화될 뿐만 아니라, 유연하고 재사용 가능한 환경을 구축할 수 있습니다.
이제 여러분도 VirtualBox와 Docker Compose를 사용하여 더 생산적이고 강력한 개발 환경을 만들어 보세요! 🚀
궁금한 점이나 추가로 다루었으면 하는 주제가 있다면 댓글로 남겨 주세요.
도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.
감사합니다! 🙌