데이터 엔지니어 이것저것

DockerOperator 본문

오픈소스/airflow

DockerOperator

pastime 2023. 9. 19. 23:06
728x90

KubernetesPodOperator 작업을 하기위해 로컬에서 테스트할수있는 방법들을 찾다가 도커 오퍼레이터를 찾았다.

 

로컬 환경에서 docker-compose 및 celery Executor 환경에서도 도커 이미지를 올리고 내리면서서 테스트 할수있을것같다.

 

from datetime import datetime
from airflow import DAG
from airflow.providers.docker.operators.docker import DockerOperator

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2023, 1, 1),
}

dag = DAG(
    'run_docker_image_example',
    default_args=default_args,
    schedule_interval='@daily',
    catchup=False,
)

run_hello_world = DockerOperator(
    task_id='run_hello_world',
    docker_url='tcp://docker-proxy:2375',
    image='hello-world-python:latest',
    api_version='auto',
    auto_remove=True,
    dag=dag,
)

run_hello_world

쉽게 로컬에 있는 hello-word-python이라는 도커이미지를 실행하는 코드이다.

여기서 봐야할점은 docker_url의 주소이다

 

워커에서 바로 실행을 하면 권한이 없다고 뜬다

docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', PermissionError(13, 'Permission denied'))

 

구글링 하다보면 권한을 주라고 하는데, 테스트 하는데 여러가지 권한까지 부여하고 하기엔 부담스럽다

 

  docker-proxy:
    image: bobrik/socat
    command: "TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock"
    ports:
      - "2376:2375"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

docker-compose의 서비스에 해당 도커 이미지를 추가하여 우회하게 한다.

 

몇번의 시도 끝에 해결

728x90

'오픈소스 > airflow' 카테고리의 다른 글

airflow parallelism  (0) 2023.10.16
KubernetesPodOperator  (0) 2023.10.15
Airflow DAG간 종속성  (0) 2022.05.15
Airflow DAG 분리하기  (0) 2022.02.05
airflow vs argo  (0) 2021.12.27