Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: README 문서 최신화 #190

Merged
merged 1 commit into from
Feb 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion 01-batch-serving(airflow)/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
- Airflow를 처음 학습할 때는 Local 환경에서 DAG 작성에 집중하시는 것을 추천합니다
- 그 후, 익숙해지면 Docker 환경에서 설정하고 DAG 작성을 해보시는 것을 추천합니다
- Docker 환경을 설정하는 방법은 [Docker README](https://github.com/zzsza/Boostcamp-AI-Tech-Product-Serving/blob/main/01-batch-serving(airflow)/docker-readme.md)에 작성해두었습니다
- Docker 환경에선 VS Code Server를 활용하는 것도 추가했으니, 이 부분도 꼭 보시는 것을 추천드립니다

## 설치
- 가상 환경 설정
Expand Down
225 changes: 10 additions & 215 deletions 01-batch-serving(airflow)/docker-readme.md
Original file line number Diff line number Diff line change
@@ -1,228 +1,23 @@
# Airflow Docker
- [Docker Install](https://docs.docker.com/engine/install/)을 참고해 Docker Engine을 설치합니다
- 만약 윈도우를 사용하고 있다면, WSL을 설치한 후, [WSL 2에서 Docker 원격 컨테이너 시작](https://learn.microsoft.com/ko-kr/windows/wsl/tutorials/wsl-containers) 글을 참고해 환경 설정을 해주세요

## 실행 방법
- Docker 이미지를 직접 실행하는 방법과 Docker Compose를 사용하는 방법 2가지를 다룹니다

## Docker Compose를 사용하는 방법
- [docker-compose.yml](https://github.com/zzsza/Boostcamp-AI-Tech-Product-Serving/blob/main/01-batch-serving(airflow)/docker-compose.yml) 파일을 확인해주세요

### 1) Docker 이미지 직접 실행하는 방법

#### Docker Network 생성하기

Airflow의 모든 컴포넌트가 Docker 컨테이너로 배포될텐데, 이 컨테이너들간의 통신할 네트워크를 먼저 생성합니다.

다음 명령어로 Docker Network를 생성합니다.

```bash
$ docker network create airflow
```

잘 생성되었는지 다음처럼 확인해볼 수 있습니다.

```bash
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
b8f5eb31452e airflow bridge local
```

#### Meta Database 사용하기
Meta Database로 PostgreSQL를 사용하겠습니다.

Postgres 컨테이너에 Volume 마운트할 디렉토리를 다음처럼 만들어둡니다.

```bash
$ mkdir data
```

다음 명령어로 Postgres 컨테이너를 실행합니다.
아래 명령어로 Docker Compose를 실행합니다. (처음엔 `-d` 옵션을 주지 않고 실행해보고, 정상적으로 확인된다면 그 후에 `-d` 옵션을 사용하는 것을 추천합니다)

```bash
$ docker run \
--name airflow-database \
-d \
--network airflow \
-v $(pwd)/data:/var/lib/postgresql/data \
-e POSTGRES_USER=airflow \
-e POSTGRES_PASSWORD=!boostcamp-aitech! \
postgres:13
cd boostcamp-ai-tech-product-serving/01-batch-serving(airflow)
docker-compose up -d
```

컨테이너가 제대로 실행되었는지 다음처럼 확인할 수 있습니다.

```bash
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0b60f349279 postgres:13 "docker-entrypoint.s…" 3 minutes ago Up About a minute 5432/tcp airflow-database
```

#### Meta Database 초기화 하기

다음 명령어로 Meta Database를 초기화합니다.
실행한 모든 컨테이너를 확인하고 싶다면 다음 명령어를 실행합니다.

```bash
$ docker run \
--name airflow-init \
--network airflow \
--entrypoint /bin/bash \
-e AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:1234@airflow-database:5432/airflow \
apache/airflow:2.2.3-python3.8 \
-c " \
airflow db init && \
airflow users create \
--username admin \
--password !boostcamp-aitech! \
--firstname seongyun \
--lastname byeon \
--role Admin \
--email snugyun01@gmail.com \
"
docker-compose ps
```

#### Scheduler 실행하기

다음 명령어로 Scheduler를 실행합니다

```bash
$ docker run \
--name airflow-scheduler \
--network airflow \
-d \
-e AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:1234@airflow-database:5432/airflow \
-e AIRFLOW__CORE__EXECUTOR=LocalExecutor \
-v $PWD/dags:/opt/airflow/dags \
apache/airflow:2.2.3-python3.8 \
airflow scheduler
```

컨테이너가 제대로 실행되었는지 다음처럼 확인할 수 있습니다.

```bash
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2ac94182d39 apache/airflow:2.2.3-python3.8 "/usr/bin/dumb-init …" 45 seconds ago Up 44 seconds 8080/tcp airflow-scheduler
...
```

#### Webserver 실행하기

다음 명령어로 Webserver를 실행합니다.

```bash
$ docker run \
--name airflow-webserver \
--network airflow \
-d \
-p 8080:8080 \
-e AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:1234@airflow-database:5432/airflow \
-v $PWD/dags:/opt/airflow/dags \
apache/airflow:2.2.3-python3.8 \
airflow webserver
```

```bash
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8dd306789f6 apache/airflow:2.2.3-python3.8 "/usr/bin/dumb-init …" 45 seconds ago Up 41 seconds 0.0.0.0:8080->8080/tcp airflow-webserver...
...
```

#### Code Server 실행하기

Code Server는 VSCode의 Web Browser 버전입니다.
서버에 직접 접속하여 DAG 파일을 작성하지 않고, 이 Code Server를 이용하여 작성할 수 있도록 해봅시다.

다음처럼 Docker 컨테이너로 실행합니다. 이 때 `dags/` 디렉토리를 마운트합니다.

```bash
$ docker run -it --name code-server \
--name airflow-code-server \
-d \
-v "$(pwd)/dags:/home/coder/project" \
-p 8888:8888 \
-e PASSWORD=!boostcamp-aitech! \
-e HOST=0.0.0.0 \
-e PORT=8888 \
codercom/code-server:4.0.2
```

컨테이너가 제대로 실행되었는지 다음처럼 확인할 수 있습니다.

```bash
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88608ae21d39 codercom/code-server:latest "/usr/bin/entrypoint…" 7 seconds ago Up 6 seconds 8080/tcp, 0.0.0.0:8888->8888/tcp airflow-code-server
```

#### 실행한 Docker 컨테이너 확인

실행한 모든 컨테이너를 확인해보면 다음과 같습니다.

```bash
$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e8dd306789f6 apache/airflow:2.2.3-python3.8 "/usr/bin/dumb-init …" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp airflow-webserver
bb7e13d1f4c5 apache/airflow:2.2.3-python3.8 "/usr/bin/dumb-init …" 4 minutes ago Up 4 minutes 8080/tcp airflow-scheduler
42736f3bf287 postgres:13 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 5432/tcp airflow-database
88608ae21d39 codercom/code-server:latest "/usr/bin/entrypoint…" 7 seconds ago Up 6 seconds 8080/tcp, 0.0.0.0:8888->8888/tcp airflow-code-server
```


<br />

---

### 2) Docker Compose를 사용하는 방법
- [docker-compose.yml](https://github.com/zzsza/Boostcamp-AI-Tech-Product-Serving/blob/main/part4/02-airflow/docker-compose.yml) 파일을 확인해주세요


아래 명령어로 Docker Compose를 실행합니다.

```bash
$ docker-compose up
```

실행한 모든 컨테이너를 확인해보면 다음과 같습니다.

```bash
$ docker-compose ps

Name Command State Ports
------------------------------------------------------------------------------------
airflow-code-server /usr/bin/entrypoint.sh --b ... Up 8080/tcp, 0.0.0.0:8888->8888/tcp
airflow-database docker-entrypoint.sh postgres Up 5432/tcp
airflow-init /bin/bash -c \ Exit 0
airflow ...
airflow-scheduler /usr/bin/dumb-init -- /ent ... Up 8080/tcp
airflow-webserver /usr/bin/dumb-init -- /ent ... Up 0.0.0.0:8080->8080/tcp
```


<br />

---



### Airflow Webserver 접속하기

브라우저에서 `http://localhost:8080` 에 접속하면 다음처럼 Airflow Webserver 화면을 볼 수 있습니다.

![airflow-webserver](./assets/images/airflow-webserver.png)

초기 계정 정보는 `admin` / `1234` 입니다.

### Code Server 접속하기

브라우저에서 `http://localhost:8888` 에 접속하면 다음처럼 Code Server 화면을 볼 수 있습니다.

![code-server](./assets/images/code-server.png)

초기 비밀번호는 `1234` 입니다.

`dags/` 폴더에서 Airflow DAG 파일을 생성하면 Airflow Webserver에서 확인할 수 있습니다
- Localhost:8080으로 접속한 후, Airflow 화면이 보이는지 확인합니다

만약 Code Server를 사용하지 않는다면, `$AIRFLOW_HOME/dags`에 파일을 옮기면 Airflow Scheduler가 파일을 파싱해 Airflow Webserver에서 확인할 수 있습니다
4 changes: 2 additions & 2 deletions 03-docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
## 도커 이미지 빌드
```shell
docker build -t <빌드할 이미지 이름:태그 이름> .
# ex. docker build -t 02-docker:latest .
# ex. docker build -t docker-test .
```

## 도커 이미지 실행
```shell
docker run [-p <접근할 포트>:<컨테이너 포트>] [-v <로컬 마운트 경로>:<컨테이너 마운트 경로>] <이미지 이름>
# ex. docker run -v $(pwd):/app 02-docker:latest
# ex. docker run -v $(pwd):/app docker-test:latest
```
자세한 옵션들은 [이 링크](https://docs.docker.com/engine/reference/run/) 를 참고해 주세요.

Expand Down
Loading