美文网首页MySQL on Docker
How to setup multi-containers se

How to setup multi-containers se

作者: 凸大愚若智凸 | 来源:发表于2018-05-15 15:31 被阅读0次

Before we go

docker-compose is the only way to setup a multi-containers service.
Here we're trying to setup a simple web service using a backend database redis. And to make it simpler, we're gonna just use flask to build a web service.

Environment

  • Ubuntu 18.04 (based on Virtualbox 5.10.0)

Code & Scripts

  • app.py - This is the entry of web service.
import os
import socket
from flask import Flask
from redis import Redis, RedisError

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        msg = 'Trying to talk to redis db ...'
        visits = redis.incr("counter")
        msg += 'It is working.'
    except RedisError:
        msg += 'cannot connect to Redis, counter disabled'
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    app.logger.info(msg)

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}" \
           "<b>Error:</b> {msg}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits, msg=msg)

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)
  • requirements.txt - Quick way to install a bunch of Python 3rd-party libs.
flask
redis
  • Dockerfile - Docker file to build the image.
# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 5000

# Define environment variable
ENV NAME World

#ENV http_proxy secure-proxy2.qualcomm.com:9090
#ENV https_proxy secure-proxy2.qualcomm.com:9090

# Run app.py when the container launches
CMD ["python", "app.py"]
  • docker-compose.yml - Docker composer file to setup the service.
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

Get it worked

It's pretty simple, huh? Not until we get it worked.
Run below command in the terminal.

docker-compose up --build

Please always use "--build" in the command, then it'd rebuild the app every time you change it, and start from top, not using any intermediate cache.

Little tips

  • Using "logger" instead of "print" to print logs in flask app.
app.logger.info("xxx")
app.logger.error("xxx")
  • Another tip is that, always use below command to stop the service. The docker composer will tear down everything for you, hence you're not gonna mess it up.
docker-compose down

OK. Have fun.

相关文章

网友评论

    本文标题:How to setup multi-containers se

    本文链接:https://www.haomeiwen.com/subject/gjtydftx.html