로털 DB와 연결을 해보자
postgres:
image: postgres:9.6
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
- POSTGRES_HOST_AUTH_METHOD=trust
logging:
options:
max-size: 10m
max-file: "3"
ports:
- "5432:5432"
docker-compose 파일은 위와 같다
근데 위와 같은 에러가 발생하였다.
일단 컨테이너를 지웠다가 다시 진행하도록 해보자
docker-compose를 통해 옵션을 설정하여 컨테이너가 만들어졌을 경우에 다시 킬때마다 이미 만들어놓은 컨테이너를 실행하기 때문에 문제가 발생한다.
성공!
connection 자동화
db에 연결이 안된다 → postgre가 아닌 다른 db와 연결이 된듯 하다
airflow.cfg
이 부분이 문제인 것으로 보인다.
이렇게 변경하였다.
'\r' 에러가 발생하였다 → 어딘가 LF 형식이 아닌것 같다
entry.sh 파일에서 문제가 발생하였다 → 파일형식을 바꿔준다.
이번엔 모듈이 없다고 한다.
sqlAlchemy라는 sql엔진이 없다고 한다.
Docker
쉘스크립트를 살펴보자
도커 컴포즈를 하여 컨테이너를 실행할 때, 자동으로 postgres로 명식된 컨테이너와 연결이 되는 모습이다.
또한 webserver라는 인자가 들어왔을 때, 자동으로 initdb을 해주는 모습이다.
connection 자동화2
도커가 실행중에 쉘에서 export
로 설정한 모든 환경 변수들은 쉘 스크립트가 끝나면 없어지게 된다.
다시 도커에서 airflow 서버로 돌아가서 airflow initdb
를 한다면 설정된 환경 변수가 없기 때문에 기존에 연결된 SQLite3로 연결이 된다.
그렇다면 왜? airflow connections ...
는 작동을 안하는 것일까?
환경변수가 없기 때문이다. 쉘이 끝나면 쉘 스크립트 안에서 실행하는데 사용하였던 환경변수가 없게 되고, 그 뜻은 커넥션을 해야할 위치(DB)를 찾을 수 없게 되는 것이 아닌가?
⇒ 쉘 스크립트 안에 커넥션 커맨드를 추가하여야 한다!!
환경이 자동으로 등록 되었다!
로컬 배치서버 구조
도커 서버 배쉬/파이썬 실행
docker run --rm -ti <container-name> bash
https://www.daleseo.com/docker-run/
—rm
은 일회성으로 사용할때 많이 사용된다.-it
는 컨테이너를 종료하지않고 계속해서 컨테이너로 CLI를 전달하기 위함
shell 환경을 실행할때 유용하게 쓰일 수 있다.연결 에러가 생성된다.
일단 pgAdmin에서는 들어가지긴 한다.
컨테이너 환경에서 돌아가는 로컬과 내 컴퓨터 환경의 로컬을 비교해야한다.
설정 IP: 127.0.0.1 -? localhost 즉 내 컴퓨터로 들어가는 상황에서의 주소에 해당한다.
컨테이너는 내 컴퓨터인가? → 내컴퓨터 안에서 돌아가는 새로운 또하나의 컴퓨터라고 볼 수 있을 것이다. → 위의 localhost가 적용이 되지 않을 수 있다.
실험
ipconfig를 통해 나의 IP를 살펴보도록 하자 → IPv4의 주소로 들어가야 범용적인 나의 컴퓨터 주소로 들어갈 수 있게된다.
성공하였다!!!