본문 바로가기

이항 주가 데이터를 매일 DB 로 수집

Docker를 사용한 Dash 생성

Dash와 Docker을 사용해 웹에 띄워보려한다. Python을 사용해 웹에 대시보드를 구축하는 최소한의 환경을 써보려 한다. 이를 계기로 차차, Dash를 구성하는 시각화와 DB를 연동하고 매일 갱신되는 블로그를 적을 계획이다.

 

- 이 글의 카테고리인 어느 주식(저와같은 경우는 미래기술 드론에 관심이 있어서 이항 이라는 회사 주식) 을 DB를 연동하고 매일 갱신하는것이 목표 이다.

- 도커(Docker)를 처음 듣는분들은 간략한 개념과 용어를 정리한 블로그가 있으니 한번 보면 좋을 것 같다.

    - 미래를 위한 취미_도커(Docker) 란 무엇인가? - 쉬운 개념 및 이해

 

우선,

 

AWS_EC2 처음 접하는 분들은 아래 링크를 참조

- 미래를 위한 취미_aws ec2 서버 구축

- 미래를 위한 취미_AWS-UBUNTU 환경에서 Jupyter notebook 설치

 

 

Step1.

AWS_EC2 환경 구성 (아래와 같은 환경은 만들어 놓아야 한다.)

 

  • 운영체제: Ubuntu 20.04
  • 인스턴스 유형: t2.large
  • Port 범위
    • 22
    • 8050 (Dash)
    • 8888 (Jupyter notebook)

 

 AWS EC2 dashboard에 가서 [보안그룹]의 [인바운드 규칙]을 편집해주도록 하자.

8050 포트 규칙 추가 및 사용자 지정 (위치 무관으로 하기_웹배포의 목적)
AWS 대시보드 中

AWS_EC2 환경 구축이 되었다면, 

 

Step2.

Dash 설치

우선 Dash를 설치 해주자. 다음의 코드를 사용하여 dash 모듈을 설치 해준다.

 

$ pip3 install dash

Step2_1.

(test용: 디렉토리생성, .py 파일 생성)

우선 , 리눅스창에서 test용 디렉토리를 생성해보자. [Docker의 Image 이름 명]

 

mkdir 명령어는 make directory의 약자로써 디렉토리를 생성할 때 사용하는 명령어 [아래 코드 참고]

$ mkdir dash

만들고 ll을 실행하면, dash 디렉토리가 생성 된 것을 확인 할 수 있다.

 

dash 디렉토리 생성 확인

그다음,

 

(1) dash 디렉토리로 들어가서, (2) aap.py 를만들고 , (3) vi편집기로 들어가서, (4) 그안에 간략한 시각화 코드를 넣기

 

 $ cd dash/ # dash디렉토리안으로 이동
 
 $ touch app.py # touch 명령어로 app.py 라는 파일 생성
 $ ll # 파일생성 확인
 $ vi app.py # vi 편집기로 들어가기  (간단한 시각화 넣기 위해)

 

 

Step3.

APP

이제 test를 위해 간단하게 dash app을 만들어주자. app.py라는 파일을  했고, vi 편집기 명령어로 편집상태로 들어갔을 것이다. 그 상태에서  'a' 를 눌러 [insert mode]로 변경한 다음 아래 코드를 넣어주자. (간략한 시각화 코드)

 

(그 후에는 'esc 키' -> ':' -> wq (저장하고 편집모드 나가기.) 을 차례대로 키보드로 누르면 된다.)

 

# -*- coding: utf-8 -*-
# Run this app with `python app.py` and
# visit http://127.0.0.1:8050/ in your web browser.
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import pandas as pd

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
# assume you have a "long-form" data frame
# see https://plotly.com/python/px-arguments/ for more options

df = pd.DataFrame({ 
	"Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"], 
	"Amount": [4, 1, 2, 2, 4, 5], 
	"City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"] })

fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")

app.layout = html.Div(children=[ 
    html.H1(children='Hello Dash'),
    html.Div(children=''' Dash: A web application framework for Python. '''), 
    dcc.Graph( id='example-graph', figure=fig ) ])
  
if __name__ == '__main__':
    app.run_server(host='0.0.0.0', port=8050, debug=True)

 

(vi편집기 insert mode) 위 코드를 그대로 app.py 파일에 vi편집기를 이용해 위 코드를 적었다.

 

Step4.

APP 실행 

위에서 만들어 놓은 app.py를 통해 실행을 통해 잘 만들어져있는지 테스트를 해보자. 실행을 해주면 다음과 같은 메시지를 확인할 수 있다.(사진1참고) 이를 확인하기 위해서는 {EC2 IP}:8050을 웹에 넣어 주면 된다.(사진참고)

 

