Python 및 Flask로 첫 번째 웹 앱 도커화
도커 아키텍처
먼저 세 개의 컨테이너로 도커 애플리케이션을 빌드해야 합니다.
ElasticSearch 및 Kibana의 경우 7.8.0 버전을 사용하여 DockerHub에서 사전 빌드된 이미지를 사용합니다. 웹 애플리케이션은 redis-alpine 이미지를 사용합니다.
Note: The reason why using alpine, is because this alternative is smaller and more resource efficient than traditional GNU/Linux distributions (such as Ubuntu)
필수 파일 및 구성
GitLab에서 필요한 자료를 얻을 수 있습니다. 아래 이미지는 저장소를 복제하여 얻을 수 있는 다양한 파일을 보여줍니다.
Docker-compose.yml 구조
docker-compose.yml
파일은 이전 섹션에서 설명한 구조를 보여줍니다.
version: '3'
services:
web:
build: .
ports:
- 5000:5000
networks:
- elastic
redis:
image: "redis:alpine"
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.8.0
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: http://es01:9200
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
docker-compose.yml
에 명시된 주요 태그를 살펴보자.
version: '3'
services:
web:
build: .
ports:
- 5000:5000
networks:
- elastic
redis:
image: "redis:alpine"
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.8.0
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: http://es01:9200
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
ELASTICSEARCH_URL
및 ELASTICSEARCH_HOSTS
를 정의해야 합니다. Dockerfile 구성
Dockerfile
에는 Elasticsearch 클러스터에서 데이터를 추출 및 저장하고 동시에 이전 시각화를 위해 Kibana에서 가져오는impact_dashboard.ndjson
Python 스크립트와 연결하도록 웹 애플리케이션을 구성하는 데 필요한 단계가 있습니다.알파인 배포에서 실행되어 앱을 실행하는 데 필요한 폴더를 복사합니다. 또한
requirements.txt
덕분에 Python 스크립트에 필요한 모든 종속성을 추가할 수 있습니다.FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP jitsi-data.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache git
RUN apk add --no-cache tk-dev
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
COPY mapping.json mapping.json
COPY templates templates
COPY impact_dashboard.ndjson impact_dashboard.ndjson
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
컨테이너를 시작하는 방법
애플리케이션을 시작하려면(docker 및 docker-compose가 이전에 설치됨) 터미널을 열고 다음 명령을 실행합니다.
$ docker-compose up
이렇게 하면 dockerfile에 명시된 다양한 명령이 시작되고 필요한 도커 이미지가 다운로드됩니다. 완료되면 Elasticsearch(localhost:9200) 및 Kibana(localhost:5601)가 성공적으로 실행되고 있는지 확인할 수 있습니다.
이제 포트5000
를 사용하여 Python Flask 애플리케이션 웹 앱이 있는 곳으로 이동할 시간입니다.
start button
를 클릭하면 Jitsi git 데이터에서 데이터 추출이 초기화되고(자세한 내용은 jitsi-data.py
확인) 해당 데이터가 ElasticSearch에 저장됩니다. 마지막으로 Kibana로 가져오기impact_dashboard.ndjson
를 수행하여 대화식으로 데이터를 사용할 수 있습니다.
프로세스가 완료되면 브라우저에 다음 메시지가 표시됩니다.
물론 Elasticsearch 색인과 Kibana 대시보드가 인스턴스에 성공적으로 추가되었는지 확인할 수 있습니다.
기본적으로 시간 필터는 마지막 15분으로 설정됩니다. 시간 선택기를 사용하여 시간 필터를 변경하거나 페이지 상단의 히스토그램에서 특정 시간 간격 또는 시간 범위를 선택할 수 있습니다.
et voilà 이제 팬데믹이 Jitsi 소프트웨어 개발 활동에 어떤 영향을 미칠 수 있는지 분석하기 위해 멋진 대시보드가 실행되고 있습니다.
보너스 포인트: Docker 허브에 Docker 이미지 업로드
Docker Hub 계정이 있으면 dockerfile
가 있는 이미지를 빌드할 수 있습니다. 다음을 입력하십시오.
$ docker build -t dockerhubID/DockerHubreponame:imagetag .
그런 다음 Docker Hub 리포지토리에 이미지를 업로드합니다(Docker Hub UI를 사용하여 리포지토리를 생성할 수 있음).
$ sudo docker push dockerhubID/DockerHubreponame:imagetag
이미지가 Docker Hub에 업로드되면 모든 사용자가 다음 docker-compose.yml로 앱을 사용하고 실행할 수 있습니다.
version: '3'
services:
web:
image: daviddp92/jitsi-data-extraction:1.0.0
ports:
- 5000:5000
networks:
- elastic
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.8.0
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: http://es01:9200
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
마무리 생각
docker-compose를 사용하여 Python 기술과 Flask 프레임워크로 웹 앱을 dockerize하는 방법을 배웠습니다. 또한 Docker Hub 이미지를 사용하여 애플리케이션을 사용하고 실행하는 방법도 살펴보았습니다.
이 프로젝트에 대해 어떻게 생각하세요? 무엇을 개선해야 합니까? 피드백 환영합니다 :)
Reference
이 문제에 관하여(Python 및 Flask로 첫 번째 웹 앱 도커화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/anajsana95/dockerizing-your-first-web-app-with-python-and-flask-2fn2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ docker-compose up
Docker Hub 계정이 있으면
dockerfile
가 있는 이미지를 빌드할 수 있습니다. 다음을 입력하십시오.$ docker build -t dockerhubID/DockerHubreponame:imagetag .
그런 다음 Docker Hub 리포지토리에 이미지를 업로드합니다(Docker Hub UI를 사용하여 리포지토리를 생성할 수 있음).
$ sudo docker push dockerhubID/DockerHubreponame:imagetag
이미지가 Docker Hub에 업로드되면 모든 사용자가 다음 docker-compose.yml로 앱을 사용하고 실행할 수 있습니다.
version: '3'
services:
web:
image: daviddp92/jitsi-data-extraction:1.0.0
ports:
- 5000:5000
networks:
- elastic
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.8.0
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://es01:9200
ELASTICSEARCH_HOSTS: http://es01:9200
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
마무리 생각
docker-compose를 사용하여 Python 기술과 Flask 프레임워크로 웹 앱을 dockerize하는 방법을 배웠습니다. 또한 Docker Hub 이미지를 사용하여 애플리케이션을 사용하고 실행하는 방법도 살펴보았습니다.
이 프로젝트에 대해 어떻게 생각하세요? 무엇을 개선해야 합니까? 피드백 환영합니다 :)
Reference
이 문제에 관하여(Python 및 Flask로 첫 번째 웹 앱 도커화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/anajsana95/dockerizing-your-first-web-app-with-python-and-flask-2fn2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)