-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
126 lines (111 loc) · 3.83 KB
/
Dockerfile
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
FROM python:3.10-slim
# 시스템 패키지 설치
RUN apt-get update && apt-get install -y \
gcc \
libc-dev \
libgomp1 \
curl \
git \
wget \
tzdata \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 타임존 설정
ENV TZ=Asia/Seoul
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 환경 변수 설정
ENV AIRFLOW_HOME=/usr/local/ml4
ENV AIRFLOW_INIT_FLAG=$AIRFLOW_HOME/initialized
ENV PYTHONPATH="${PYTHONPATH}:${AIRFLOW_HOME}"
# Airflow 홈 디렉터리 생성 및 권한 설정
RUN mkdir -p $AIRFLOW_HOME && \
useradd -ms /bin/bash -d $AIRFLOW_HOME airflow && \
chown -R airflow:airflow $AIRFLOW_HOME && \
chmod -R 775 $AIRFLOW_HOME
WORKDIR $AIRFLOW_HOME
# Python 패키지 설치
RUN pip install --no-cache-dir \
apache-airflow==2.8.1 \
apache-airflow-providers-slack \
mlflow==2.8.1 \
pandas \
scikit-learn \
joblib \
tweepy \
numpy \
torch torchvision torchaudio \
transformers \
streamlit \
plotly \
pytorch-lightning \
emoji \
konlpy \
kiwipiepy \
matplotlib \
seaborn \
soynlp \
python-dotenv \
"pendulum>=2.0.0,<3.0.0" \
Flask-Session==0.5.0 \
connexion==2.14.2 \
swagger-ui-bundle==0.0.9 \
apispec==6.3.0
# 디렉토리 생성 및 권한 설정
RUN mkdir -p /usr/local/ml4/dags && \
mkdir -p /usr/local/ml4/logs && \
mkdir -p /usr/local/ml4/mlruns && \
mkdir -p /usr/local/ml4/config && \
mkdir -p /usr/local/ml4/models && \
mkdir -p /usr/local/ml4/data && \
mkdir -p /usr/local/ml4/connections && \
mkdir -p /init-scripts && \
mkdir -p /usr/local/test && \
touch /usr/local/ml4/logs/airflow.log && \
touch /usr/local/ml4/logs/mlflow.log && \
touch /usr/local/ml4/logs/streamlit.log && \
chown -R airflow:airflow /usr/local/ml4/dags && \
chown -R airflow:airflow /usr/local/ml4/logs && \
chown -R airflow:airflow /usr/local/ml4/mlruns && \
chown -R airflow:airflow /usr/local/ml4/config && \
chown -R airflow:airflow /usr/local/ml4/models && \
chown -R airflow:airflow /usr/local/ml4/data && \
chown -R airflow:airflow /usr/local/ml4/connections && \
chmod -R 777 /usr/local/ml4/dags && \
chmod -R 777 /usr/local/ml4/logs && \
chmod -R 777 /usr/local/ml4/mlruns && \
chmod -R 777 /usr/local/ml4/config && \
chmod -R 777 /usr/local/ml4/models && \
chmod -R 777 /usr/local/ml4/data && \
chmod -R 777 /usr/local/ml4/connections && \
chmod -R 777 /init-scripts && \
chown -R airflow:airflow /usr/local/test && \
chmod -R 777 /usr/local/test && \
chmod 666 /usr/local/ml4/logs/airflow.log && \
chmod 666 /usr/local/ml4/logs/mlflow.log && \
chmod 666 /usr/local/ml4/logs/streamlit.log
# 로그 파일 생성 및 권한 설정 부분 제거 (위에서 이미 처리됨)
# 포트 노출
EXPOSE 8080 5050 8501
# .env 파일 복사 및 권한 설정
COPY .env $AIRFLOW_HOME/.env
RUN chown airflow:airflow $AIRFLOW_HOME/.env && \
chmod 600 $AIRFLOW_HOME/.env
# Slack Webhook 설정 스크립트 생성
RUN echo '#!/bin/bash\n\
airflow connections add "slack_webhook" \\\n\
--conn-type "slack_webhook" \\\n\
--conn-host "https://hooks.slack.com/services" \\\n\
--conn-password "${SLACK_WEBHOOK_TOKEN}"' > $AIRFLOW_HOME/connections/setup_slack.sh && \
chmod +x $AIRFLOW_HOME/connections/setup_slack.sh
# 초기화 스크립트 복사 및 권한 설정
COPY init-scripts/init.sh /init-scripts/init.sh
RUN chown airflow:airflow /init-scripts/init.sh && \
chmod +x /init-scripts/init.sh && \
sed -i 's/\r$//' /init-scripts/init.sh
# 소스 코드 복사 및 권한 설정
COPY src/ $AIRFLOW_HOME/src/
COPY dags/ $AIRFLOW_HOME/dags/
RUN chown -R airflow:airflow $AIRFLOW_HOME/src $AIRFLOW_HOME/dags
# airflow 사용자로 전환
USER airflow
CMD ["/init-scripts/init.sh"]