$ python3 app.py 

사진 1

 

사진 2

Step5.

Docker 설치

Ubuntu에서는 다음의 코드를 통해 Docker 설치를 위한 기반을 다져준다. 아래코드를 순서대로 하자.

 

$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
$ sudo apt update
$ apt-cache policy docker-ce

기반은 다지고, Docker 설치를 하자. (아래 코드 참고)

$ sudo apt install docker-ce

설치 확인 방법 (아래 코드 참고)

$ docker -v

버전이 나오면서 설치가 잘 된것을 확인 할 수 있다.

 

Step6.

Docker 시작

(아래 코드 참고)

$ sudo service docker start

 

Step7.

사용자 추가

docker에 사용자를 추가하자. 다음의 코드에서 {username} 부분에 넣어주면 된다. 이때 username은 Ubuntu의 계정명이다. 이렇게 계정을 추가해주고 나면 재부팅을 꼭 해주어야 한다. (AWS_EC2 재부팅)

 

$ sudo usermod -aG docker {username}

$ sudo usermod -aG docker ubnutu # 저의 경우는 username이 ubuntu로 되어있습니다. (예시)

Step8.

Dockerfile 생성

이제 Dash를 실행할 Dockerfile을 만들어주자. touch 명령어로 dockerfile를 만들고 vi편집기로 내부에 들어가가자 (Step2-1부분에서 했던 거와 하는 방식은 비슷합니다.)

(Dash 디렉토리로 이동한 후..)

$ touch Dockerfile
$ vi Dockerfile

Step9.

requirements.txt 파일 생성

Docker를 생성시 사용할 python 모듈을 설치 하기 위해 다음과 같이 requirements.txt를 생성 하자. 리눅스에서 freeze를 통해 requirements.txt를 받아오게 되면 시스템 모듈까지 한꺼번에 가져오게 되어 충돌이 생기니 따로 생성해주자.

 

touch명령어로 생성 후, vi 편집기로 들어가서 : dash 와 pandas 만 적어 둡니다. (사용할 모듈이 이 두개 이기때문에)

 

$ touch requirements.txt
$ vi requirements.txt

Step10.

Dockerfile 작성

이제 vi편집기로 dockerfile에 들어왔으니 dash 실행을 위한 코드를 준비하기. (아래 코드 참고)

 

FROM python:3.6.9

COPY ./ ./

RUN pip3 install -r requirements.txt

WORKDIR /

EXPOSE 8050

CMD ["python3", "./app.py"]

vi 편집기에서 insertmode로 변경 후 위에 코드를 그대로 적어 둡니다.  띄어쓰기도 주의합니다.

 

Step11.

Image 생성

이제 Docker를 위한 이미지를 생성해보자. 중요한건 Dockerfile이 있는 경로로 간다. (이미지 생성코드 아래 참고)

docker build -t dash . # 저는 이미지 이름은 dasj, 경로로 들어와서 작업을 했기 때문에 '.'        



docker build -t {image name} {dockerfile path}

Dockerfile이 있는 경로로 들어간 후, 이미지 생성 코드를 사용해서 만들자.

 

Step12.

Image 실행

docker 이미지를 생성 했으면 이를 실행 해보자. 이미지 실행 코드는 다음과 같다. (아래 코드 참고)

 

$ docker run -p 8050:8050 {image name} # {image name}은 직전에 만들어두었던 image name이다.
                                       # 저는 이미지이름을 dash로 했습니다. 

$ docker run -p 8050:8050 dash         

Step13.

생성된 Dash앱 확인

 

생성된 앱을 확인 하기 위해서는 앱에 ’{host}:8050’을 입력해주면 된다.

 

{host}:8050 입력하면 생성된 Dash앱을 확인 할 수 있다.

 

Dash앱 확인 . 성공!

Step14.

CONTAINER 종료

 

서버를 내려야할 필요가 있다. 그럴때는 다음의 코드를 사용한다. 그럼 다음 사진과같은 메시지가 나오는걸 확인할 수 있다.

$ docker container list

list로 CONTAINER ID or NAME

 

 

이제 이곳에서 알아야할 정보가 ‘CONTAINER ID’ 또는 ’NAME’인데 다음의 코드를 통해 컨테이너를 종료 해주자.

$ docker container stop {NAME}
$ docker container stop {CONTAINER ID}

 

위에 코드로 잘 종료되었음을 확인 했다.

Rererence 

- 미완성의신:[Python] Docker를 사용한 Dash 웹앱 생성

- AWS EC2에 Docker 설치 및 Dockerfile로 웹서버 구동시키기