iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
0
Elastic Stack on Cloud

親愛的,我把ElasticSearch上雲了系列 第 23

Day 23 Docker-Compose nginx + flask container with filebeat

Day 23 Docker-Compose nginx + flask container with filebeat

前言

昨天我們講解了其中一種架構,也就是將單純的網頁放入nginx container,並將log往外拋,並且透過filebeat上傳到elastic cloud。今天我們同樣會先採用這個架構,講解透過docker-compose,去架構目前比較常見的某個語言後端(java-spring, python-flask,django)之類的,外面套上一個nginx,並且一樣將log往外拋,讓filebeat去上傳log到cloud上。

docker-compose

這邊講一下,docker-compose雖然不是本次分享重點,但為了讓大家比較知道在幹嘛,所以簡單介紹一下。

docker-compose,是docker將服務容器化後,有很多小的容器後,將彼此串聯在同一個網路架構下的一個做法,透過docker-compose,可以設置共享的volume以及網路架構,讓container之間可以有相依性以及溝通管道。因此可以想像成,透過compose,一次架構多個container,並定義彼此之間的關係。

docker-compose,通常是透過yaml檔案去設置,裡面會撰寫到要開啟幾個container,每一個container的設定,例如採用的DockerFile、volume,以及port相關設定。而他也可以定義彼此之間container的相依,也就是當要啟動compose的時候,不同container的先後順序;這部分可以想像為,有些服務是某個服務的前置,如果沒有定義可能無法有效的啟動。

flask

flask是python的後端框架之一,主打的是輕量方便,因此透過一個py檔,就能定義好每個endpoint的view,也能夠在同一個script中建構model。而執行一個簡單flask py檔,可以直接透過python simple的HTTPSERVER去接收request,但這基本上若在production環境會不夠有效率,因此通常會通過uwsgi去作為接收reqeust並triger python view的作法。

目標

前面講解完我們這次的兩個主角,這邊其實大家可以理解為,flask可以替換為任何的前後端框架;nginx也能夠替換為apache等等,主軸就是模擬一個實際在運作的container架構,我們能夠有效地收集log。

步驟

一、首先我們先將資料夾架構定義出來
其中包含: flask、nginx這兩個資料夾,裡面各會包含flask跟nginx的DockerFile。

首先是nginx的dockerfile,主要很簡單,就是將預設的conf檔案刪除 並且複製我們放在資料夾中的nginx.conf就行

nginx.conf

server {
    listen 80;
    # server_name 0.0.0.0; 
    location / {
        include uwsgi_params;
        uwsgi_pass flask:8080;
    }
}

nginx DockerFile

# Use the Nginx image
FROM nginx

# Remove the default nginx.conf
RUN rm /etc/nginx/conf.d/default.conf

# Replace with our own nginx.conf
COPY nginx.conf /etc/nginx/conf.d/

flask DockerFile

FROM python:3.7.2-stretch
WORKDIR /app
ADD . /app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
CMD ["uwsgi", "wsgi.ini"]

YAML檔案

version: '3.3'

services:

  flask:
    build: ./flask
    container_name: template_flask
    # restart: always
    environment:
      - APP_NAME=FlaskApp
    expose:
      - 8080


  nginx:
    build: ./nginx
    volumes:
      - "/c/Users/user/flask-nginx-elk-demo/nginx-logs:/var/log/nginx"
    container_name: template_nginx
    # restart: always
    ports:
      - "80:80"

    depends_on:
      - flask

上一篇
Day 22 Docker nginx container with filebeat
下一篇
Day 24 Docker-Compose nginx + flask container with filebeat-2
系列文
親愛的,我把ElasticSearch上雲了30

尚未有邦友留言

立即登入留言