Skip to content

Commit

Permalink
docs: README 문서 최신화
Browse files Browse the repository at this point in the history
  • Loading branch information
zzsza committed Feb 10, 2024
1 parent f67a323 commit 14637de
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 218 deletions.
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 [email protected] \
"
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

0 comments on commit 14637de

Please sign in to comment.